diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..44bd8e63 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,17 @@ +# Dependency updates for the site, the two Workers' tooling and the workflows. +# Security updates also need "Dependabot alerts" switched on in the repository +# settings (Settings → Advanced Security). +version: 2 +updates: + - package-ecosystem: npm + directory: /source + schedule: + interval: weekly + open-pull-requests-limit: 5 + groups: + minor-and-patch: + update-types: [minor, patch] + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthly diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..a79e79b3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,59 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + site: + name: Site (type-check, lint, build, page checks) + runs-on: ubuntu-latest + timeout-minutes: 30 + defaults: + run: + working-directory: source + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: source/package-lock.json + - run: npm ci + - run: npm run typecheck + - run: npm run lint + # Type-check, bundle, and render every route to static HTML. + - run: npm run build + - run: npm run check:static + - name: Install the browser for the page checks + run: npx playwright install --with-deps chromium + - run: npm run check:browser + - run: npm run check:a11y + + workers: + name: Workers (unit tests) + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: actions/setup-node@v4 + with: + node-version: 22 + - name: Fulfilment Worker + working-directory: workers/qector-fulfilment + run: npm test + - name: Security-header Worker + working-directory: workers/qector-headers + run: npm test diff --git a/.github/workflows/security-audit.yml b/.github/workflows/security-audit.yml index 877f55c8..51bfbfe7 100644 --- a/.github/workflows/security-audit.yml +++ b/.github/workflows/security-audit.yml @@ -1,4 +1,4 @@ -name: Production Security Audit +name: Production Security Audit on: schedule: diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/.well-known/acp.json b/.well-known/acp.json deleted file mode 100644 index 8ab45112..00000000 --- a/.well-known/acp.json +++ /dev/null @@ -1 +0,0 @@ -{"protocol":{"name":"acp","version":"0.1"},"api_base_url":"https://qector.store","transports":["https"],"capabilities":{"services":[{"name":"QECTOR commercial licensing","description":"Human-reviewed commercial evaluation and license inquiry path.","url":"https://qector.store/contact"}],"payments":false,"checkout":false,"requires_human_review":true}} diff --git a/.well-known/agent-skills/index.json b/.well-known/agent-skills/index.json deleted file mode 100644 index 46123249..00000000 --- a/.well-known/agent-skills/index.json +++ /dev/null @@ -1 +0,0 @@ -{"$schema":"https://agentskills.io/schemas/skills-index-v0.2.0.json","skills":[{"name":"QECTOR install guidance","type":"text/markdown","description":"Explain how to install and verify QECTOR Decoder 3 from PyPI.","url":"https://qector.store/.well-known/agent-skills/qector-install.md","sha256":"00b4b9d12be0914ab9f8a68cb7a1b5ebb79ac57f63582149541e54a5c78df7a7"},{"name":"QECTOR commercial licensing","type":"text/markdown","description":"Route commercial QECTOR licensing and source-review inquiries to the correct path.","url":"https://qector.store/.well-known/agent-skills/qector-commercial-licensing.md","sha256":"02ada38eacf33ee7e4521b38989a2af83f178fa5c76ddb106cb4d515f3fd4ec3"}]} diff --git a/.well-known/agent-skills/qector-commercial-licensing.md b/.well-known/agent-skills/qector-commercial-licensing.md deleted file mode 100644 index 8a657e15..00000000 --- a/.well-known/agent-skills/qector-commercial-licensing.md +++ /dev/null @@ -1,11 +0,0 @@ -# QECTOR commercial licensing skill - -Purpose: Help an AI agent route commercial QECTOR inquiries. - -Official contact path: -https://qector.store/contact - -Rules: -- Personal, academic, educational and non-commercial research use may be free under the license. -- Commercial use requires written permission. -- For pilots, labs, startups, OEM, SaaS, redistribution or source review, route the user to the contact form. diff --git a/.well-known/agent-skills/qector-install.md b/.well-known/agent-skills/qector-install.md deleted file mode 100644 index 4245c515..00000000 --- a/.well-known/agent-skills/qector-install.md +++ /dev/null @@ -1,16 +0,0 @@ -# QECTOR install skill - -Purpose: Help an AI agent explain how to install and verify QECTOR Decoder 3. - -Official command: - -```bash -pip install qector-decoder-v3 -python -c "from qector_decoder_v3 import UnionFindDecoder, BlossomDecoder; print('QECTOR OK')" -``` - -Rules: -- Use the PyPI wheel as the normal public install path. -- Do not recommend source builds as the primary public path. -- Mention standard CPython 3.9 to 3.13. -- If Windows uses a free-threaded Python such as cp313t, tell the user to use normal CPython. diff --git a/.well-known/api-catalog.json b/.well-known/api-catalog.json deleted file mode 100644 index 2918de4f..00000000 --- a/.well-known/api-catalog.json +++ /dev/null @@ -1 +0,0 @@ -{"linkset":[{"anchor":"https://qector.store","service-desc":[{"href":"https://qector.store/openapi.json","type":"application/vnd.oai.openapi+json"}],"service-doc":[{"href":"https://qector.store/docs","type":"text/html"}],"status":[{"href":"https://qector.store/health.json","type":"application/json"}],"alternate":[{"href":"https://qector.store/llms.txt","type":"text/plain"},{"href":"https://qector.store/llms-full.txt","type":"text/plain"}]}]} diff --git a/.well-known/http-message-signatures-directory.json b/.well-known/http-message-signatures-directory.json deleted file mode 100644 index 26738c2d..00000000 --- a/.well-known/http-message-signatures-directory.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "keys": [], - "comment": "QECTOR Store does not currently send signed automated bot requests. This Web Bot Auth directory is published for discovery readiness. Active public verification keys will be added here when QECTOR operates an outbound signed agent." -} diff --git a/.well-known/mcp.json b/.well-known/mcp.json deleted file mode 100644 index e2aca418..00000000 --- a/.well-known/mcp.json +++ /dev/null @@ -1 +0,0 @@ -{"serverInfo":{"name":"QECTOR Store Discovery","version":"0.1.0","description":"Discovery card for QECTOR Decoder v3 public website resources."},"transport":{"type":"none","description":"No remote MCP tool transport is exposed by this static public site."},"capabilities":{"tools":[],"resources":[{"name":"QECTOR documentation","uri":"https://qector.store/docs","mimeType":"text/html"},{"name":"QECTOR install guide","uri":"https://qector.store/installer","mimeType":"text/html"},{"name":"QECTOR LLM summary","uri":"https://qector.store/llms.txt","mimeType":"text/plain"}]},"contact":"https://qector.store/contact"} diff --git a/.well-known/mcp/server-card.json b/.well-known/mcp/server-card.json deleted file mode 100644 index 180ad5a8..00000000 --- a/.well-known/mcp/server-card.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "serverInfo": { - "name": "QECTOR Store Discovery", - "version": "1.0.0", - "description": "Discovery card for QECTOR Decoder v3 public website resources.", - "updated_at": "2026-08-25" - }, - "transport": { - "type": "none", - "description": "No remote MCP tool transport is exposed by this static public site." - }, - "capabilities": { - "tools": [], - "resources": [ - { "name": "QECTOR documentation", "uri": "https://qector.store/docs/", "mimeType": "text/html" }, - { "name": "QECTOR install guide", "uri": "https://qector.store/installer/", "mimeType": "text/html" }, - { "name": "QECTOR evidence registry", "uri": "https://qector.store/evidence/", "mimeType": "text/html" }, - { "name": "QECTOR LLM summary", "uri": "https://qector.store/llms.txt", "mimeType": "text/plain" } - ] - }, - "evidence": "https://qector.store/evidence/", - "contact": "https://qector.store/contact/" -} diff --git a/.well-known/mcp/server-cards.json b/.well-known/mcp/server-cards.json deleted file mode 100644 index 0de3ae28..00000000 --- a/.well-known/mcp/server-cards.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "servers": [ - { - "serverInfo": { - "name": "QECTOR Store Discovery", - "version": "1.0.0", - "description": "Discovery card for QECTOR Decoder v3 public website resources.", - "updated_at": "2026-08-25" - }, - "transport": { - "type": "none", - "description": "No remote MCP tool transport is exposed by this static public site." - }, - "capabilities": { - "tools": [], - "resources": [ - { "name": "QECTOR documentation", "uri": "https://qector.store/docs/", "mimeType": "text/html" }, - { "name": "QECTOR install guide", "uri": "https://qector.store/installer/", "mimeType": "text/html" }, - { "name": "QECTOR evidence registry", "uri": "https://qector.store/evidence/", "mimeType": "text/html" }, - { "name": "QECTOR LLM summary", "uri": "https://qector.store/llms.txt", "mimeType": "text/plain" } - ] - }, - "evidence": "https://qector.store/evidence/", - "contact": "https://qector.store/contact/" - } - ] -} diff --git a/.well-known/security.txt b/.well-known/security.txt deleted file mode 100644 index 694b4a1a..00000000 --- a/.well-known/security.txt +++ /dev/null @@ -1,6 +0,0 @@ -Contact: mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure -Contact: https://qector.store/security/ -Expires: 2027-11-06T00:00:00.000Z -Preferred-Languages: en, fr -Canonical: https://qector.store/.well-known/security.txt -Policy: https://qector.store/security/ diff --git a/.well-known/skills/index.json b/.well-known/skills/index.json deleted file mode 100644 index 46123249..00000000 --- a/.well-known/skills/index.json +++ /dev/null @@ -1 +0,0 @@ -{"$schema":"https://agentskills.io/schemas/skills-index-v0.2.0.json","skills":[{"name":"QECTOR install guidance","type":"text/markdown","description":"Explain how to install and verify QECTOR Decoder 3 from PyPI.","url":"https://qector.store/.well-known/agent-skills/qector-install.md","sha256":"00b4b9d12be0914ab9f8a68cb7a1b5ebb79ac57f63582149541e54a5c78df7a7"},{"name":"QECTOR commercial licensing","type":"text/markdown","description":"Route commercial QECTOR licensing and source-review inquiries to the correct path.","url":"https://qector.store/.well-known/agent-skills/qector-commercial-licensing.md","sha256":"02ada38eacf33ee7e4521b38989a2af83f178fa5c76ddb106cb4d515f3fd4ec3"}]} diff --git a/.well-known/tags.json b/.well-known/tags.json deleted file mode 100644 index ac25eb10..00000000 --- a/.well-known/tags.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "QECTOR Decoder v3 (1.0)", - "canonical": "https://qector.store", - "topics": [ - "quantum-error-correction", - "qec", - "quantum-computing", - "decoder", - "mwpm", - "union-find", - "bp-osd", - "ldpc", - "qldpc", - "surface-code", - "stim", - "pymatching", - "rust", - "python", - "cuda", - "batch-decoding", - "gpu-acceleration", - "error-correction", - "high-performance", - "reproducible-research", - "benchmarking", - "scientific-computing", - "research-tool", - "pyo3", - "performance", - "validation", - "belief-propagation", - "high-throughput" - ] -} diff --git a/.well-known/ucp.json b/.well-known/ucp.json deleted file mode 100644 index 196b15ca..00000000 --- a/.well-known/ucp.json +++ /dev/null @@ -1 +0,0 @@ -{"protocol":{"name":"ucp","version":"0.1"},"site":"https://qector.store","services":[{"name":"QECTOR commercial licensing","description":"Commercial licensing and evaluation inquiries for QECTOR Decoder v3.","endpoint":"https://qector.store/contact","type":"contact-form"}],"capabilities":{"payments":false,"checkout":false,"human_review_required":true}} diff --git a/404.html b/404.html deleted file mode 100644 index 0ec6b24b..00000000 --- a/404.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Page Not Found · QECTOR - - - - - - - - - - -
Skip to main content
404 · Not found

Page Not Found

The page you are looking for does not exist or has been moved. The links below will get you back on track.

- - - diff --git a/CNAME b/CNAME deleted file mode 100644 index a9c1f2ae..00000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -qector.store diff --git a/README.md b/README.md index 692f605f..bef02b7e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Live site: [qector.store](https://qector.store) -This repository contains the static GitHub Pages deployment and the Vite/React source for QECTOR Decoder v3. The QECTOR Decoder v3 Reference Manual v1.0.0 is the normative source for decoder contracts and claim boundaries: +This repository contains the Vite/React source of the site, the two Cloudflare Workers that sit in front of it, and the production audit. The QECTOR Decoder v3 Reference Manual v1.0.0 is the normative source for decoder contracts and claim boundaries: - DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) - Decoder repository: [github.com/GuillaumeLessard/qector-decoder](https://github.com/GuillaumeLessard/qector-decoder) @@ -11,19 +11,33 @@ This repository contains the static GitHub Pages deployment and the Vite/React s ## Repository Layout - `source/`: React, TypeScript, content, public assets, and build configuration. -- Root static files: the latest production build served by GitHub Pages. +- `workers/qector-fulfilment/`: Stripe webhook that signs and e-mails licence tokens (`qector.store/stripe/*`). +- `workers/qector-headers/`: adds the security headers and cache policy to every response. +- `scripts/security-audit.mjs`: checks the live headers, redirects and licence service (run nightly by `.github/workflows/security-audit.yml`). +- `gh-pages` branch: the built site, written by `npm run deploy`. Nothing is built or edited there by hand. ## Local Development ```text cd source npm ci +npx playwright install chromium # once, for `npm run check` +npm run dev npm run lint +npm run build # type-check, bundle, render every route to static HTML in dist/ +npm run check # static, browser and accessibility checks of dist/ +``` + +## Deployment + +```text +cd source npm run build -npm run dev +npm run deploy # commits dist/ to the local gh-pages branch +npm run deploy -- --push # pushes it; GitHub Pages publishes within minutes ``` -The build emits prerendered route shells for crawlers and direct GitHub Pages requests. The root static output is synchronized from `source/dist/` before deployment. +GitHub Pages serves the `gh-pages` branch, so only the built site is public on qector.store. The Workers are deployed separately with `npx wrangler deploy` from their own folders (see each folder's notes); deploy the site before `qector-headers` when both change, because the Worker's Content-Security-Policy is written for the current build. ## Content and Evidence Policy @@ -33,7 +47,7 @@ Logical results must be scored in observable/coset space, not by raw correction- ## Branding -The supplied QECTOR logo is `images/logo.png` and is copied to `source/public/images/logo.png` for the build. It is used by the header, footer, favicon, manifest, structured data, and Open Graph/Twitter metadata. No personal connection or audience export is included in the public site. +The supplied QECTOR logo is `source/public/images/logo.png`. It is used by the header, footer, favicon, manifest, structured data, and Open Graph/Twitter metadata. No personal connection or audience export is included in the public site. ## License diff --git a/_headers b/_headers deleted file mode 100644 index 1edc0629..00000000 --- a/_headers +++ /dev/null @@ -1,37 +0,0 @@ -# Netlify / Cloudflare Pages header syntax. GitHub Pages ignores this file, so -# none of it is enforced on the current apex deployment: it is kept correct so -# that moving the site behind Cloudflare Pages does not silently break checkout -# or booking. -# -# CSP third-party allowances, and why each is required: -# js.stripe.com : Stripe buy-button script on /pricing -# assets.calendly.com : Calendly inline embed loader -# calendly.com : the Calendly booking iframe itself (frame-src) -# fonts.googleapis.com / fonts.gstatic.com : webfont CSS + font files -# The previous policy allowed only 'self' plus one inline hash, which would have -# blocked the Stripe button and the Calendly widget outright. -# -# frame-src must be stated explicitly: it falls back to default-src ('self'), -# so without it the Calendly and Stripe iframes are refused. - -/* - Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - X-Frame-Options: DENY - Cross-Origin-Opener-Policy: same-origin-allow-popups - Cross-Origin-Resource-Policy: same-origin - X-Permitted-Cross-Domain-Policies: none - X-Content-Type-Options: nosniff - X-XSS-Protection: 1; mode=block - X-DNS-Prefetch-Control: off - X-Download-Options: noopen - Origin-Agent-Cluster: ?1 - Referrer-Policy: strict-origin-when-cross-origin - Permissions-Policy: accelerometer=(), ambient-light-sensor=(), autoplay=(self), camera=(), clipboard-read=(), clipboard-write=(self), document-domain=(), encrypted-media=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(self), usb=(), xr-spatial-tracking=() - Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; upgrade-insecure-requests; manifest-src 'self'; worker-src 'self' blob:; script-src 'self' 'sha256-47Y7xRUIVXITmosjladRK60OPYEE3BWeBiiCmfU0d8s=' 'sha256-2yoLb9krKtf6JSNKI8iic50UCBKaIgBtSuqyekQ5HtA=' https://js.stripe.com https://assets.calendly.com https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://assets.calendly.com; img-src 'self' data: https://files.stripe.com; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self' https://cloudflareinsights.com https://api.stripe.com https://js.stripe.com https://api.calendly.com https://calendly.com https://pypi.org; frame-src https://js.stripe.com https://checkout.stripe.com https://hooks.stripe.com https://calendly.com; frame-ancestors 'none'; form-action 'self' https://buy.stripe.com https://checkout.stripe.com https://billing.stripe.com; media-src 'self' blob: - Cache-Control: public, max-age=0, must-revalidate - -/assets/* - Cache-Control: public, max-age=31536000, immutable - -/.well-known/* - Cache-Control: public, max-age=0, must-revalidate diff --git a/_redirects b/_redirects deleted file mode 100644 index f4d5a010..00000000 --- a/_redirects +++ /dev/null @@ -1,3 +0,0 @@ -# Syntaxe Netlify : ignoree par GitHub Pages (la page 404 est servie par 404.html). -/license /license/ 301! -/* /index.html 200 diff --git a/about/index.html b/about/index.html deleted file mode 100644 index fed87ab1..00000000 --- a/about/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - About QECTOR · Quantum Error Correction - - - - - - - - - - -
Skip to main content
iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753

About QECTOR

Independent quantum error correction research, engineering, and commercialization, built by Guillaume Lessard with full transparency, reproducible artifacts, and no speculative claims.

Creator

Guillaume Lessard, software engineer and researcher based in Montreal / Longueuil, Québec, Canada.

Operating as the QEC software division of iD01t Productions (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling.

Publishing aliases:Guillaume Lessard(engineering)El'Nox Rah(research / authorship)DJ iD01t(music)

Research Background

  • CSS stabilizer codes: surface codes, LDPC, qLDPC
  • MWPM (Blossom), Belief-Matching, BP-OSD decoding
  • Custom CSS code topology research and GF(2) eligibility analysis
  • Bivariate bicycle qLDPC codes
  • Reproducible provenance and SHA-256 sealed artifacts on GitHub
  • Monte Carlo threshold analysis and reproducible validation workflows

Software Stack

  • Rust / PyO3: core decoder engine
  • Python 3.9 to 3.13: API, CLI, benchmarking, simulation
  • Stim: circuit-level noise simulation
  • OpenCL / CUDA: GPU-accelerated batch decoding
  • PyPI distribution: qector-decoder-v3
  • Ed25519 offline cryptographic signature verification
  • CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine

Engineering Philosophy

  • Reproducibility first: public claims link to supporting artifacts where published
  • Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free
  • Simulation-validated before any public claim
  • Full provenance trail: SHA-256 bundles
  • No vendor lock-in: pluggable CodeProvider architecture
  • Transparent validation reports with non-pass classification

QECTOR Product Scope

This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI.

  • QECTOR Decoder v3: Rust/Python multi-algorithm QEC decoder library (Source-Available)
  • Free QECTOR Workbench: live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router).
  • Documentation & Education: Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).

Project Timeline

2026-06-23

The public qectorlab.github.io repository was created.

2026-06-24

The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI.

2026-06-24 to 2026-07-26

The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata.

2026-08-02

QECTOR Decoder v3 v0.7.0 was published on PyPI.

2026-08-06

QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).

2026-08-11 to 2026-09-04

QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04).

2026-08-15 to 2026-08-24

The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24.

2026-11-06

QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans.

Transparency Statement

QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships.

- - - diff --git a/ads.txt b/ads.txt deleted file mode 100644 index ae70531b..00000000 --- a/ads.txt +++ /dev/null @@ -1 +0,0 @@ -google.com, pub-9299754077722043, DIRECT, f08c47fec0942fa0 diff --git a/ai.txt b/ai.txt deleted file mode 100644 index bb692ffd..00000000 --- a/ai.txt +++ /dev/null @@ -1,10 +0,0 @@ -QECTOR Decoder v3 - quantum error correction decoder package for Python and Rust. - -Maintained by Guillaume Lessard / iD01t Productions. - -AI agents and assistants: this site exposes machine-readable summaries at -/llms.txt and /llms-full.txt, an agent-skills index at -/.well-known/skills/index.json, and discovery metadata under /.well-known/. - -For commercial licensing, source-review, or integration requests, route to -https://qector.store/contact. diff --git a/assets/About-3TwVcIFU.js b/assets/About-3TwVcIFU.js deleted file mode 100644 index b0851369..00000000 --- a/assets/About-3TwVcIFU.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-CpdATiEY.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-BU6bVOrg.js b/assets/About-BU6bVOrg.js deleted file mode 100644 index 4cf23e36..00000000 --- a/assets/About-BU6bVOrg.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c,L as d}from"./index-CCmwjNGU.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{e as m}from"./vendor-ui-B8TlNU4J.js";a.registerPlugin(u);function f(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(d,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(m,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{f as default}; diff --git a/assets/About-BUf56YF-.js b/assets/About-BUf56YF-.js deleted file mode 100644 index 85be1e58..00000000 --- a/assets/About-BUf56YF-.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-iVST85F-.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-BZN32cY9.js b/assets/About-BZN32cY9.js deleted file mode 100644 index bfc7ea46..00000000 --- a/assets/About-BZN32cY9.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c,L as d}from"./index-CcwlvHYJ.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{e as m}from"./vendor-ui-B0ssGG4c.js";a.registerPlugin(u);function f(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(d,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(m,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{f as default}; diff --git a/assets/About-BbIEqzXR.js b/assets/About-BbIEqzXR.js deleted file mode 100644 index f29e48a0..00000000 --- a/assets/About-BbIEqzXR.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c}from"./index-DkYdPRY7.js";import{g as a,S as d}from"./vendor-gsap-a3sj5zmn.js";import{L as m}from"./vendor-PiU4YGcH.js";import{e as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(d);function y(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(m,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(u,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{y as default}; diff --git a/assets/About-C8aE746q.js b/assets/About-C8aE746q.js deleted file mode 100644 index 1b84a90a..00000000 --- a/assets/About-C8aE746q.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-_BpMZhV3.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-Cu_jIKW1.js b/assets/About-Cu_jIKW1.js deleted file mode 100644 index 91392319..00000000 --- a/assets/About-Cu_jIKW1.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-CqAA-ZXu.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-CzYv2IZf.js b/assets/About-CzYv2IZf.js deleted file mode 100644 index 82dbebdb..00000000 --- a/assets/About-CzYv2IZf.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-BcbVjARk.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-D3KKMkNy.js b/assets/About-D3KKMkNy.js deleted file mode 100644 index 1efd4dec..00000000 --- a/assets/About-D3KKMkNy.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c}from"./index-CxWP17m6.js";import{g as a,S as d}from"./vendor-gsap-a3sj5zmn.js";import{L as m}from"./vendor-PiU4YGcH.js";import{e as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(d);function y(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(m,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(u,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{y as default}; diff --git a/assets/About-DZ1qdQkd.js b/assets/About-DZ1qdQkd.js deleted file mode 100644 index 1ce3609a..00000000 --- a/assets/About-DZ1qdQkd.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-DRAXObZB.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-Ddg7J4Ee.js b/assets/About-Ddg7J4Ee.js deleted file mode 100644 index 304ed917..00000000 --- a/assets/About-Ddg7J4Ee.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-DlmjLVYe.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-Dhus-ur3.js b/assets/About-Dhus-ur3.js deleted file mode 100644 index a4d55f95..00000000 --- a/assets/About-Dhus-ur3.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-WV1aysjN.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-DnC04FuM.js b/assets/About-DnC04FuM.js deleted file mode 100644 index 5a7ab145..00000000 --- a/assets/About-DnC04FuM.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c}from"./index-abfjMTlQ.js";import{g as a,S as d}from"./vendor-gsap-a3sj5zmn.js";import{L as m}from"./vendor-PiU4YGcH.js";import{e as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(d);function y(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(m,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(u,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{y as default}; diff --git a/assets/About-DorgToxb.js b/assets/About-DorgToxb.js deleted file mode 100644 index 43126173..00000000 --- a/assets/About-DorgToxb.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-B9kEGiWi.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-DuDzDMwT.js b/assets/About-DuDzDMwT.js deleted file mode 100644 index 53d0b56f..00000000 --- a/assets/About-DuDzDMwT.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c,L as d}from"./index-PdoH5kLF.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{e as m}from"./vendor-ui-B8TlNU4J.js";a.registerPlugin(u);function f(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(d,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(m,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{f as default}; diff --git a/assets/About-Sj0SVf3I.js b/assets/About-Sj0SVf3I.js deleted file mode 100644 index 34090454..00000000 --- a/assets/About-Sj0SVf3I.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c}from"./index-Bh9DBCb3.js";import{g as a,S as d}from"./vendor-gsap-a3sj5zmn.js";import{L as m}from"./vendor-PiU4YGcH.js";import{e as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(d);function y(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(m,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(u,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{y as default}; diff --git a/assets/About-dHfyUSjm.js b/assets/About-dHfyUSjm.js deleted file mode 100644 index 03ff9429..00000000 --- a/assets/About-dHfyUSjm.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as d,J as m}from"./index-BN-vOeL2.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{L as x}from"./vendor-PiU4YGcH.js";import{e as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(u);function v(){const t=o.useRef([]),{version:c}=l();o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(m,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(x,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(h,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:`QECTOR Decoder v3 v${c||"1.0.0"} reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046).`},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0). QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{v as default}; diff --git a/assets/About-nvnHXVMG.js b/assets/About-nvnHXVMG.js deleted file mode 100644 index feeb0868..00000000 --- a/assets/About-nvnHXVMG.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c,L as d}from"./index-DayaklK-.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{e as m}from"./vendor-ui-B8TlNU4J.js";a.registerPlugin(u);function f(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(d,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(m,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{f as default}; diff --git a/assets/About-oOskQ3bw.js b/assets/About-oOskQ3bw.js deleted file mode 100644 index 86fb68c8..00000000 --- a/assets/About-oOskQ3bw.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c,L as d}from"./index-c1PDYu0j.js";import{g as a,S as u}from"./vendor-gsap-a3sj5zmn.js";import{e as m}from"./vendor-ui-B8TlNU4J.js";a.registerPlugin(u);function f(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(d,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2012), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(m,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{f as default}; diff --git a/assets/About-xwac7kSw.js b/assets/About-xwac7kSw.js deleted file mode 100644 index e2e03aee..00000000 --- a/assets/About-xwac7kSw.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as c}from"./index-BUYYSLdX.js";import{g as a,S as d}from"./vendor-gsap-a3sj5zmn.js";import{L as m}from"./vendor-PiU4YGcH.js";import{e as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";a.registerPlugin(d);function y(){const t=o.useRef([]);o.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=a.context(()=>{t.current.filter(Boolean).forEach(n=>{a.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const s=(r,i)=>{r&&(t.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"About · QECTOR",description:"About QECTOR: Guillaume Lessard, iD01t Productions, QEC research background, ORCID, GitHub artifacts, mission and engineering philosophy."}),e.jsx(c,{data:{"@context":"https://schema.org","@graph":[{"@type":"Person",name:"Guillaume Lessard",alternateName:"El'Nox Rah",url:"https://qector.store/about",sameAs:["https://orcid.org/0009-0000-3465-3753","https://github.com/GuillaumeLessard"],affiliation:{"@type":"Organization",name:"iD01t Productions"},jobTitle:"Independent QEC Researcher & Software Engineer",knowsAbout:["Quantum Error Correction","CSS Codes","LDPC Codes","MWPM Decoding","Rust","Python"]},{"@type":"Organization",name:"iD01t Productions",url:"https://qector.store",founder:{"@type":"Person",name:"Guillaume Lessard"},description:"QEC software division of iD01t Productions, developing high-performance QEC decoder libraries and GUIs."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"iD01t Productions · Longueuil, Québec · ORCID 0009-0000-3465-3753"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"About QECTOR"}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Independent quantum error correction research, engineering, and commercialization, built by ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Guillaume Lessard"})," with full transparency, reproducible artifacts, and no speculative claims."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-outline",children:["GitHub Artifacts",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsx(m,{to:"/contact",className:"btn-cyan",children:"Contact"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-6",children:[e.jsxs("div",{ref:r=>s(r,0),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Creator"}),e.jsxs("p",{className:"text-primary text-lg mb-3",children:[e.jsx("strong",{children:"Guillaume Lessard"}),", software engineer and researcher based in Montreal / Longueuil, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary leading-relaxed mb-4",children:["Operating as the QEC software division of ",e.jsx("strong",{children:"iD01t Productions"})," (founded 2023), Guillaume focuses on quantum error correction software engineering, building high-throughput decoders and advanced validation tooling."]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx("span",{className:"text-secondary text-sm",children:"Publishing aliases:"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"Guillaume Lessard"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(engineering)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"El'Nox Rah"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(research / authorship)"}),e.jsx("span",{className:"px-2 py-1 bg-surface rounded text-xs text-muted-foreground font-mono",children:"DJ iD01t"}),e.jsx("span",{className:"text-muted-foreground text-xs self-center",children:"(music)"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-4 py-2 bg-green-400/10 border border-green-400/20 rounded-lg text-sm text-green-400 font-mono hover:bg-green-400/20 transition-colors",children:[e.jsx(u,{size:16,className:"shrink-0","aria-hidden":"true"})," ORCID 0009-0000-3465-3753"]}),[{label:"GitHub Artifacts",href:"https://github.com/GuillaumeLessard/qector-decoder",external:!0},{label:"PyPI",href:"https://pypi.org/project/qector-decoder-v3/",external:!0},{label:"Play Store Book",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",external:!0}].map(r=>e.jsx("a",{href:r.href,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 bg-surface border border-gridline rounded-lg text-sm text-muted-foreground hover:text-cyan-300 hover:border-cyan-300/30 transition-colors",children:r.label},r.label))]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{ref:r=>s(r,1),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Research Background"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"CSS stabilizer codes: surface codes, LDPC, qLDPC"}),e.jsx("li",{children:"MWPM (Blossom), Belief-Matching, BP-OSD decoding"}),e.jsx("li",{children:"Custom CSS code topology research and GF(2) eligibility analysis"}),e.jsx("li",{children:"Bivariate bicycle qLDPC codes"}),e.jsx("li",{children:"Reproducible provenance and SHA-256 sealed artifacts on GitHub"}),e.jsx("li",{children:"Monte Carlo threshold analysis and reproducible validation workflows"})]})]}),e.jsxs("div",{ref:r=>s(r,2),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Software Stack"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Rust / PyO3: core decoder engine"}),e.jsx("li",{children:"Python 3.9 to 3.13: API, CLI, benchmarking, simulation"}),e.jsx("li",{children:"Stim: circuit-level noise simulation"}),e.jsx("li",{children:"OpenCL / CUDA: GPU-accelerated batch decoding"}),e.jsxs("li",{children:["PyPI distribution: ",e.jsx("code",{className:"text-cyan-300 text-xs",children:"qector-decoder-v3"})]}),e.jsx("li",{children:"Ed25519 offline cryptographic signature verification"}),e.jsx("li",{children:"CustomTkinter / FastAPI: QECTOR Workbench desktop interface & REST engine"})]})]}),e.jsxs("div",{ref:r=>s(r,3),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Engineering Philosophy"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Reproducibility first: public claims link to supporting artifacts where published"}),e.jsx("li",{children:"Honest documentation: Decoder is Source-Available (not free); Workbench GUI app is free"}),e.jsx("li",{children:"Simulation-validated before any public claim"}),e.jsx("li",{children:"Full provenance trail: SHA-256 bundles"}),e.jsx("li",{children:"No vendor lock-in: pluggable CodeProvider architecture"}),e.jsx("li",{children:"Transparent validation reports with non-pass classification"})]})]}),e.jsxs("div",{ref:r=>s(r,4),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"QECTOR Product Scope"}),e.jsx("p",{className:"text-xs text-secondary mb-2",children:"This site and QECTOR Decoder v3 + Workbench constitute the high-performance decoder library and professional GUI."}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"QECTOR Decoder v3"}),": Rust/Python multi-algorithm QEC decoder library (Source-Available)"]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Free QECTOR Workbench"}),": live Windows and Linux releases with 85-tool MCP servers and 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Documentation & Education"}),': Public methodology, validation guidance, and "Mastering QEC" book context (see the decoder repository for primary evidence).']})]})]})]}),e.jsxs("div",{ref:r=>s(r,5),className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Project Timeline"}),e.jsx("div",{className:"space-y-4",children:[{year:"2026-06-23",event:"The public qectorlab.github.io repository was created."},{year:"2026-06-24",event:"The qector-decoder repository was created and v0.5.0 / v0.5.1 were first recorded on PyPI."},{year:"2026-06-24 to 2026-07-26",event:"The verified PyPI release train progressed from v0.5.0 through v0.6.9. Dates are listed on the Changelog page from PyPI upload metadata."},{year:"2026-08-02",event:"QECTOR Decoder v3 v0.7.0 was published on PyPI."},{year:"2026-08-06",event:"QECTOR Decoder v3 v1.0.0 reached its first stable release, with the official reference manual (DOI 10.5281/zenodo.21941046)."},{year:"2026-08-11 to 2026-09-04",event:"QECTOR Workbench Windows v1.0.0 and v1.0.1 were followed by verified v1.0.7 releases for Windows and Linux (2026-09-04)."},{year:"2026-08-15 to 2026-08-24",event:"The Claude Plugin repository was created on 2026-08-15; plugin v1.0.6 was published on 2026-08-24."},{year:"2026-11-06",event:"QECTOR Decoder v3 v1.0.1 was published with 18 wheels for Python 3.9-3.14 and signed build provenance, alongside Claude Plugin v2.0.1 and the new commercial plans."}].map(r=>e.jsxs("div",{className:"flex flex-col gap-1 sm:flex-row sm:gap-4 items-start pb-4 border-b border-gridline/50 last:border-0",children:[e.jsx("span",{className:"text-cyan-300 font-mono text-sm sm:min-w-[80px] shrink-0 pt-0.5",children:r.year}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed min-w-0",children:r.event})]},r.year))})]}),e.jsxs("div",{ref:r=>s(r,6),className:"p-6 bg-green-400/5 border border-green-400/20 rounded-2xl",children:[e.jsx("h2",{className:"text-green-400 font-semibold text-sm uppercase tracking-wider mb-3",children:"Transparency Statement"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR is an independent R&D project, not backed by a quantum hardware company, VC funding, or a university lab. No hardware-specific measurement figures are published on this site, because results depend on your hardware. The decoder reached its first stable release on 2026-08-06 (v1.0.0); the current release is v1.0.1. QECTOR Decoder is source-available under the published license. Workbench release terms are platform-specific. We publish validation guidance and known limitations openly. Documented behavior is what ships."})]})]})})]})}export{y as default}; diff --git a/assets/Blog-B5AVcxHA.js b/assets/Blog-B5AVcxHA.js deleted file mode 100644 index 24c89d4b..00000000 --- a/assets/Blog-B5AVcxHA.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as d}from"./index-CCmwjNGU.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{B as x,k as m,l as p}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function j(){const[s,l]=o.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 underline underline-offset-2 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,n)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${n*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(x,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(m,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{j as default}; diff --git a/assets/Blog-B7IPXEkA.js b/assets/Blog-B7IPXEkA.js deleted file mode 100644 index 898ec3be..00000000 --- a/assets/Blog-B7IPXEkA.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-BUYYSLdX.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-B8QgtaGj.js b/assets/Blog-B8QgtaGj.js deleted file mode 100644 index 87bf1d93..00000000 --- a/assets/Blog-B8QgtaGj.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-abfjMTlQ.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-BB_6WkaC.js b/assets/Blog-BB_6WkaC.js deleted file mode 100644 index ebb1358b..00000000 --- a/assets/Blog-BB_6WkaC.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-DlmjLVYe.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-BFZmecCN.js b/assets/Blog-BFZmecCN.js deleted file mode 100644 index c64f7080..00000000 --- a/assets/Blog-BFZmecCN.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-Bh9DBCb3.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-BIVCFw61.js b/assets/Blog-BIVCFw61.js deleted file mode 100644 index f7aca9b1..00000000 --- a/assets/Blog-BIVCFw61.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as d}from"./index-c1PDYu0j.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{B as x,k as m,l as p}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function j(){const[s,l]=o.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 underline underline-offset-2 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,n)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${n*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(x,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(m,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{j as default}; diff --git a/assets/Blog-BSuGBgCE.js b/assets/Blog-BSuGBgCE.js deleted file mode 100644 index 4dd6d41e..00000000 --- a/assets/Blog-BSuGBgCE.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as d}from"./index-DayaklK-.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{B as x,k as m,l as p}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function j(){const[s,l]=o.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 underline underline-offset-2 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,n)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${n*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(x,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(m,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{j as default}; diff --git a/assets/Blog-BcO2ftSu.js b/assets/Blog-BcO2ftSu.js deleted file mode 100644 index de2406b7..00000000 --- a/assets/Blog-BcO2ftSu.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-B9kEGiWi.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-C2PtKQPL.js b/assets/Blog-C2PtKQPL.js deleted file mode 100644 index 4d2fca90..00000000 --- a/assets/Blog-C2PtKQPL.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-BcbVjARk.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-CVJEEWRY.js b/assets/Blog-CVJEEWRY.js deleted file mode 100644 index e649f690..00000000 --- a/assets/Blog-CVJEEWRY.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as d}from"./index-PdoH5kLF.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{B as x,k as m,l as p}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function j(){const[s,l]=o.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,n)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${n*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(x,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(m,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{j as default}; diff --git a/assets/Blog-Caqe2zJR.js b/assets/Blog-Caqe2zJR.js deleted file mode 100644 index 6e97066b..00000000 --- a/assets/Blog-Caqe2zJR.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-DkYdPRY7.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-Cd2PdBpE.js b/assets/Blog-Cd2PdBpE.js deleted file mode 100644 index 96d78db4..00000000 --- a/assets/Blog-Cd2PdBpE.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-DRAXObZB.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-Cvysd4Ha.js b/assets/Blog-Cvysd4Ha.js deleted file mode 100644 index d4ba16e2..00000000 --- a/assets/Blog-Cvysd4Ha.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-CpdATiEY.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-D-1MbS1Y.js b/assets/Blog-D-1MbS1Y.js deleted file mode 100644 index 70a59c51..00000000 --- a/assets/Blog-D-1MbS1Y.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-_BpMZhV3.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-DD-Qo4do.js b/assets/Blog-DD-Qo4do.js deleted file mode 100644 index 9bc02253..00000000 --- a/assets/Blog-DD-Qo4do.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-iVST85F-.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-DNJmCnqw.js b/assets/Blog-DNJmCnqw.js deleted file mode 100644 index f69416a3..00000000 --- a/assets/Blog-DNJmCnqw.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-CqAA-ZXu.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-DrxsUsTK.js b/assets/Blog-DrxsUsTK.js deleted file mode 100644 index ef10ce4f..00000000 --- a/assets/Blog-DrxsUsTK.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-WV1aysjN.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-GfQMeZ3H.js b/assets/Blog-GfQMeZ3H.js deleted file mode 100644 index 6866824e..00000000 --- a/assets/Blog-GfQMeZ3H.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as d}from"./index-CcwlvHYJ.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{B as x,k as m,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function j(){const[s,l]=o.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,n)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${n*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(x,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(m,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{j as default}; diff --git a/assets/Blog-U8RuDZLO.js b/assets/Blog-U8RuDZLO.js deleted file mode 100644 index 53f32e2a..00000000 --- a/assets/Blog-U8RuDZLO.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-BN-vOeL2.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/Blog-k72nF5ZD.js b/assets/Blog-k72nF5ZD.js deleted file mode 100644 index d7494fd6..00000000 --- a/assets/Blog-k72nF5ZD.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-CxWP17m6.js";import{b as a}from"./blogData-OjR2ZtNr.js";import{L as d}from"./vendor-PiU4YGcH.js";import{B as m,k as x,l as p}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function v(){const[s,l]=n.useState("All"),i=["All",...Array.from(new Set(a.map(t=>t.category)))],r=s==="All"?a:a.filter(t=>t.category===s);return e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(c,{title:"Blog · QECTOR",description:"QECTOR field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration."}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[500px] bg-cyan-400/10 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-6 relative z-10",children:[e.jsxs("div",{className:"text-center mb-20 animate-in fade-in slide-in-from-bottom-8 duration-700",children:[e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight mb-6 bg-gradient-to-br from-white to-slate-400 bg-clip-text text-transparent",children:["Engineering ",e.jsx("br",{}),e.jsx("span",{className:"text-cyan-300",children:"Fault Tolerance"})]}),e.jsx("p",{className:"text-xl text-slate-400 max-w-2xl mx-auto",children:"Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction."})]}),e.jsx("div",{className:"mb-12 flex flex-wrap items-center justify-center gap-3",role:"group","aria-label":"Filter articles by topic",children:i.map(t=>e.jsx("button",{type:"button","aria-pressed":s===t,onClick:()=>l(t),className:`rounded-full border px-4 py-2 text-sm font-medium transition-colors duration-300 ${s===t?"border-cyan-300 bg-cyan-300/10 text-cyan-200":"border-slate-800 bg-slate-900/50 text-slate-400 hover:border-cyan-400/40 hover:text-slate-200"}`,children:t},t))}),e.jsxs("p",{className:"mb-6 text-center text-sm text-slate-400",children:["Showing ",r.length," of ",a.length," field notes. Claims are scoped to the ",e.jsx("a",{className:"text-cyan-300 hover:text-cyan-200",href:"https://doi.org/10.5281/zenodo.21941046",children:"v1.0.0 reference manual"}),"."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:r.map((t,o)=>e.jsxs(d,{to:`/blog/${t.id}`,className:"group relative flex flex-col bg-slate-900/50 backdrop-blur-xl border border-slate-800 rounded-3xl p-8 hover:bg-slate-800/50 hover:border-cyan-400/30 transition-all duration-500 animate-in fade-in slide-in-from-bottom-8",style:{animationDelay:`${o*100}ms`,animationFillMode:"both"},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-400/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 rounded-3xl"}),e.jsxs("div",{className:"relative z-10 flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6",children:[e.jsxs("div",{className:"flex items-center space-x-2 text-cyan-300",children:[e.jsx(m,{size:18}),e.jsx("span",{className:"text-sm font-semibold tracking-wider uppercase",children:"Article"})]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-2.5 py-1 text-[0.65rem] font-semibold uppercase tracking-wider text-slate-400",children:t.category})]}),e.jsx("h2",{className:"text-2xl font-bold mb-4 text-white group-hover:text-cyan-200 transition-colors duration-300",children:t.title}),e.jsx("p",{className:"text-slate-400 mb-8 flex-grow leading-relaxed",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between mt-auto pt-6 border-t border-slate-800",children:[e.jsxs("div",{className:"flex items-center text-slate-400 text-sm",children:[e.jsx(x,{size:14,className:"mr-2"}),t.date]}),e.jsx(p,{size:18,className:"text-cyan-400 transform group-hover:translate-x-1 transition-transform duration-300"})]})]})]},t.id))})]})]})]})}export{v as default}; diff --git a/assets/BlogPost-6BWrUJEi.js b/assets/BlogPost-6BWrUJEi.js deleted file mode 100644 index a52fa49f..00000000 --- a/assets/BlogPost-6BWrUJEi.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-DkYdPRY7.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-7-Xf40jM.js b/assets/BlogPost-7-Xf40jM.js deleted file mode 100644 index 3f19eef8..00000000 --- a/assets/BlogPost-7-Xf40jM.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-DlmjLVYe.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-BD36pT-C.js b/assets/BlogPost-BD36pT-C.js deleted file mode 100644 index b11b7eb8..00000000 --- a/assets/BlogPost-BD36pT-C.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as j}from"./vendor-react-BiHfrq0e.js";import{S as k,C as E}from"./index-B9kEGiWi.js";import{b as C}from"./blogData-OjR2ZtNr.js";import{M as A,r as L,a as B,b as P,c as z}from"./vendor-md-CLKxNZoa.js";import{C as F,L as y}from"./vendor-PiU4YGcH.js";import{m as S,k as $,n as R}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function M(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||M(h);return e.jsx(t,{...m,id:p,children:x})}}const I={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=F(),r=C.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[w,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const v=!!(r&&h!==r.filename),N=!!(r&&w===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(k,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(y,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(S,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx($,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:v?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx(R,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):N?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(A,{remarkPlugins:[P,z],rehypePlugins:[L,B],components:{...I,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{node:n,children:a}=s,o=j.Children.toArray(a)[0];let l="",c="text";if(j.isValidElement(o)){const g=o.props,b=/language-([\w-]+)/.exec(g.className||"");b&&(c=b[1]),l=u(g.children).replace(/\n$/,"")}return e.jsx(E,{code:l,language:c,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(y,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-Bf5JMy3h.js b/assets/BlogPost-Bf5JMy3h.js deleted file mode 100644 index 6fce6778..00000000 --- a/assets/BlogPost-Bf5JMy3h.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as j}from"./vendor-react-BiHfrq0e.js";import{S as k,C as E}from"./index-BcbVjARk.js";import{b as C}from"./blogData-OjR2ZtNr.js";import{M as A,r as L,a as B,b as P,c as z}from"./vendor-md-CLKxNZoa.js";import{C as F,L as y}from"./vendor-PiU4YGcH.js";import{m as S,k as $,n as R}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function M(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||M(h);return e.jsx(t,{...m,id:p,children:x})}}const I={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=F(),r=C.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[w,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const v=!!(r&&h!==r.filename),N=!!(r&&w===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(k,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(y,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(S,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx($,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:v?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx(R,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):N?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(A,{remarkPlugins:[P,z],rehypePlugins:[L,B],components:{...I,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{node:n,children:a}=s,o=j.Children.toArray(a)[0];let l="",c="text";if(j.isValidElement(o)){const g=o.props,b=/language-([\w-]+)/.exec(g.className||"");b&&(c=b[1]),l=u(g.children).replace(/\n$/,"")}return e.jsx(E,{code:l,language:c,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(y,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-BrBVXcyO.js b/assets/BlogPost-BrBVXcyO.js deleted file mode 100644 index 2e06b5a2..00000000 --- a/assets/BlogPost-BrBVXcyO.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e,R as j}from"./vendor-react-BiHfrq0e.js";import{S as w,C as k}from"./index-abfjMTlQ.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as $,L as f}from"./vendor-PiU4YGcH.js";import{m as z,k as F,n as M}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function S(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function c(t){return function({children:i,...m}){const h=u(i),p=m.id||S(h);return e.jsx(t,{...m,id:p,children:i})}}const R={h1:c("h1"),h2:c("h2"),h3:c("h3"),h4:c("h4"),h5:c("h5"),h6:c("h6")};function W(){const{id:t}=$(),s=E.find(r=>r.id===t),[i,m]=x.useState(""),[h,p]=x.useState(null),[y,g]=x.useState(null);x.useEffect(()=>{if(!s)return;const r=new AbortController,n=s.filename;return fetch(`/blog/${n}`,{signal:r.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),g(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),g(n))}),()=>r.abort()},[s]);const N=!!(s&&h!==s.filename),v=!!(s&&y===s.filename);return x.useEffect(()=>{function r(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const d=document.getElementById(l.slice(1));d&&(d.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",r),()=>document.removeEventListener("click",r)},[]),s?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(w,{title:`${s.title} - QECTOR Blog`,description:s.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(f,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(z,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(F,{size:16,className:"mr-2"}),s.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:s.category}),e.jsxs("span",{className:"text-sm text-slate-400",children:["By ",e.jsx(f,{to:"/guillaume-lessard",className:"hover:text-cyan-300",children:"Guillaume Lessard"}),i?` · ${Math.max(1,Math.round(i.split(/\s+/).length/220))} min read`:""]})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:s.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:s.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:N?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx(M,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...R,table:r=>{const{node:n,...a}=r;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:r=>{const{children:n}=r,a=j.Children.toArray(n)[0];let o="",l="text";if(j.isValidElement(a)){const d=a.props,b=/language-([\w-]+)/.exec(d.className||"");b&&(l=b[1]),o=u(d.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:r=>{const n=r.width!=null&&r.height!=null;return e.jsx("img",{...r,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:i})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(f,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{W as default}; diff --git a/assets/BlogPost-Cflzrvst.js b/assets/BlogPost-Cflzrvst.js deleted file mode 100644 index 78d76246..00000000 --- a/assets/BlogPost-Cflzrvst.js +++ /dev/null @@ -1,292 +0,0 @@ -import{g as zs,j as pe,r as Xr,R as Fi}from"./vendor-react-BiHfrq0e.js";import{b as Bc,L as P0,S as Fc,C as Hc}from"./index-CCmwjNGU.js";import{b as zc}from"./blogData-OjR2ZtNr.js";import{m as Uc,k as qc,n as Yc}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function Hi(e){const t=[],r=String(e||"");let n=r.indexOf(","),a=0,i=!1;for(;!i;){n===-1&&(n=r.length,i=!0);const u=r.slice(a,n).trim();(u||!i)&&t.push(u),a=n+1,n=r.indexOf(",",a)}return t}function Us(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const Gc=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Vc=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,jc={};function zi(e,t){return(jc.jsx?Vc:Gc).test(e)}const Wc=/[ \t\n\f\r]/g;function Xc(e){return typeof e=="object"?e.type==="text"?Ui(e.value):!1:Ui(e)}function Ui(e){return e.replace(Wc,"")===""}class Tn{constructor(t,r,n){this.normal=r,this.property=t,n&&(this.space=n)}}Tn.prototype.normal={};Tn.prototype.property={};Tn.prototype.space=void 0;function qs(e,t){const r={},n={};for(const a of e)Object.assign(r,a.property),Object.assign(n,a.normal);return new Tn(r,n,t)}function fn(e){return e.toLowerCase()}class nt{constructor(t,r){this.attribute=r,this.property=t}}nt.prototype.attribute="";nt.prototype.booleanish=!1;nt.prototype.boolean=!1;nt.prototype.commaOrSpaceSeparated=!1;nt.prototype.commaSeparated=!1;nt.prototype.defined=!1;nt.prototype.mustUseProperty=!1;nt.prototype.number=!1;nt.prototype.overloadedBoolean=!1;nt.prototype.property="";nt.prototype.spaceSeparated=!1;nt.prototype.space=void 0;let $c=0;const le=gr(),Le=gr(),Ea=gr(),q=gr(),ye=gr(),fr=gr(),st=gr();function gr(){return 2**++$c}const Ta=Object.freeze(Object.defineProperty({__proto__:null,boolean:le,booleanish:Le,commaOrSpaceSeparated:st,commaSeparated:fr,number:q,overloadedBoolean:Ea,spaceSeparated:ye},Symbol.toStringTag,{value:"Module"})),B0=Object.keys(Ta);class Za extends nt{constructor(t,r,n,a){let i=-1;if(super(t,r),qi(this,"space",a),typeof n=="number")for(;++i4&&r.slice(0,4)==="data"&&e1.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(Yi,r1);n="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!Yi.test(i)){let u=i.replace(Zc,t1);u.charAt(0)!=="-"&&(u="-"+u),t="data"+u}}a=Za}return new a(n,t)}function t1(e){return"-"+e.toLowerCase()}function r1(e){return e.charAt(1).toUpperCase()}const xn=qs([Ys,Qc,js,Ws,Xs],"html"),rr=qs([Ys,Kc,js,Ws,Xs],"svg");function Gi(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function $s(e){return e.join(" ").trim()}var Ar={},F0,Vi;function n1(){if(Vi)return F0;Vi=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,n=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,i=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,s=/^\s+|\s+$/g,l=` -`,c="/",d="*",f="",g="comment",p="declaration";function x(D,_){if(typeof D!="string")throw new TypeError("First argument must be a string");if(!D)return[];_=_||{};var N=1,M=1;function W(ne){var X=ne.match(t);X&&(N+=X.length);var me=ne.lastIndexOf(l);M=~me?ne.length-me:M+ne.length}function j(){var ne={line:N,column:M};return function(X){return X.position=new L(ne),K(),X}}function L(ne){this.start=ne,this.end={line:N,column:M},this.source=_.source}L.prototype.content=D;function ee(ne){var X=new Error(_.source+":"+N+":"+M+": "+ne);if(X.reason=ne,X.filename=_.source,X.line=N,X.column=M,X.source=D,!_.silent)throw X}function re(ne){var X=ne.exec(D);if(X){var me=X[0];return W(me),D=D.slice(me.length),X}}function K(){re(r)}function R(ne){var X;for(ne=ne||[];X=J();)X!==!1&&ne.push(X);return ne}function J(){var ne=j();if(!(c!=D.charAt(0)||d!=D.charAt(1))){for(var X=2;f!=D.charAt(X)&&(d!=D.charAt(X)||c!=D.charAt(X+1));)++X;if(X+=2,f===D.charAt(X-1))return ee("End of comment missing");var me=D.slice(2,X-2);return M+=2,W(me),D=D.slice(X),M+=2,ne({type:g,comment:me})}}function Q(){var ne=j(),X=re(n);if(X){if(J(),!re(a))return ee("property missing ':'");var me=re(i),ke=ne({type:p,property:S(X[0].replace(e,f)),value:me?S(me[0].replace(e,f)):f});return re(u),ke}}function be(){var ne=[];R(ne);for(var X;X=Q();)X!==!1&&(ne.push(X),R(ne));return ne}return K(),be()}function S(D){return D?D.replace(s,f):f}return F0=x,F0}var ji;function a1(){if(ji)return Ar;ji=1;var e=Ar&&Ar.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Ar,"__esModule",{value:!0}),Ar.default=r;const t=e(n1());function r(n,a){let i=null;if(!n||typeof n!="string")return i;const u=(0,t.default)(n),s=typeof a=="function";return u.forEach(l=>{if(l.type!=="declaration")return;const{property:c,value:d}=l;s?a(c,d,l):d&&(i=i||{},i[c]=d)}),i}return Ar}var $r={},Wi;function i1(){if(Wi)return $r;Wi=1,Object.defineProperty($r,"__esModule",{value:!0}),$r.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,n=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,i=function(c){return!c||r.test(c)||e.test(c)},u=function(c,d){return d.toUpperCase()},s=function(c,d){return"".concat(d,"-")},l=function(c,d){return d===void 0&&(d={}),i(c)?c:(c=c.toLowerCase(),d.reactCompat?c=c.replace(a,s):c=c.replace(n,s),c.replace(t,u))};return $r.camelCase=l,$r}var Qr,Xi;function u1(){if(Xi)return Qr;Xi=1;var e=Qr&&Qr.__importDefault||function(a){return a&&a.__esModule?a:{default:a}},t=e(a1()),r=i1();function n(a,i){var u={};return!a||typeof a!="string"||(0,t.default)(a,function(s,l){s&&l&&(u[(0,r.camelCase)(s,i)]=l)}),u}return n.default=n,Qr=n,Qr}var s1=u1();const l1=zs(s1),d0=Qs("end"),_t=Qs("start");function Qs(e){return t;function t(r){const n=r&&r.position&&r.position[e]||{};if(typeof n.line=="number"&&n.line>0&&typeof n.column=="number"&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset=="number"&&n.offset>-1?n.offset:void 0}}}function o1(e){const t=_t(e),r=d0(e);if(t&&r)return{start:t,end:r}}function nn(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?$i(e.position):"start"in e||"end"in e?$i(e):"line"in e||"column"in e?xa(e):""}function xa(e){return Qi(e&&e.line)+":"+Qi(e&&e.column)}function $i(e){return xa(e&&e.start)+"-"+xa(e&&e.end)}function Qi(e){return e&&typeof e=="number"?e:1}class je extends Error{constructor(t,r,n){super(),typeof r=="string"&&(n=r,r=void 0);let a="",i={},u=!1;if(r&&("line"in r&&"column"in r?i={place:r}:"start"in r&&"end"in r?i={place:r}:"type"in r?i={ancestors:[r],place:r.position}:i={...r}),typeof t=="string"?a=t:!i.cause&&t&&(u=!0,a=t.message,i.cause=t),!i.ruleId&&!i.source&&typeof n=="string"){const l=n.indexOf(":");l===-1?i.ruleId=n:(i.source=n.slice(0,l),i.ruleId=n.slice(l+1))}if(!i.place&&i.ancestors&&i.ancestors){const l=i.ancestors[i.ancestors.length-1];l&&(i.place=l.position)}const s=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=s?s.line:void 0,this.name=nn(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=u&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}je.prototype.file="";je.prototype.name="";je.prototype.reason="";je.prototype.message="";je.prototype.stack="";je.prototype.column=void 0;je.prototype.line=void 0;je.prototype.ancestors=void 0;je.prototype.cause=void 0;je.prototype.fatal=void 0;je.prototype.place=void 0;je.prototype.ruleId=void 0;je.prototype.source=void 0;const ei={}.hasOwnProperty,c1=new Map,h1=/[A-Z]/g,d1=new Set(["table","tbody","thead","tfoot","tr"]),f1=new Set(["td","th"]),Ks="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function m1(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let n;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=v1(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=y1(r,t.jsx,t.jsxs)}const a={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:n,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?rr:xn,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},i=Js(a,e,void 0);return i&&typeof i!="string"?i:a.create(e,a.Fragment,{children:i||void 0},void 0)}function Js(e,t,r){if(t.type==="element")return p1(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return g1(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return E1(e,t,r);if(t.type==="mdxjsEsm")return b1(e,t);if(t.type==="root")return T1(e,t,r);if(t.type==="text")return x1(e,t)}function p1(e,t,r){const n=e.schema;let a=n;t.tagName.toLowerCase()==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=el(e,t.tagName,!1),u=A1(e,t);let s=ri(e,t);return d1.has(t.tagName)&&(s=s.filter(function(l){return typeof l=="string"?!Xc(l):!0})),Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function g1(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}mn(e,t.position)}function b1(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);mn(e,t.position)}function E1(e,t,r){const n=e.schema;let a=n;t.name==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=t.name===null?e.Fragment:el(e,t.name,!0),u=k1(e,t),s=ri(e,t);return Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function T1(e,t,r){const n={};return ti(n,ri(e,t)),e.create(t,e.Fragment,n,r)}function x1(e,t){return t.value}function Zs(e,t,r,n){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=n)}function ti(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function y1(e,t,r){return n;function n(a,i,u,s){const c=Array.isArray(u.children)?r:t;return s?c(i,u,s):c(i,u)}}function v1(e,t){return r;function r(n,a,i,u){const s=Array.isArray(i.children),l=_t(n);return t(a,i,u,s,{columnNumber:l?l.column-1:void 0,fileName:e,lineNumber:l?l.line:void 0},void 0)}}function A1(e,t){const r={};let n,a;for(a in t.properties)if(a!=="children"&&ei.call(t.properties,a)){const i=S1(e,a,t.properties[a]);if(i){const[u,s]=i;e.tableCellAlignToStyle&&u==="align"&&typeof s=="string"&&f1.has(t.tagName)?n=s:r[u]=s}}if(n){const i=r.style||(r.style={});i[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function k1(e,t){const r={};for(const n of t.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&e.evaluater){const i=n.data.estree.body[0];i.type;const u=i.expression;u.type;const s=u.properties[0];s.type,Object.assign(r,e.evaluater.evaluateExpression(s.argument))}else mn(e,t.position);else{const a=n.name;let i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&e.evaluater){const s=n.value.data.estree.body[0];s.type,i=e.evaluater.evaluateExpression(s.expression)}else mn(e,t.position);else i=n.value===null?!0:n.value;r[a]=i}return r}function ri(e,t){const r=[];let n=-1;const a=e.passKeys?new Map:c1;for(;++na?0:a+t:t=t>a?a:t,r=r>0?r:0,n.length<1e4)u=Array.from(n),u.unshift(t,r),e.splice(...u);else for(r&&e.splice(t,r);i0?(lt(e,e.length,0,t),e):t}const Zi={}.hasOwnProperty;function rl(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function xt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ke=nr(/[A-Za-z]/),Ge=nr(/[\dA-Za-z]/),R1=nr(/[#-'*+\--9=?A-Z^-~]/);function Zn(e){return e!==null&&(e<32||e===127)}const ya=nr(/\d/),M1=nr(/[\dA-Fa-f]/),P1=nr(/[!-/:-@[-`{-~]/);function ae(e){return e!==null&&e<-2}function ve(e){return e!==null&&(e<0||e===32)}function ge(e){return e===-2||e===-1||e===32}const f0=nr(new RegExp("\\p{P}|\\p{S}","u")),pr=nr(/\s/);function nr(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function Pr(e){const t=[];let r=-1,n=0,a=0;for(;++r55295&&i<57344){const s=e.charCodeAt(r+1);i<56320&&s>56319&&s<57344?(u=String.fromCharCode(i,s),a=1):u="�"}else u=String.fromCharCode(i);u&&(t.push(e.slice(n,r),encodeURIComponent(u)),n=r+a+1,u=""),a&&(r+=a,a=0)}return t.join("")+e.slice(n)}function fe(e,t,r,n){const a=n?n-1:Number.POSITIVE_INFINITY;let i=0;return u;function u(l){return ge(l)?(e.enter(r),s(l)):t(l)}function s(l){return ge(l)&&i++u))return;const ee=t.events.length;let re=ee,K,R;for(;re--;)if(t.events[re][0]==="exit"&&t.events[re][1].type==="chunkFlow"){if(K){R=t.events[re][1].end;break}K=!0}for(_(n),L=ee;LM;){const j=r[W];t.containerState=j[1],j[0].exit.call(t,e)}r.length=M}function N(){a.write([null]),i=void 0,a=void 0,t.containerState._closeFlow=void 0}}function U1(e,t,r){return fe(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ir(e){if(e===null||ve(e)||pr(e))return 1;if(f0(e))return 2}function m0(e,t,r){const n=[];let a=-1;for(;++a1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const f={...e[n][1].end},g={...e[r][1].start};tu(f,-l),tu(g,l),u={type:l>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},s={type:l>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:g},i={type:l>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[r][1].start}},a={type:l>1?"strong":"emphasis",start:{...u.start},end:{...s.end}},e[n][1].end={...u.start},e[r][1].start={...s.end},c=[],e[n][1].end.offset-e[n][1].start.offset&&(c=mt(c,[["enter",e[n][1],t],["exit",e[n][1],t]])),c=mt(c,[["enter",a,t],["enter",u,t],["exit",u,t],["enter",i,t]]),c=mt(c,m0(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),c=mt(c,[["exit",i,t],["enter",s,t],["exit",s,t],["exit",a,t]]),e[r][1].end.offset-e[r][1].start.offset?(d=2,c=mt(c,[["enter",e[r][1],t],["exit",e[r][1],t]])):d=0,lt(e,n-1,r-n+3,c),r=n+c.length-d-2;break}}for(r=-1;++r0&&ge(L)?fe(e,N,"linePrefix",i+1)(L):N(L)}function N(L){return L===null||ae(L)?e.check(ru,S,W)(L):(e.enter("codeFlowValue"),M(L))}function M(L){return L===null||ae(L)?(e.exit("codeFlowValue"),N(L)):(e.consume(L),M)}function W(L){return e.exit("codeFenced"),t(L)}function j(L,ee,re){let K=0;return R;function R(X){return L.enter("lineEnding"),L.consume(X),L.exit("lineEnding"),J}function J(X){return L.enter("codeFencedFence"),ge(X)?fe(L,Q,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(X):Q(X)}function Q(X){return X===s?(L.enter("codeFencedFenceSequence"),be(X)):re(X)}function be(X){return X===s?(K++,L.consume(X),be):K>=u?(L.exit("codeFencedFenceSequence"),ge(X)?fe(L,ne,"whitespace")(X):ne(X)):re(X)}function ne(X){return X===null||ae(X)?(L.exit("codeFencedFence"),ee(X)):re(X)}}}function Z1(e,t,r){const n=this;return a;function a(u){return u===null?r(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}const z0={name:"codeIndented",tokenize:th},eh={partial:!0,tokenize:rh};function th(e,t,r){const n=this;return a;function a(c){return e.enter("codeIndented"),fe(e,i,"linePrefix",5)(c)}function i(c){const d=n.events[n.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?u(c):r(c)}function u(c){return c===null?l(c):ae(c)?e.attempt(eh,u,l)(c):(e.enter("codeFlowValue"),s(c))}function s(c){return c===null||ae(c)?(e.exit("codeFlowValue"),u(c)):(e.consume(c),s)}function l(c){return e.exit("codeIndented"),t(c)}}function rh(e,t,r){const n=this;return a;function a(u){return n.parser.lazy[n.now().line]?r(u):ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),a):fe(e,i,"linePrefix",5)(u)}function i(u){const s=n.events[n.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(u):ae(u)?a(u):r(u)}}const nh={name:"codeText",previous:ih,resolve:ah,tokenize:uh};function ah(e){let t=e.length-4,r=3,n,a;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(t,r,n){const a=r||0;this.setCursor(Math.trunc(t));const i=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return n&&Kr(this.left,n),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Kr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Kr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(u):e.interrupt(n.parser.constructs.flow,r,t)(u)}}function ll(e,t,r,n,a,i,u,s,l){const c=l||Number.POSITIVE_INFINITY;let d=0;return f;function f(_){return _===60?(e.enter(n),e.enter(a),e.enter(i),e.consume(_),e.exit(i),g):_===null||_===32||_===41||Zn(_)?r(_):(e.enter(n),e.enter(u),e.enter(s),e.enter("chunkString",{contentType:"string"}),S(_))}function g(_){return _===62?(e.enter(i),e.consume(_),e.exit(i),e.exit(a),e.exit(n),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(_))}function p(_){return _===62?(e.exit("chunkString"),e.exit(s),g(_)):_===null||_===60||ae(_)?r(_):(e.consume(_),_===92?x:p)}function x(_){return _===60||_===62||_===92?(e.consume(_),p):p(_)}function S(_){return!d&&(_===null||_===41||ve(_))?(e.exit("chunkString"),e.exit(s),e.exit(u),e.exit(n),t(_)):d999||p===null||p===91||p===93&&!l||p===94&&!s&&"_hiddenFootnoteSupport"in u.parser.constructs?r(p):p===93?(e.exit(i),e.enter(a),e.consume(p),e.exit(a),e.exit(n),t):ae(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),f(p))}function f(p){return p===null||p===91||p===93||ae(p)||s++>999?(e.exit("chunkString"),d(p)):(e.consume(p),l||(l=!ge(p)),p===92?g:f)}function g(p){return p===91||p===92||p===93?(e.consume(p),s++,f):f(p)}}function cl(e,t,r,n,a,i){let u;return s;function s(g){return g===34||g===39||g===40?(e.enter(n),e.enter(a),e.consume(g),e.exit(a),u=g===40?41:g,l):r(g)}function l(g){return g===u?(e.enter(a),e.consume(g),e.exit(a),e.exit(n),t):(e.enter(i),c(g))}function c(g){return g===u?(e.exit(i),l(u)):g===null?r(g):ae(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),fe(e,c,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(g))}function d(g){return g===u||g===null||ae(g)?(e.exit("chunkString"),c(g)):(e.consume(g),g===92?f:d)}function f(g){return g===u||g===92?(e.consume(g),d):d(g)}}function an(e,t){let r;return n;function n(a){return ae(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,n):ge(a)?fe(e,n,r?"linePrefix":"lineSuffix")(a):t(a)}}const mh={name:"definition",tokenize:gh},ph={partial:!0,tokenize:bh};function gh(e,t,r){const n=this;let a;return i;function i(p){return e.enter("definition"),u(p)}function u(p){return ol.call(n,e,s,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return a=xt(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):r(p)}function l(p){return ve(p)?an(e,c)(p):c(p)}function c(p){return ll(e,d,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function d(p){return e.attempt(ph,f,f)(p)}function f(p){return ge(p)?fe(e,g,"whitespace")(p):g(p)}function g(p){return p===null||ae(p)?(e.exit("definition"),n.parser.defined.push(a),t(p)):r(p)}}function bh(e,t,r){return n;function n(s){return ve(s)?an(e,a)(s):r(s)}function a(s){return cl(e,i,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function i(s){return ge(s)?fe(e,u,"whitespace")(s):u(s)}function u(s){return s===null||ae(s)?t(s):r(s)}}const Eh={name:"hardBreakEscape",tokenize:Th};function Th(e,t,r){return n;function n(i){return e.enter("hardBreakEscape"),e.consume(i),a}function a(i){return ae(i)?(e.exit("hardBreakEscape"),t(i)):r(i)}}const xh={name:"headingAtx",resolve:yh,tokenize:vh};function yh(e,t){let r=e.length-2,n=3,a,i;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(a={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},i={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},lt(e,n,r-n+1,[["enter",a,t],["enter",i,t],["exit",i,t],["exit",a,t]])),e}function vh(e,t,r){let n=0;return a;function a(d){return e.enter("atxHeading"),i(d)}function i(d){return e.enter("atxHeadingSequence"),u(d)}function u(d){return d===35&&n++<6?(e.consume(d),u):d===null||ve(d)?(e.exit("atxHeadingSequence"),s(d)):r(d)}function s(d){return d===35?(e.enter("atxHeadingSequence"),l(d)):d===null||ae(d)?(e.exit("atxHeading"),t(d)):ge(d)?fe(e,s,"whitespace")(d):(e.enter("atxHeadingText"),c(d))}function l(d){return d===35?(e.consume(d),l):(e.exit("atxHeadingSequence"),s(d))}function c(d){return d===null||d===35||ve(d)?(e.exit("atxHeadingText"),s(d)):(e.consume(d),c)}}const Ah=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],au=["pre","script","style","textarea"],kh={concrete:!0,name:"htmlFlow",resolveTo:Ch,tokenize:_h},Sh={partial:!0,tokenize:Nh},wh={partial:!0,tokenize:Ih};function Ch(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function _h(e,t,r){const n=this;let a,i,u,s,l;return c;function c(C){return d(C)}function d(C){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(C),f}function f(C){return C===33?(e.consume(C),g):C===47?(e.consume(C),i=!0,S):C===63?(e.consume(C),a=3,n.interrupt?t:w):Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function g(C){return C===45?(e.consume(C),a=2,p):C===91?(e.consume(C),a=5,s=0,x):Ke(C)?(e.consume(C),a=4,n.interrupt?t:w):r(C)}function p(C){return C===45?(e.consume(C),n.interrupt?t:w):r(C)}function x(C){const Ye="CDATA[";return C===Ye.charCodeAt(s++)?(e.consume(C),s===Ye.length?n.interrupt?t:Q:x):r(C)}function S(C){return Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function D(C){if(C===null||C===47||C===62||ve(C)){const Ye=C===47,vt=u.toLowerCase();return!Ye&&!i&&au.includes(vt)?(a=1,n.interrupt?t(C):Q(C)):Ah.includes(u.toLowerCase())?(a=6,Ye?(e.consume(C),_):n.interrupt?t(C):Q(C)):(a=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(C):i?N(C):M(C))}return C===45||Ge(C)?(e.consume(C),u+=String.fromCharCode(C),D):r(C)}function _(C){return C===62?(e.consume(C),n.interrupt?t:Q):r(C)}function N(C){return ge(C)?(e.consume(C),N):R(C)}function M(C){return C===47?(e.consume(C),R):C===58||C===95||Ke(C)?(e.consume(C),W):ge(C)?(e.consume(C),M):R(C)}function W(C){return C===45||C===46||C===58||C===95||Ge(C)?(e.consume(C),W):j(C)}function j(C){return C===61?(e.consume(C),L):ge(C)?(e.consume(C),j):M(C)}function L(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),l=C,ee):ge(C)?(e.consume(C),L):re(C)}function ee(C){return C===l?(e.consume(C),l=null,K):C===null||ae(C)?r(C):(e.consume(C),ee)}function re(C){return C===null||C===34||C===39||C===47||C===60||C===61||C===62||C===96||ve(C)?j(C):(e.consume(C),re)}function K(C){return C===47||C===62||ge(C)?M(C):r(C)}function R(C){return C===62?(e.consume(C),J):r(C)}function J(C){return C===null||ae(C)?Q(C):ge(C)?(e.consume(C),J):r(C)}function Q(C){return C===45&&a===2?(e.consume(C),me):C===60&&a===1?(e.consume(C),ke):C===62&&a===4?(e.consume(C),Oe):C===63&&a===3?(e.consume(C),w):C===93&&a===5?(e.consume(C),at):ae(C)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(Sh,Xe,be)(C)):C===null||ae(C)?(e.exit("htmlFlowData"),be(C)):(e.consume(C),Q)}function be(C){return e.check(wh,ne,Xe)(C)}function ne(C){return e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),X}function X(C){return C===null||ae(C)?be(C):(e.enter("htmlFlowData"),Q(C))}function me(C){return C===45?(e.consume(C),w):Q(C)}function ke(C){return C===47?(e.consume(C),u="",ze):Q(C)}function ze(C){if(C===62){const Ye=u.toLowerCase();return au.includes(Ye)?(e.consume(C),Oe):Q(C)}return Ke(C)&&u.length<8?(e.consume(C),u+=String.fromCharCode(C),ze):Q(C)}function at(C){return C===93?(e.consume(C),w):Q(C)}function w(C){return C===62?(e.consume(C),Oe):C===45&&a===2?(e.consume(C),w):Q(C)}function Oe(C){return C===null||ae(C)?(e.exit("htmlFlowData"),Xe(C)):(e.consume(C),Oe)}function Xe(C){return e.exit("htmlFlow"),t(C)}}function Ih(e,t,r){const n=this;return a;function a(u){return ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i):r(u)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}function Nh(e,t,r){return n;function n(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(yn,t,r)}}const Dh={name:"htmlText",tokenize:Oh};function Oh(e,t,r){const n=this;let a,i,u;return s;function s(w){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(w),l}function l(w){return w===33?(e.consume(w),c):w===47?(e.consume(w),j):w===63?(e.consume(w),M):Ke(w)?(e.consume(w),re):r(w)}function c(w){return w===45?(e.consume(w),d):w===91?(e.consume(w),i=0,x):Ke(w)?(e.consume(w),N):r(w)}function d(w){return w===45?(e.consume(w),p):r(w)}function f(w){return w===null?r(w):w===45?(e.consume(w),g):ae(w)?(u=f,ke(w)):(e.consume(w),f)}function g(w){return w===45?(e.consume(w),p):f(w)}function p(w){return w===62?me(w):w===45?g(w):f(w)}function x(w){const Oe="CDATA[";return w===Oe.charCodeAt(i++)?(e.consume(w),i===Oe.length?S:x):r(w)}function S(w){return w===null?r(w):w===93?(e.consume(w),D):ae(w)?(u=S,ke(w)):(e.consume(w),S)}function D(w){return w===93?(e.consume(w),_):S(w)}function _(w){return w===62?me(w):w===93?(e.consume(w),_):S(w)}function N(w){return w===null||w===62?me(w):ae(w)?(u=N,ke(w)):(e.consume(w),N)}function M(w){return w===null?r(w):w===63?(e.consume(w),W):ae(w)?(u=M,ke(w)):(e.consume(w),M)}function W(w){return w===62?me(w):M(w)}function j(w){return Ke(w)?(e.consume(w),L):r(w)}function L(w){return w===45||Ge(w)?(e.consume(w),L):ee(w)}function ee(w){return ae(w)?(u=ee,ke(w)):ge(w)?(e.consume(w),ee):me(w)}function re(w){return w===45||Ge(w)?(e.consume(w),re):w===47||w===62||ve(w)?K(w):r(w)}function K(w){return w===47?(e.consume(w),me):w===58||w===95||Ke(w)?(e.consume(w),R):ae(w)?(u=K,ke(w)):ge(w)?(e.consume(w),K):me(w)}function R(w){return w===45||w===46||w===58||w===95||Ge(w)?(e.consume(w),R):J(w)}function J(w){return w===61?(e.consume(w),Q):ae(w)?(u=J,ke(w)):ge(w)?(e.consume(w),J):K(w)}function Q(w){return w===null||w===60||w===61||w===62||w===96?r(w):w===34||w===39?(e.consume(w),a=w,be):ae(w)?(u=Q,ke(w)):ge(w)?(e.consume(w),Q):(e.consume(w),ne)}function be(w){return w===a?(e.consume(w),a=void 0,X):w===null?r(w):ae(w)?(u=be,ke(w)):(e.consume(w),be)}function ne(w){return w===null||w===34||w===39||w===60||w===61||w===96?r(w):w===47||w===62||ve(w)?K(w):(e.consume(w),ne)}function X(w){return w===47||w===62||ve(w)?K(w):r(w)}function me(w){return w===62?(e.consume(w),e.exit("htmlTextData"),e.exit("htmlText"),t):r(w)}function ke(w){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),ze}function ze(w){return ge(w)?fe(e,at,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):at(w)}function at(w){return e.enter("htmlTextData"),u(w)}}const ii={name:"labelEnd",resolveAll:Ph,resolveTo:Bh,tokenize:Fh},Lh={tokenize:Hh},Rh={tokenize:zh},Mh={tokenize:Uh};function Ph(e){let t=-1;const r=[];for(;++t=3&&(c===null||ae(c))?(e.exit("thematicBreak"),t(c)):r(c)}function l(c){return c===a?(e.consume(c),n++,l):(e.exit("thematicBreakSequence"),ge(c)?fe(e,s,"whitespace")(c):s(c))}}const tt={continuation:{tokenize:Kh},exit:Zh,name:"list",tokenize:Qh},Xh={partial:!0,tokenize:ed},$h={partial:!0,tokenize:Jh};function Qh(e,t,r){const n=this,a=n.events[n.events.length-1];let i=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,u=0;return s;function s(p){const x=n.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(x==="listUnordered"?!n.containerState.marker||p===n.containerState.marker:ya(p)){if(n.containerState.type||(n.containerState.type=x,e.enter(x,{_container:!0})),x==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Xn,r,c)(p):c(p);if(!n.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return r(p)}function l(p){return ya(p)&&++u<10?(e.consume(p),l):(!n.interrupt||u<2)&&(n.containerState.marker?p===n.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),c(p)):r(p)}function c(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||p,e.check(yn,n.interrupt?r:d,e.attempt(Xh,g,f))}function d(p){return n.containerState.initialBlankLine=!0,i++,g(p)}function f(p){return ge(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),g):r(p)}function g(p){return n.containerState.size=i+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function Kh(e,t,r){const n=this;return n.containerState._closeFlow=void 0,e.check(yn,a,i);function a(s){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,fe(e,t,"listItemIndent",n.containerState.size+1)(s)}function i(s){return n.containerState.furtherBlankLines||!ge(s)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,u(s)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt($h,t,u)(s))}function u(s){return n.containerState._closeFlow=!0,n.interrupt=void 0,fe(e,e.attempt(tt,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function Jh(e,t,r){const n=this;return fe(e,a,"listItemIndent",n.containerState.size+1);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===n.containerState.size?t(i):r(i)}}function Zh(e){e.exit(this.containerState.type)}function ed(e,t,r){const n=this;return fe(e,a,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(i){const u=n.events[n.events.length-1];return!ge(i)&&u&&u[1].type==="listItemPrefixWhitespace"?t(i):r(i)}}const iu={name:"setextUnderline",resolveTo:td,tokenize:rd};function td(e,t){let r=e.length,n,a,i;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&e.splice(r,1),!i&&e[r][1].type==="definition"&&(i=r);const u={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",i?(e.splice(a,0,["enter",u,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=u,e.push(["exit",u,t]),e}function rd(e,t,r){const n=this;let a;return i;function i(c){let d=n.events.length,f;for(;d--;)if(n.events[d][1].type!=="lineEnding"&&n.events[d][1].type!=="linePrefix"&&n.events[d][1].type!=="content"){f=n.events[d][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||f)?(e.enter("setextHeadingLine"),a=c,u(c)):r(c)}function u(c){return e.enter("setextHeadingLineSequence"),s(c)}function s(c){return c===a?(e.consume(c),s):(e.exit("setextHeadingLineSequence"),ge(c)?fe(e,l,"lineSuffix")(c):l(c))}function l(c){return c===null||ae(c)?(e.exit("setextHeadingLine"),t(c)):r(c)}}const nd={tokenize:ad};function ad(e){const t=this,r=e.attempt(yn,n,e.attempt(this.parser.constructs.flowInitial,a,fe(e,e.attempt(this.parser.constructs.flow,a,e.attempt(oh,a)),"linePrefix")));return r;function n(i){if(i===null){e.consume(i);return}return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function a(i){if(i===null){e.consume(i);return}return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const id={resolveAll:dl()},ud=hl("string"),sd=hl("text");function hl(e){return{resolveAll:dl(e==="text"?ld:void 0),tokenize:t};function t(r){const n=this,a=this.parser.constructs[e],i=r.attempt(a,u,s);return u;function u(d){return c(d)?i(d):s(d)}function s(d){if(d===null){r.consume(d);return}return r.enter("data"),r.consume(d),l}function l(d){return c(d)?(r.exit("data"),i(d)):(r.consume(d),l)}function c(d){if(d===null)return!0;const f=a[d];let g=-1;if(f)for(;++g-1){const s=u[0];typeof s=="string"?u[0]=s.slice(n):u.shift()}i>0&&u.push(e[a].slice(0,i))}return u}function yd(e,t){let r=-1;const n=[];let a;for(;++r0){const Tt=ue.tokenStack[ue.tokenStack.length-1];(Tt[1]||su).call(ue,void 0,Tt[0])}for($.position={start:Vt(B.length>0?B[0][1].start:{line:1,column:1,offset:0}),end:Vt(B.length>0?B[B.length-2][1].end:{line:1,column:1,offset:0})},xe=-1;++xe0&&(n.className=["language-"+a[0]]);let i={type:"element",tagName:"code",properties:n,children:[{type:"text",value:r}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i=e.applyData(t,i),i={type:"element",tagName:"pre",properties:{},children:[i]},e.patch(t,i),i}function Md(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Pd(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Bd(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=String(t.identifier).toUpperCase(),a=Pr(n.toLowerCase()),i=e.footnoteOrder.indexOf(n);let u,s=e.footnoteCounts.get(n);s===void 0?(s=0,e.footnoteOrder.push(n),u=e.footnoteOrder.length):u=i+1,s+=1,e.footnoteCounts.set(n,s);const l={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(t,l);const c={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,c),e.applyData(t,c)}function Fd(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Hd(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function pl(e,t){const r=t.referenceType;let n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+n}];const a=e.all(t),i=a[0];i&&i.type==="text"?i.value="["+i.value:a.unshift({type:"text",value:"["});const u=a[a.length-1];return u&&u.type==="text"?u.value+=n:a.push({type:"text",value:n}),a}function zd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={src:Pr(n.url||""),alt:t.alt};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,i),e.applyData(t,i)}function Ud(e,t){const r={src:Pr(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function qd(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function Yd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={href:Pr(n.url||"")};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function Gd(e,t){const r={href:Pr(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Vd(e,t,r){const n=e.all(t),a=r?jd(r):gl(t),i={},u=[];if(typeof t.checked=="boolean"){const d=n[0];let f;d&&d.type==="element"&&d.tagName==="p"?f=d:(f={type:"element",tagName:"p",properties:{},children:[]},n.unshift(f)),f.children.length>0&&f.children.unshift({type:"text",value:" "}),f.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let s=-1;for(;++s1}function Wd(e,t){const r={},n=e.all(t);let a=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++a0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},s=_t(t.children[1]),l=d0(t.children[t.children.length-1]);s&&l&&(u.position={start:s,end:l}),a.push(u)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(t,i),e.applyData(t,i)}function Jd(e,t,r){const n=r?r.children:void 0,i=(n?n.indexOf(t):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,s=u?u.length:t.children.length;let l=-1;const c=[];for(;++l0,!0),n[0]),a=n.index+n[0].length,n=r.exec(t);return i.push(cu(t.slice(a),a>0,!1)),i.join("")}function cu(e,t,r){let n=0,a=e.length;if(t){let i=e.codePointAt(n);for(;i===lu||i===ou;)n++,i=e.codePointAt(n)}if(r){let i=e.codePointAt(a-1);for(;i===lu||i===ou;)a--,i=e.codePointAt(a-1)}return a>n?e.slice(n,a):""}function tf(e,t){const r={type:"text",value:ef(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function rf(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const nf={blockquote:Od,break:Ld,code:Rd,delete:Md,emphasis:Pd,footnoteReference:Bd,heading:Fd,html:Hd,imageReference:zd,image:Ud,inlineCode:qd,linkReference:Yd,link:Gd,listItem:Vd,list:Wd,paragraph:Xd,root:$d,strong:Qd,table:Kd,tableCell:Zd,tableRow:Jd,text:tf,thematicBreak:rf,toml:Mn,yaml:Mn,definition:Mn,footnoteDefinition:Mn};function Mn(){}const bl=-1,p0=0,un=1,e0=2,ui=3,si=4,li=5,oi=6,El=7,Tl=8,xl=typeof self=="object"?self:globalThis,hu=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new xl[e](t)},af=(e,t)=>{const r=(a,i)=>(e.set(i,a),a),n=a=>{if(e.has(a))return e.get(a);const[i,u]=t[a];switch(i){case p0:case bl:return r(u,a);case un:{const s=r([],a);for(const l of u)s.push(n(l));return s}case e0:{const s=r({},a);for(const[l,c]of u)s[n(l)]=n(c);return s}case ui:return r(new Date(u),a);case si:{const{source:s,flags:l}=u;return r(new RegExp(s,l),a)}case li:{const s=r(new Map,a);for(const[l,c]of u)s.set(n(l),n(c));return s}case oi:{const s=r(new Set,a);for(const l of u)s.add(n(l));return s}case El:{const{name:s,message:l}=u;return r(typeof xl[s]=="function"?hu(s,l):new Error(l),a)}case Tl:return r(BigInt(u),a);case"BigInt":return r(Object(BigInt(u)),a);case"ArrayBuffer":return r(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:s}=new Uint8Array(u);return r(new DataView(s),u)}}return r(hu(i,u),a)};return n},du=e=>af(new Map,e)(0),hr="",{toString:uf}={},{keys:sf}=Object,Jr=e=>{const t=typeof e;if(t!=="object"||!e)return[p0,t];const r=uf.call(e).slice(8,-1);switch(r){case"Array":return[un,hr];case"Object":return[e0,hr];case"Date":return[ui,hr];case"RegExp":return[si,hr];case"Map":return[li,hr];case"Set":return[oi,hr];case"DataView":return[un,r]}return r.includes("Array")?[un,r]:e instanceof Error?[El,e.name||"Error"]:[e0,r]},Pn=([e,t])=>e===p0&&(t==="function"||t==="symbol"),lf=(e,t,r,n)=>{const a=(u,s)=>{const l=n.push(u)-1;return r.set(s,l),l},i=u=>{if(r.has(u))return r.get(u);let[s,l]=Jr(u);switch(s){case p0:{let d=u;switch(l){case"bigint":s=Tl,d=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+l);d=null;break;case"undefined":return a([bl],u)}return a([s,d],u)}case un:{if(l){let g=u;return l==="DataView"?g=new Uint8Array(u.buffer):l==="ArrayBuffer"&&(g=new Uint8Array(u)),a([l,[...g]],u)}const d=[],f=a([s,d],u);for(const g of u)d.push(i(g));return f}case e0:{if(l)switch(l){case"BigInt":return a([l,u.toString()],u);case"Boolean":case"Number":case"String":return a([l,u.valueOf()],u)}if(t&&"toJSON"in u)return i(u.toJSON());const d=[],f=a([s,d],u);for(const g of sf(u))(e||!Pn(Jr(u[g])))&&d.push([i(g),i(u[g])]);return f}case ui:return a([s,isNaN(u.getTime())?hr:u.toISOString()],u);case si:{const{source:d,flags:f}=u;return a([s,{source:d,flags:f}],u)}case li:{const d=[],f=a([s,d],u);for(const[g,p]of u)(e||!(Pn(Jr(g))||Pn(Jr(p))))&&d.push([i(g),i(p)]);return f}case oi:{const d=[],f=a([s,d],u);for(const g of u)(e||!Pn(Jr(g)))&&d.push(i(g));return f}}const{message:c}=u;return a([s,{name:l,message:c}],u)};return i},fu=(e,{json:t,lossy:r}={})=>{const n=[];return lf(!(t||r),!!t,new Map,n)(e),n},Nr=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?du(fu(e,t)):structuredClone(e):(e,t)=>du(fu(e,t));function of(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function cf(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function hf(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||of,n=e.options.footnoteBackLabel||cf,a=e.options.footnoteLabel||"Footnotes",i=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let l=-1;for(;++l0&&x.push({type:"text",value:" "});let N=typeof r=="string"?r:r(l,p);typeof N=="string"&&(N={type:"text",value:N}),x.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof n=="string"?n:n(l,p),className:["data-footnote-backref"]},children:Array.isArray(N)?N:[N]})}const D=d[d.length-1];if(D&&D.type==="element"&&D.tagName==="p"){const N=D.children[D.children.length-1];N&&N.type==="text"?N.value+=" ":D.children.push({type:"text",value:" "}),D.children.push(...x)}else d.push(...x);const _={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(d,!0)};e.patch(c,_),s.push(_)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...Nr(u),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` -`}]}}const vn=(function(e){if(e==null)return pf;if(typeof e=="function")return g0(e);if(typeof e=="object")return Array.isArray(e)?df(e):ff(e);if(typeof e=="string")return mf(e);throw new Error("Expected function, string, or object as test")});function df(e){const t=[];let r=-1;for(;++r":""))+")"})}return g;function g(){let p=yl,x,S,D;if((!t||i(l,c,d[d.length-1]||void 0))&&(p=Ef(r(l,d)),p[0]===Aa))return p;if("children"in l&&l.children){const _=l;if(_.children&&p[0]!==vl)for(S=(n?_.children.length:-1)+u,D=d.concat(_);S>-1&&S<_.children.length;){const N=_.children[S];if(x=s(N,S,D)(),x[0]===Aa)return x;S=typeof x[1]=="number"?x[1]:S+u}}return p}}}function Ef(e){return Array.isArray(e)?e:typeof e=="number"?[bf,e]:e==null?yl:[e]}function b0(e,t,r,n){let a,i,u;typeof t=="function"&&typeof r!="function"?(i=void 0,u=t,a=r):(i=t,u=r,a=n),ci(e,i,s,a);function s(l,c){const d=c[c.length-1],f=d?d.children.indexOf(l):void 0;return u(l,f,d)}}const ka={}.hasOwnProperty,Tf={};function xf(e,t){const r=t||Tf,n=new Map,a=new Map,i=new Map,u={...nf,...r.handlers},s={all:c,applyData:vf,definitionById:n,footnoteById:a,footnoteCounts:i,footnoteOrder:[],handlers:u,one:l,options:r,patch:yf,wrap:kf};return b0(e,function(d){if(d.type==="definition"||d.type==="footnoteDefinition"){const f=d.type==="definition"?n:a,g=String(d.identifier).toUpperCase();f.has(g)||f.set(g,d)}}),s;function l(d,f){const g=d.type,p=s.handlers[g];if(ka.call(s.handlers,g)&&p)return p(s,d,f);if(s.options.passThrough&&s.options.passThrough.includes(g)){if("children"in d){const{children:S,...D}=d,_=Nr(D);return _.children=s.all(d),_}return Nr(d)}return(s.options.unknownHandler||Af)(s,d,f)}function c(d){const f=[];if("children"in d){const g=d.children;let p=-1;for(;++p0&&r.push({type:"text",value:` -`}),r}function mu(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function pu(e,t){const r=xf(e,t),n=r.one(e,void 0),a=hf(r),i=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return a&&i.children.push({type:"text",value:` -`},a),i}function Sf(e,t){return e&&"run"in e?async function(r,n){const a=pu(r,{file:n,...t});await e.run(a,n)}:function(r,n){return pu(r,{file:n,...e||t})}}function gu(e){if(e)throw e}var q0,bu;function wf(){if(bu)return q0;bu=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=function(c){return typeof Array.isArray=="function"?Array.isArray(c):t.call(c)==="[object Array]"},i=function(c){if(!c||t.call(c)!=="[object Object]")return!1;var d=e.call(c,"constructor"),f=c.constructor&&c.constructor.prototype&&e.call(c.constructor.prototype,"isPrototypeOf");if(c.constructor&&!d&&!f)return!1;var g;for(g in c);return typeof g>"u"||e.call(c,g)},u=function(c,d){r&&d.name==="__proto__"?r(c,d.name,{enumerable:!0,configurable:!0,value:d.newValue,writable:!0}):c[d.name]=d.newValue},s=function(c,d){if(d==="__proto__")if(e.call(c,d)){if(n)return n(c,d).value}else return;return c[d]};return q0=function l(){var c,d,f,g,p,x,S=arguments[0],D=1,_=arguments.length,N=!1;for(typeof S=="boolean"&&(N=S,S=arguments[1]||{},D=2),(S==null||typeof S!="object"&&typeof S!="function")&&(S={});D<_;++D)if(c=arguments[D],c!=null)for(d in c)f=s(S,d),g=s(c,d),S!==g&&(N&&g&&(i(g)||(p=a(g)))?(p?(p=!1,x=f&&a(f)?f:[]):x=f&&i(f)?f:{},u(S,{name:d,newValue:l(N,x,g)})):typeof g<"u"&&u(S,{name:d,newValue:g}));return S},q0}var Cf=wf();const Y0=zs(Cf);function Sa(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function _f(){const e=[],t={run:r,use:n};return t;function r(...a){let i=-1;const u=a.pop();if(typeof u!="function")throw new TypeError("Expected function as last argument, not "+u);s(null,...a);function s(l,...c){const d=e[++i];let f=-1;if(l){u(l);return}for(;++fu.length;let l;s&&u.push(a);try{l=e.apply(this,u)}catch(c){const d=c;if(s&&r)throw d;return a(d)}s||(l&&l.then&&typeof l.then=="function"?l.then(i,a):l instanceof Error?a(l):i(l))}function a(u,...s){r||(r=!0,t(u,...s))}function i(u){a(null,u)}}const At={basename:Nf,dirname:Df,extname:Of,join:Lf,sep:"/"};function Nf(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');An(e);let r=0,n=-1,a=e.length,i;if(t===void 0||t.length===0||t.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else n<0&&(i=!0,n=a+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let u=-1,s=t.length-1;for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else u<0&&(i=!0,u=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(n=a):(s=-1,n=u));return r===n?n=u:n<0&&(n=e.length),e.slice(r,n)}function Df(e){if(An(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function Of(e){An(e);let t=e.length,r=-1,n=0,a=-1,i=0,u;for(;t--;){const s=e.codePointAt(t);if(s===47){if(u){n=t+1;break}continue}r<0&&(u=!0,r=t+1),s===46?a<0?a=t:i!==1&&(i=1):a>-1&&(i=-1)}return a<0||r<0||i===0||i===1&&a===r-1&&a===n+1?"":e.slice(a,r)}function Lf(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function Mf(e,t){let r="",n=0,a=-1,i=0,u=-1,s,l;for(;++u<=e.length;){if(u2){if(l=r.lastIndexOf("/"),l!==r.length-1){l<0?(r="",n=0):(r=r.slice(0,l),n=r.length-1-r.lastIndexOf("/")),a=u,i=0;continue}}else if(r.length>0){r="",n=0,a=u,i=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(a+1,u):r=e.slice(a+1,u),n=u-a-1;a=u,i=0}else s===46&&i>-1?i++:i=-1}return r}function An(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Pf={cwd:Bf};function Bf(){return"/"}function wa(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function Ff(e){if(typeof e=="string")e=new URL(e);else if(!wa(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return Hf(e)}function Hf(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r0){let[p,...x]=d;const S=n[g][1];Sa(S)&&Sa(p)&&(p=Y0(!0,S,p)),n[g]=[c,p,...x]}}}}const Yf=new hi().freeze();function W0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function X0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function $0(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Tu(e){if(!Sa(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function xu(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Bn(e){return Gf(e)?e:new Al(e)}function Gf(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function Vf(e){return typeof e=="string"||jf(e)}function jf(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Wf="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",yu=[],vu={allowDangerousHtml:!0},Xf=/^(https?|ircs?|mailto|xmpp)$/i,$f=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Qf(e){const t=Kf(e),r=Jf(e);return Zf(t.runSync(t.parse(r),r),e)}function Kf(e){const t=e.rehypePlugins||yu,r=e.remarkPlugins||yu,n=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...vu}:vu;return Yf().use(Dd).use(r).use(Sf,n).use(t)}function Jf(e){const t=e.children||"",r=new Al;return typeof t=="string"&&(r.value=t),r}function Zf(e,t){const r=t.allowedElements,n=t.allowElement,a=t.components,i=t.disallowedElements,u=t.skipHtml,s=t.unwrapDisallowed,l=t.urlTransform||em;for(const d of $f)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+Wf+d.id,void 0);return b0(e,c),m1(e,{Fragment:pe.Fragment,components:a,ignoreInvalidStyle:!0,jsx:pe.jsx,jsxs:pe.jsxs,passKeys:!0,passNode:!0});function c(d,f,g){if(d.type==="raw"&&g&&typeof f=="number")return u?g.children.splice(f,1):g.children[f]={type:"text",value:d.value},f;if(d.type==="element"){let p;for(p in H0)if(Object.hasOwn(H0,p)&&Object.hasOwn(d.properties,p)){const x=d.properties[p],S=H0[p];(S===null||S.includes(d.tagName))&&(d.properties[p]=l(String(x||""),p,d))}}if(d.type==="element"){let p=r?!r.includes(d.tagName):i?i.includes(d.tagName):!1;if(!p&&n&&typeof f=="number"&&(p=!n(d,f,g)),p&&g&&typeof f=="number")return s&&d.children?g.children.splice(f,1,...d.children):g.children.splice(f,1),f}}}function em(e){const t=e.indexOf(":"),r=e.indexOf("?"),n=e.indexOf("#"),a=e.indexOf("/");return t===-1||a!==-1&&t>a||r!==-1&&t>r||n!==-1&&t>n||Xf.test(e.slice(0,t))?e:""}function Au(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let n=0,a=r.indexOf(t);for(;a!==-1;)n++,a=r.indexOf(t,a+t.length);return n}function tm(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function rm(e,t,r){const a=vn((r||{}).ignore||[]),i=nm(t);let u=-1;for(;++u0?{type:"text",value:L}:void 0),L===!1?g.lastIndex=W+1:(x!==W&&N.push({type:"text",value:c.value.slice(x,W)}),Array.isArray(L)?N.push(...L):L&&N.push(L),x=W+M[0].length,_=!0),!g.global)break;M=g.exec(c.value)}return _?(x?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],n=r.indexOf(")");const a=Au(e,"(");let i=Au(e,")");for(;n!==-1&&a>i;)e+=r.slice(0,n+1),r=r.slice(n+1),n=r.indexOf(")"),i++;return[e,r]}function kl(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||pr(r)||f0(r))&&(!t||r!==47)}Sl.peek=wm;function Em(){this.buffer()}function Tm(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function xm(){this.buffer()}function ym(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function vm(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Am(e){this.exit(e)}function km(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Sm(e){this.exit(e)}function wm(){return"["}function Sl(e,t,r,n){const a=r.createTracker(n);let i=a.move("[^");const u=r.enter("footnoteReference"),s=r.enter("reference");return i+=a.move(r.safe(r.associationId(e),{after:"]",before:i})),s(),u(),i+=a.move("]"),i}function Cm(){return{enter:{gfmFootnoteCallString:Em,gfmFootnoteCall:Tm,gfmFootnoteDefinitionLabelString:xm,gfmFootnoteDefinition:ym},exit:{gfmFootnoteCallString:vm,gfmFootnoteCall:Am,gfmFootnoteDefinitionLabelString:km,gfmFootnoteDefinition:Sm}}}function _m(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:Sl},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(n,a,i,u){const s=i.createTracker(u);let l=s.move("[^");const c=i.enter("footnoteDefinition"),d=i.enter("label");return l+=s.move(i.safe(i.associationId(n),{before:l,after:"]"})),d(),l+=s.move("]:"),n.children&&n.children.length>0&&(s.shift(4),l+=s.move((t?` -`:" ")+i.indentLines(i.containerFlow(n,s.current()),t?wl:Im))),c(),l}}function Im(e,t,r){return t===0?e:wl(e,t,r)}function wl(e,t,r){return(r?"":" ")+e}const Nm=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Cl.peek=Mm;function Dm(){return{canContainEols:["delete"],enter:{strikethrough:Lm},exit:{strikethrough:Rm}}}function Om(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Nm}],handlers:{delete:Cl}}}function Lm(e){this.enter({type:"delete",children:[]},e)}function Rm(e){this.exit(e)}function Cl(e,t,r,n){const a=r.createTracker(n),i=r.enter("strikethrough");let u=a.move("~~");return u+=r.containerPhrasing(e,{...a.current(),before:u,after:"~"}),u+=a.move("~~"),i(),u}function Mm(){return"~"}function Pm(e){return e.length}function Bm(e,t){const r=t||{},n=(r.align||[]).concat(),a=r.stringLength||Pm,i=[],u=[],s=[],l=[];let c=0,d=-1;for(;++dc&&(c=e[d].length);++_l[_])&&(l[_]=M)}S.push(N)}u[d]=S,s[d]=D}let f=-1;if(typeof n=="object"&&"length"in n)for(;++fl[f]&&(l[f]=N),p[f]=N),g[f]=M}u.splice(1,0,g),s.splice(1,0,p),d=-1;const x=[];for(;++d "),i.shift(2);const u=r.indentLines(r.containerFlow(e,i.current()),zm);return a(),u}function zm(e,t,r){return">"+(r?"":" ")+e}function Um(e,t){return wu(e,t.inConstruct,!0)&&!wu(e,t.notInConstruct,!1)}function wu(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let n=-1;for(;++nu&&(u=i):i=1,a=n+t.length,n=r.indexOf(t,a);return u}function qm(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Ym(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function Gm(e,t,r,n){const a=Ym(r),i=e.value||"",u=a==="`"?"GraveAccent":"Tilde";if(qm(e,r)){const f=r.enter("codeIndented"),g=r.indentLines(i,Vm);return f(),g}const s=r.createTracker(n),l=a.repeat(Math.max(Il(i,a)+1,3)),c=r.enter("codeFenced");let d=s.move(l);if(e.lang){const f=r.enter(`codeFencedLang${u}`);d+=s.move(r.safe(e.lang,{before:d,after:" ",encode:["`"],...s.current()})),f()}if(e.lang&&e.meta){const f=r.enter(`codeFencedMeta${u}`);d+=s.move(" "),d+=s.move(r.safe(e.meta,{before:d,after:` -`,encode:["`"],...s.current()})),f()}return d+=s.move(` -`),i&&(d+=s.move(i+` -`)),d+=s.move(l),c(),d}function Vm(e,t,r){return(r?"":" ")+e}function di(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function jm(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("definition");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("[");return c+=l.move(r.safe(r.associationId(e),{before:c,after:"]",...l.current()})),c+=l.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":` -`,...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),u(),c}function Wm(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function pn(e){return"&#x"+e.toString(16).toUpperCase()+";"}function t0(e,t,r){const n=Ir(e),a=Ir(t);return n===void 0?a===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:n===1?a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Nl.peek=Xm;function Nl(e,t,r,n){const a=Wm(r),i=r.enter("emphasis"),u=r.createTracker(n),s=u.move(a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function Xm(e,t,r){return r.options.emphasis||"*"}function $m(e,t){let r=!1;return b0(e,function(n){if("value"in n&&/\r?\n|\r/.test(n.value)||n.type==="break")return r=!0,Aa}),!!((!e.depth||e.depth<3)&&ni(e)&&(t.options.setext||r))}function Qm(e,t,r,n){const a=Math.max(Math.min(6,e.depth||1),1),i=r.createTracker(n);if($m(e,r)){const d=r.enter("headingSetext"),f=r.enter("phrasing"),g=r.containerPhrasing(e,{...i.current(),before:` -`,after:` -`});return f(),d(),g+` -`+(a===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` -`))+1))}const u="#".repeat(a),s=r.enter("headingAtx"),l=r.enter("phrasing");i.move(u+" ");let c=r.containerPhrasing(e,{before:"# ",after:` -`,...i.current()});return/^[\t ]/.test(c)&&(c=pn(c.charCodeAt(0))+c.slice(1)),c=c?u+" "+c:u,r.options.closeAtx&&(c+=" "+u),l(),s(),c}Dl.peek=Km;function Dl(e){return e.value||""}function Km(){return"<"}Ol.peek=Jm;function Ol(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("image");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("![");return c+=l.move(r.safe(e.alt,{before:c,after:"]",...l.current()})),c+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),c+=l.move(")"),u(),c}function Jm(){return"!"}Ll.peek=Zm;function Ll(e,t,r,n){const a=e.referenceType,i=r.enter("imageReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("![");const c=r.safe(e.alt,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function Zm(){return"!"}Rl.peek=e2;function Rl(e,t,r){let n=e.value||"",a="`",i=-1;for(;new RegExp("(^|[^`])"+a+"([^`]|$)").test(n);)a+="`";for(/[^ \r\n]/.test(n)&&(/^[ \r\n]/.test(n)&&/[ \r\n]$/.test(n)||/^`|`$/.test(n))&&(n=" "+n+" ");++i\u007F]/.test(e.url))}Pl.peek=t2;function Pl(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.createTracker(n);let s,l;if(Ml(e,r)){const d=r.stack;r.stack=[],s=r.enter("autolink");let f=u.move("<");return f+=u.move(r.containerPhrasing(e,{before:f,after:">",...u.current()})),f+=u.move(">"),s(),r.stack=d,f}s=r.enter("link"),l=r.enter("label");let c=u.move("[");return c+=u.move(r.containerPhrasing(e,{before:c,after:"](",...u.current()})),c+=u.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=r.enter("destinationLiteral"),c+=u.move("<"),c+=u.move(r.safe(e.url,{before:c,after:">",...u.current()})),c+=u.move(">")):(l=r.enter("destinationRaw"),c+=u.move(r.safe(e.url,{before:c,after:e.title?" ":")",...u.current()}))),l(),e.title&&(l=r.enter(`title${i}`),c+=u.move(" "+a),c+=u.move(r.safe(e.title,{before:c,after:a,...u.current()})),c+=u.move(a),l()),c+=u.move(")"),s(),c}function t2(e,t,r){return Ml(e,r)?"<":"["}Bl.peek=r2;function Bl(e,t,r,n){const a=e.referenceType,i=r.enter("linkReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("[");const c=r.containerPhrasing(e,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function r2(){return"["}function fi(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function n2(e){const t=fi(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function a2(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Fl(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function i2(e,t,r,n){const a=r.enter("list"),i=r.bulletCurrent;let u=e.ordered?a2(r):fi(r);const s=e.ordered?u==="."?")":".":n2(r);let l=t&&r.bulletLastUsed?u===r.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((u==="*"||u==="-")&&d&&(!d.children||!d.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(l=!0),Fl(r)===u&&d){let f=-1;for(;++f-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+i);let u=i.length+1;(a==="tab"||a==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(u=Math.ceil(u/4)*4);const s=r.createTracker(n);s.move(i+" ".repeat(u-i.length)),s.shift(u);const l=r.enter("listItem"),c=r.indentLines(r.containerFlow(e,s.current()),d);return l(),c;function d(f,g,p){return g?(p?"":" ".repeat(u))+f:(p?i:i+" ".repeat(u-i.length))+f}}function l2(e,t,r,n){const a=r.enter("paragraph"),i=r.enter("phrasing"),u=r.containerPhrasing(e,n);return i(),a(),u}const o2=vn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function c2(e,t,r,n){return(e.children.some(function(u){return o2(u)})?r.containerPhrasing:r.containerFlow).call(r,e,n)}function h2(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}Hl.peek=d2;function Hl(e,t,r,n){const a=h2(r),i=r.enter("strong"),u=r.createTracker(n),s=u.move(a+a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a+a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function d2(e,t,r){return r.options.strong||"*"}function f2(e,t,r,n){return r.safe(e.value,n)}function m2(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function p2(e,t,r){const n=(Fl(r)+(r.options.ruleSpaces?" ":"")).repeat(m2(r));return r.options.ruleSpaces?n.slice(0,-1):n}const zl={blockquote:Hm,break:Cu,code:Gm,definition:jm,emphasis:Nl,hardBreak:Cu,heading:Qm,html:Dl,image:Ol,imageReference:Ll,inlineCode:Rl,link:Pl,linkReference:Bl,list:i2,listItem:s2,paragraph:l2,root:c2,strong:Hl,text:f2,thematicBreak:p2};function g2(){return{enter:{table:b2,tableData:_u,tableHeader:_u,tableRow:T2},exit:{codeText:x2,table:E2,tableData:Z0,tableHeader:Z0,tableRow:Z0}}}function b2(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function E2(e){this.exit(e),this.data.inTable=void 0}function T2(e){this.enter({type:"tableRow",children:[]},e)}function Z0(e){this.exit(e)}function _u(e){this.enter({type:"tableCell",children:[]},e)}function x2(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,y2));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function y2(e,t){return t==="|"?t:e}function v2(e){const t=e||{},r=t.tableCellPadding,n=t.tablePipeAlign,a=t.stringLength,i=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:u,tableCell:l,tableRow:s}};function u(p,x,S,D){return c(d(p,S,D),p.align)}function s(p,x,S,D){const _=f(p,S,D),N=c([_]);return N.slice(0,N.indexOf(` -`))}function l(p,x,S,D){const _=S.enter("tableCell"),N=S.enter("phrasing"),M=S.containerPhrasing(p,{...D,before:i,after:i});return N(),_(),M}function c(p,x){return Bm(p,{align:x,alignDelimiters:n,padding:r,stringLength:a})}function d(p,x,S){const D=p.children;let _=-1;const N=[],M=x.enter("table");for(;++_0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const z2={tokenize:X2,partial:!0};function U2(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:V2,continuation:{tokenize:j2},exit:W2}},text:{91:{name:"gfmFootnoteCall",tokenize:G2},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:q2,resolveTo:Y2}}}}function q2(e,t,r){const n=this;let a=n.events.length;const i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let u;for(;a--;){const l=n.events[a][1];if(l.type==="labelImage"){u=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!u||!u._balanced)return r(l);const c=xt(n.sliceSerialize({start:u.end,end:n.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?r(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),t(l))}}function Y2(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const n={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},s=[e[r+1],e[r+2],["enter",n,t],e[r+3],e[r+4],["enter",a,t],["exit",a,t],["enter",i,t],["enter",u,t],["exit",u,t],["exit",i,t],e[e.length-2],e[e.length-1],["exit",n,t]];return e.splice(r,e.length-r+1,...s),e}function G2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i=0,u;return s;function s(f){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),l}function l(f){return f!==94?r(f):(e.enter("gfmFootnoteCallMarker"),e.consume(f),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(f){if(i>999||f===93&&!u||f===null||f===91||ve(f))return r(f);if(f===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return a.includes(xt(n.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(f)}return ve(f)||(u=!0),i++,e.consume(f),f===92?d:c}function d(f){return f===91||f===92||f===93?(e.consume(f),i++,c):c(f)}}function V2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i,u=0,s;return l;function l(x){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(x){return x===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):r(x)}function d(x){if(u>999||x===93&&!s||x===null||x===91||ve(x))return r(x);if(x===93){e.exit("chunkString");const S=e.exit("gfmFootnoteDefinitionLabelString");return i=xt(n.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return ve(x)||(s=!0),u++,e.consume(x),x===92?f:d}function f(x){return x===91||x===92||x===93?(e.consume(x),u++,d):d(x)}function g(x){return x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),a.includes(i)||a.push(i),fe(e,p,"gfmFootnoteDefinitionWhitespace")):r(x)}function p(x){return t(x)}}function j2(e,t,r){return e.check(yn,t,e.attempt(z2,t,r))}function W2(e){e.exit("gfmFootnoteDefinition")}function X2(e,t,r){const n=this;return fe(e,a,"gfmFootnoteDefinitionIndent",5);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="gfmFootnoteDefinitionIndent"&&u[2].sliceSerialize(u[1],!0).length===4?t(i):r(i)}}function $2(e){let r=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:i,resolveAll:a};return r==null&&(r=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function a(u,s){let l=-1;for(;++l1?l(x):(u.consume(x),f++,p);if(f<2&&!r)return l(x);const D=u.exit("strikethroughSequenceTemporary"),_=Ir(x);return D._open=!_||_===2&&!!S,D._close=!S||S===2&&!!_,s(x)}}}class Q2{constructor(){this.map=[]}add(t,r,n){K2(this,t,r,n)}consume(t){if(this.map.sort(function(i,u){return i[0]-u[0]}),this.map.length===0)return;let r=this.map.length;const n=[];for(;r>0;)r-=1,n.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];n.push(t.slice()),t.length=0;let a=n.pop();for(;a;){for(const i of a)t.push(i);a=n.pop()}this.map.length=0}}function K2(e,t,r,n){let a=0;if(!(r===0&&n.length===0)){for(;a-1;){const ne=n.events[J][1].type;if(ne==="lineEnding"||ne==="linePrefix")J--;else break}const Q=J>-1?n.events[J][1].type:null,be=Q==="tableHead"||Q==="tableRow"?L:l;return be===L&&n.parser.lazy[n.now().line]?r(R):be(R)}function l(R){return e.enter("tableHead"),e.enter("tableRow"),c(R)}function c(R){return R===124||(u=!0,i+=1),d(R)}function d(R){return R===null?r(R):ae(R)?i>1?(i=0,n.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),p):r(R):ge(R)?fe(e,d,"whitespace")(R):(i+=1,u&&(u=!1,a+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),u=!0,d):(e.enter("data"),f(R)))}function f(R){return R===null||R===124||ve(R)?(e.exit("data"),d(R)):(e.consume(R),R===92?g:f)}function g(R){return R===92||R===124?(e.consume(R),f):f(R)}function p(R){return n.interrupt=!1,n.parser.lazy[n.now().line]?r(R):(e.enter("tableDelimiterRow"),u=!1,ge(R)?fe(e,x,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):x(R))}function x(R){return R===45||R===58?D(R):R===124?(u=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),S):j(R)}function S(R){return ge(R)?fe(e,D,"whitespace")(R):D(R)}function D(R){return R===58?(i+=1,u=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),_):R===45?(i+=1,_(R)):R===null||ae(R)?W(R):j(R)}function _(R){return R===45?(e.enter("tableDelimiterFiller"),N(R)):j(R)}function N(R){return R===45?(e.consume(R),N):R===58?(u=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),M):(e.exit("tableDelimiterFiller"),M(R))}function M(R){return ge(R)?fe(e,W,"whitespace")(R):W(R)}function W(R){return R===124?x(R):R===null||ae(R)?!u||a!==i?j(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):j(R)}function j(R){return r(R)}function L(R){return e.enter("tableRow"),ee(R)}function ee(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),ee):R===null||ae(R)?(e.exit("tableRow"),t(R)):ge(R)?fe(e,ee,"whitespace")(R):(e.enter("data"),re(R))}function re(R){return R===null||R===124||ve(R)?(e.exit("data"),ee(R)):(e.consume(R),R===92?K:re)}function K(R){return R===92||R===124?(e.consume(R),re):re(R)}}function t4(e,t){let r=-1,n=!0,a=0,i=[0,0,0,0],u=[0,0,0,0],s=!1,l=0,c,d,f;const g=new Q2;for(;++rr[2]+1){const x=r[2]+1,S=r[3]-r[2]-1;e.add(x,S,[])}}e.add(r[3]+1,0,[["exit",f,t]])}return a!==void 0&&(i.end=Object.assign({},wr(t.events,a)),e.add(a,0,[["exit",i,t]]),i=void 0),i}function Nu(e,t,r,n,a){const i=[],u=wr(t.events,r);a&&(a.end=Object.assign({},u),i.push(["exit",a,t])),n.end=Object.assign({},u),i.push(["exit",n,t]),e.add(r+1,0,i)}function wr(e,t){const r=e[t],n=r[0]==="enter"?"start":"end";return r[1][n]}const r4={name:"tasklistCheck",tokenize:a4};function n4(){return{text:{91:r4}}}function a4(e,t,r){const n=this;return a;function a(l){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?r(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),i)}function i(l){return ve(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),u):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),u):r(l)}function u(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):r(l)}function s(l){return ae(l)?t(l):ge(l)?e.check({tokenize:i4},t,r)(l):r(l)}}function i4(e,t,r){return fe(e,n,"whitespace");function n(a){return a===null?r(a):t(a)}}function u4(e){return rl([D2(),U2(),$2(e),Z2(),n4()])}const s4={};function l4(e){const t=this,r=e||s4,n=t.data(),a=n.micromarkExtensions||(n.micromarkExtensions=[]),i=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),u=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);a.push(u4(r)),i.push(C2()),u.push(_2(r))}function o4(){return{enter:{mathFlow:e,mathFlowFenceMeta:t,mathText:i},exit:{mathFlow:a,mathFlowFence:n,mathFlowFenceMeta:r,mathFlowValue:s,mathText:u,mathTextData:s}};function e(l){const c={type:"element",tagName:"code",properties:{className:["language-math","math-display"]},children:[]};this.enter({type:"math",meta:null,value:"",data:{hName:"pre",hChildren:[c]}},l)}function t(){this.buffer()}function r(){const l=this.resume(),c=this.stack[this.stack.length-1];c.type,c.meta=l}function n(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function a(l){const c=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c;const f=d.data.hChildren[0];f.type,f.tagName,f.children.push({type:"text",value:c}),this.data.mathFlowInside=void 0}function i(l){this.enter({type:"inlineMath",value:"",data:{hName:"code",hProperties:{className:["language-math","math-inline"]},hChildren:[]}},l),this.buffer()}function u(l){const c=this.resume(),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c,d.data.hChildren.push({type:"text",value:c})}function s(l){this.config.enter.data.call(this,l),this.config.exit.data.call(this,l)}}function c4(e){let t=(e||{}).singleDollarTextMath;return t==null&&(t=!0),n.peek=a,{unsafe:[{character:"\r",inConstruct:"mathFlowMeta"},{character:` -`,inConstruct:"mathFlowMeta"},{character:"$",after:t?void 0:"\\$",inConstruct:"phrasing"},{character:"$",inConstruct:"mathFlowMeta"},{atBreak:!0,character:"$",after:"\\$"}],handlers:{math:r,inlineMath:n}};function r(i,u,s,l){const c=i.value||"",d=s.createTracker(l),f="$".repeat(Math.max(Il(c,"$")+1,2)),g=s.enter("mathFlow");let p=d.move(f);if(i.meta){const x=s.enter("mathFlowMeta");p+=d.move(s.safe(i.meta,{after:` -`,before:p,encode:["$"],...d.current()})),x()}return p+=d.move(` -`),c&&(p+=d.move(c+` -`)),p+=d.move(f),g(),p}function n(i,u,s){let l=i.value||"",c=1;for(t||c++;new RegExp("(^|[^$])"+"\\$".repeat(c)+"([^$]|$)").test(l);)c++;const d="$".repeat(c);/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^\$|\$$/.test(l))&&(l=" "+l+" ");let f=-1;for(;++f15?c="…"+s.slice(a-15,a):c=s.slice(0,a);var d;i+15e.replace(E4,"-$1").toLowerCase(),x4={"&":"&",">":">","<":"<",'"':""","'":"'"},y4=/[&><"']/g,Ve=e=>String(e).replace(y4,t=>x4[t]),$n=e=>e.type==="ordgroup"||e.type==="color"?e.body.length===1?$n(e.body[0]):e:e.type==="font"?$n(e.body):e,v4=new Set(["mathord","textord","atom"]),qt=e=>v4.has($n(e).type),A4=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},_a={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function k4(e){if(typeof e!="string")return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}function S4(e){if(e.default!==void 0)return e.default;var t=Array.isArray(e.type)?e.type[0]:e.type;return k4(t)}function w4(e,t,r,n){var a=r[t];e[t]=a!==void 0?n.processor?n.processor(a):a:S4(n)}class pi{constructor(t){t===void 0&&(t={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,t=t||{};for(var r of Object.keys(_a)){var n=_a[r];n&&w4(this,r,t,n)}}reportNonstrict(t,r,n){var a=this.strict;if(typeof a=="function"&&(a=a(t,r,n)),!(!a||a==="ignore")){if(a===!0||a==="error")throw new Y("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+t+"]"),n);a==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]"))}}useStrictBehavior(t,r,n){var a=this.strict;if(typeof a=="function")try{a=a(t,r,n)}catch{a="error"}return!a||a==="ignore"?!1:a===!0||a==="error"?!0:a==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]")),!1)}isTrusted(t){if("url"in t&&t.url&&!t.protocol){var r=A4(t.url);if(r==null)return!1;t.protocol=r}var n=typeof this.trust=="function"?this.trust(t):this.trust;return!!n}}class jt{constructor(t,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=n}sup(){return kt[C4[this.id]]}sub(){return kt[_4[this.id]]}fracNum(){return kt[I4[this.id]]}fracDen(){return kt[N4[this.id]]}cramp(){return kt[D4[this.id]]}text(){return kt[O4[this.id]]}isTight(){return this.size>=2}}var gi=0,r0=1,_r=2,Ht=3,gn=4,gt=5,Dr=6,Je=7,kt=[new jt(gi,0,!1),new jt(r0,0,!0),new jt(_r,1,!1),new jt(Ht,1,!0),new jt(gn,2,!1),new jt(gt,2,!0),new jt(Dr,3,!1),new jt(Je,3,!0)],C4=[gn,gt,gn,gt,Dr,Je,Dr,Je],_4=[gt,gt,gt,gt,Je,Je,Je,Je],I4=[_r,Ht,gn,gt,Dr,Je,Dr,Je],N4=[Ht,Ht,gt,gt,Je,Je,Je,Je],D4=[r0,r0,Ht,Ht,gt,gt,Je,Je],O4=[gi,r0,_r,Ht,_r,Ht,_r,Ht],oe={DISPLAY:kt[gi],TEXT:kt[_r],SCRIPT:kt[gn],SCRIPTSCRIPT:kt[Dr]},Ia=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function L4(e){for(var t=0;t=a[0]&&e<=a[1])return r.name}return null}var Qn=[];Ia.forEach(e=>e.blocks.forEach(t=>Qn.push(...t)));function $l(e){for(var t=0;t=Qn[t]&&e<=Qn[t+1])return!0;return!1}var Fe=e=>e+" "+e,kr=80,R4=function(t,r){return"M95,"+(622+t+r)+` -c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 -c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 -c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 -s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 -c69,-144,104.5,-217.7,106.5,-221 -l`+t/2.075+" -"+t+` -c5.3,-9.3,12,-14,20,-14 -H400000v`+(40+t)+`H845.2724 -s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 -c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},M4=function(t,r){return"M263,"+(601+t+r)+`c0.7,0,18,39.7,52,119 -c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 -c340,-704.7,510.7,-1060.3,512,-1067 -l`+t/2.084+" -"+t+` -c4.7,-7.3,11,-11,19,-11 -H40000v`+(40+t)+`H1012.3 -s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 -c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 -s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 -c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},P4=function(t,r){return"M983 "+(10+t+r)+` -l`+t/3.13+" -"+t+` -c4,-6.7,10,-10,18,-10 H400000v`+(40+t)+` -H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 -s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 -c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 -c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 -c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 -c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},B4=function(t,r){return"M424,"+(2398+t+r)+` -c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 -c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 -s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 -s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 -l`+t/4.223+" -"+t+`c4,-6.7,10,-10,18,-10 H400000 -v`+(40+t)+`H1014.6 -s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 -c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2z M`+(1001+t)+" "+r+` -h400000v`+(40+t)+"h-400000z"},F4=function(t,r){return"M473,"+(2713+t+r)+` -c339.3,-1799.3,509.3,-2700,510,-2702 l`+t/5.298+" -"+t+` -c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+t)+`H1017.7 -s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 -c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 -s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+t)+" "+r+"h400000v"+(40+t)+"H1017.7z"},H4=function(t){var r=t/2;return"M400000 "+t+" H0 L"+r+" 0 l65 45 L145 "+(t-80)+" H400000z"},z4=function(t,r,n){var a=n-54-r-t;return"M702 "+(t+r)+"H400000"+(40+t)+` -H742v`+a+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 -h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 -c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+r+"H400000v"+(40+t)+"H742z"},U4=function(t,r,n){r=1e3*r;var a="";switch(t){case"sqrtMain":a=R4(r,kr);break;case"sqrtSize1":a=M4(r,kr);break;case"sqrtSize2":a=P4(r,kr);break;case"sqrtSize3":a=B4(r,kr);break;case"sqrtSize4":a=F4(r,kr);break;case"sqrtTall":a=z4(r,kr,n)}return a},q4=function(t,r){switch(t){case"⎜":return Fe("M291 0 H417 V"+r+" H291z");case"∣":return Fe("M145 0 H188 V"+r+" H145z");case"∥":return Fe("M145 0 H188 V"+r+" H145z")+Fe("M367 0 H410 V"+r+" H367z");case"⎟":return Fe("M457 0 H583 V"+r+" H457z");case"⎢":return Fe("M319 0 H403 V"+r+" H319z");case"⎥":return Fe("M263 0 H347 V"+r+" H263z");case"⎪":return Fe("M384 0 H504 V"+r+" H384z");case"⏐":return Fe("M312 0 H355 V"+r+" H312z");case"‖":return Fe("M257 0 H300 V"+r+" H257z")+Fe("M478 0 H521 V"+r+" H478z");default:return""}},Ou={doubleleftarrow:`M262 157 -l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 - 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 - 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 -c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 - 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 --86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 --2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z -m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l --10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 - 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 --33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 --17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 --13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 -c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 --107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 - 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 --5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 -c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 - 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 - 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 - l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 --45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 - 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 - 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 - 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 --331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 -H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 - 435 0h399565z`,leftgroupunder:`M400000 262 -H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 - 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 --3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 --18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 --196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 - 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 --4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 --10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z -m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 - 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 - 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 --152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 - 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 --2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 -v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 --83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 --68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 - 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:Fe("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),leftbracketunder:Fe("M0 0 h120 V290 H399995 v120 H0z"),leftbracketover:Fe("M0 440 h120 V150 H399995 v-120 H0z"),leftmapsto:Fe("M40 281 V448H0V74H40V241H400000v40z"),leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 --.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 -c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 - 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:Fe("M0 50 h400000 v40H0z m0 194h40000v40H0z"),midbrace:`M200428 334 -c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 --53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 - 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 - 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 -c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 - 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 - 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 --5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 --320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z -m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 -60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 --451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z -m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 -c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 --480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z -m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 -85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 --707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z -m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 -c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 --16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 - 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 - 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 --40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 - 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l --6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 -s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 -c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 - 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 --174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 - 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 - 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 --3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 --10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 - 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 --18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 - 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z -m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 - 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 --7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 --27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 - 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 - 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 --64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z -m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 - 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 --13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 - 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:Fe("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),rightbracketunder:Fe("M399995 0 h-120 V290 H0 v120 H400000z"),rightbracketover:Fe("M399995 440 h-120 V150 H0 v-120 H399995z"),rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 - 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 --52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 --167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 - 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 --70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 --40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 --37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 - 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 -c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 - 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 - 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 --19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 - 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 --2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 - 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 - 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 --68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 --8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 - 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 -c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 - 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 --11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 - 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 - 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 - -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 --11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 - 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 - 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 - -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 -3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 -10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 --1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 --7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 -H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 -c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 -c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, --5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 -c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 -c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 -s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 -121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 -s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 -c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z -M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 --27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 -13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 --84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 --119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 -151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 -c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 -c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 -c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z -M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, -1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, --152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z -M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Y4=function(t,r){switch(t){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 v84 h347 v-84 -H403z M403 1759 V0 H319 V1759 v`+r+" v1759 v84 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z -M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z -M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z -M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z -M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 -c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, --36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, -949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 -c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, --544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 -l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, --210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, -63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 -c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` -c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 -c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 -c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 -c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 -l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};function G4(e){return"toText"in e}class Br{constructor(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(t){return this.classes.includes(t)}toNode(){for(var t=document.createDocumentFragment(),r=0;r{if(G4(t))return t.toText();throw new Error("Expected MathDomNode with toText, got "+t.constructor.name)}).join("")}}var Na={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},V4={ex:!0,em:!0,mu:!0},Ql=function(t){return typeof t!="string"&&(t=t.unit),t in Na||t in V4||t==="ex"},Ie=function(t,r){var n;if(t.unit in Na)n=Na[t.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(t.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var a;if(r.style.isTight()?a=r.havingStyle(r.style.text()):a=r,t.unit==="ex")n=a.fontMetrics().xHeight;else if(t.unit==="em")n=a.fontMetrics().quad;else throw new Y("Invalid unit: '"+t.unit+"'");a!==r&&(n*=a.sizeMultiplier/r.sizeMultiplier)}return Math.min(t.number*n,r.maxSize)},V=function(t){return+t.toFixed(4)+"em"},Jt=function(t){return t.filter(r=>r).join(" ")},bi=function(t){var r="";for(var n of Object.keys(t)){var a=t[n];a!==void 0&&(r+=T4(n)+":"+a+";")}return r},Kl=function(t,r,n){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var a=r.getColor();a&&(this.style.color=a)}},Jl=function(t){var r=document.createElement(t);r.className=Jt(this.classes),Object.assign(r.style,this.style);for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,Zl=function(t){var r="<"+t;this.classes.length&&(r+=' class="'+Ve(Jt(this.classes))+'"');var n=bi(this.style);n&&(r+=' style="'+Ve(n)+'"');for(var a of Object.keys(this.attributes)){if(j4.test(a))throw new Y("Invalid attribute name '"+a+"'");r+=" "+a+'="'+Ve(this.attributes[a])+'"'}r+=">";for(var i=0;i",r};class Fr{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,this.italic=void 0,Kl.call(this,t,n,a),this.children=r||[]}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"span")}toMarkup(){return Zl.call(this,"span")}}class E0{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Kl.call(this,r,a),this.children=n||[],this.setAttribute("href",t)}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"a")}toMarkup(){return Zl.call(this,"a")}}class W4{constructor(t,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=t,this.classes=["mord"],this.height=0,this.depth=0,this.maxFontSize=0,this.style=n}hasClass(t){return this.classes.includes(t)}toNode(){var t=document.createElement("img");return t.src=this.src,t.alt=this.alt,t.className="mord",Object.assign(t.style,this.style),t}toMarkup(){var t=''+Ve(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=V(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=Jt(this.classes)),Object.keys(this.style).length>0&&(r=r||document.createElement("span"),Object.assign(r.style,this.style)),r?(r.appendChild(t),r):t}toMarkup(){var t=!1,r="0&&(n+="margin-right:"+V(this.italic)+";"),n+=bi(this.style),n&&(t=!0,r+=' style="'+Ve(n)+'"');var a=Ve(this.text);return t?(r+=">",r+=a,r+="",r):a}}class zt{constructor(t,r){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=r||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"svg");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a':''}}class Da{constructor(t){this.attributes=void 0,this.attributes=t||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"line");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var t=" but got "+String(e)+".")}var K4=e=>e instanceof Fr||e instanceof E0||e instanceof Br,wt={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Hn={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Lu={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function J4(e,t){wt[e]=t}function Ei(e,t,r){if(!wt[t])throw new Error("Font metrics not found for font: "+t+".");var n=e.charCodeAt(0),a=wt[t][n];if(!a&&e[0]in Lu&&(n=Lu[e[0]].charCodeAt(0),a=wt[t][n]),!a&&r==="text"&&$l(n)&&(a=wt[t][77]),a)return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}var ea={};function Z4(e){var t;if(e>=5?t=0:e>=3?t=1:t=2,!ea[t]){var r=ea[t]={cssEmPerMu:Hn.quad[t]/18};for(var n in Hn)Hn.hasOwnProperty(n)&&(r[n]=Hn[n][t])}return ea[t]}var we={math:{},text:{}};function h(e,t,r,n,a,i){we[e][a]={font:t,group:r,replace:n},i&&n&&(we[e][n]=we[e][a])}var m="math",F="text",b="main",v="ams",Ce="accent-token",te="bin",Ze="close",Hr="inner",ie="mathord",Pe="op-token",ht="open",kn="punct",A="rel",Yt="spacing",I="textord";h(m,b,A,"≡","\\equiv",!0);h(m,b,A,"≺","\\prec",!0);h(m,b,A,"≻","\\succ",!0);h(m,b,A,"∼","\\sim",!0);h(m,b,A,"⊥","\\perp");h(m,b,A,"⪯","\\preceq",!0);h(m,b,A,"⪰","\\succeq",!0);h(m,b,A,"≃","\\simeq",!0);h(m,b,A,"∣","\\mid",!0);h(m,b,A,"≪","\\ll",!0);h(m,b,A,"≫","\\gg",!0);h(m,b,A,"≍","\\asymp",!0);h(m,b,A,"∥","\\parallel");h(m,b,A,"⋈","\\bowtie",!0);h(m,b,A,"⌣","\\smile",!0);h(m,b,A,"⊑","\\sqsubseteq",!0);h(m,b,A,"⊒","\\sqsupseteq",!0);h(m,b,A,"≐","\\doteq",!0);h(m,b,A,"⌢","\\frown",!0);h(m,b,A,"∋","\\ni",!0);h(m,b,A,"∝","\\propto",!0);h(m,b,A,"⊢","\\vdash",!0);h(m,b,A,"⊣","\\dashv",!0);h(m,b,A,"∋","\\owns");h(m,b,kn,".","\\ldotp");h(m,b,kn,"⋅","\\cdotp");h(m,b,kn,"⋅","·");h(F,b,I,"⋅","·");h(m,b,I,"#","\\#");h(F,b,I,"#","\\#");h(m,b,I,"&","\\&");h(F,b,I,"&","\\&");h(m,b,I,"ℵ","\\aleph",!0);h(m,b,I,"∀","\\forall",!0);h(m,b,I,"ℏ","\\hbar",!0);h(m,b,I,"∃","\\exists",!0);h(m,b,I,"∇","\\nabla",!0);h(m,b,I,"♭","\\flat",!0);h(m,b,I,"ℓ","\\ell",!0);h(m,b,I,"♮","\\natural",!0);h(m,b,I,"♣","\\clubsuit",!0);h(m,b,I,"℘","\\wp",!0);h(m,b,I,"♯","\\sharp",!0);h(m,b,I,"♢","\\diamondsuit",!0);h(m,b,I,"ℜ","\\Re",!0);h(m,b,I,"♡","\\heartsuit",!0);h(m,b,I,"ℑ","\\Im",!0);h(m,b,I,"♠","\\spadesuit",!0);h(m,b,I,"§","\\S",!0);h(F,b,I,"§","\\S");h(m,b,I,"¶","\\P",!0);h(F,b,I,"¶","\\P");h(m,b,I,"†","\\dag");h(F,b,I,"†","\\dag");h(F,b,I,"†","\\textdagger");h(m,b,I,"‡","\\ddag");h(F,b,I,"‡","\\ddag");h(F,b,I,"‡","\\textdaggerdbl");h(m,b,Ze,"⎱","\\rmoustache",!0);h(m,b,ht,"⎰","\\lmoustache",!0);h(m,b,Ze,"⟯","\\rgroup",!0);h(m,b,ht,"⟮","\\lgroup",!0);h(m,b,te,"∓","\\mp",!0);h(m,b,te,"⊖","\\ominus",!0);h(m,b,te,"⊎","\\uplus",!0);h(m,b,te,"⊓","\\sqcap",!0);h(m,b,te,"∗","\\ast");h(m,b,te,"⊔","\\sqcup",!0);h(m,b,te,"◯","\\bigcirc",!0);h(m,b,te,"∙","\\bullet",!0);h(m,b,te,"‡","\\ddagger");h(m,b,te,"≀","\\wr",!0);h(m,b,te,"⨿","\\amalg");h(m,b,te,"&","\\And");h(m,b,A,"⟵","\\longleftarrow",!0);h(m,b,A,"⇐","\\Leftarrow",!0);h(m,b,A,"⟸","\\Longleftarrow",!0);h(m,b,A,"⟶","\\longrightarrow",!0);h(m,b,A,"⇒","\\Rightarrow",!0);h(m,b,A,"⟹","\\Longrightarrow",!0);h(m,b,A,"↔","\\leftrightarrow",!0);h(m,b,A,"⟷","\\longleftrightarrow",!0);h(m,b,A,"⇔","\\Leftrightarrow",!0);h(m,b,A,"⟺","\\Longleftrightarrow",!0);h(m,b,A,"↦","\\mapsto",!0);h(m,b,A,"⟼","\\longmapsto",!0);h(m,b,A,"↗","\\nearrow",!0);h(m,b,A,"↩","\\hookleftarrow",!0);h(m,b,A,"↪","\\hookrightarrow",!0);h(m,b,A,"↘","\\searrow",!0);h(m,b,A,"↼","\\leftharpoonup",!0);h(m,b,A,"⇀","\\rightharpoonup",!0);h(m,b,A,"↙","\\swarrow",!0);h(m,b,A,"↽","\\leftharpoondown",!0);h(m,b,A,"⇁","\\rightharpoondown",!0);h(m,b,A,"↖","\\nwarrow",!0);h(m,b,A,"⇌","\\rightleftharpoons",!0);h(m,v,A,"≮","\\nless",!0);h(m,v,A,"","\\@nleqslant");h(m,v,A,"","\\@nleqq");h(m,v,A,"⪇","\\lneq",!0);h(m,v,A,"≨","\\lneqq",!0);h(m,v,A,"","\\@lvertneqq");h(m,v,A,"⋦","\\lnsim",!0);h(m,v,A,"⪉","\\lnapprox",!0);h(m,v,A,"⊀","\\nprec",!0);h(m,v,A,"⋠","\\npreceq",!0);h(m,v,A,"⋨","\\precnsim",!0);h(m,v,A,"⪹","\\precnapprox",!0);h(m,v,A,"≁","\\nsim",!0);h(m,v,A,"","\\@nshortmid");h(m,v,A,"∤","\\nmid",!0);h(m,v,A,"⊬","\\nvdash",!0);h(m,v,A,"⊭","\\nvDash",!0);h(m,v,A,"⋪","\\ntriangleleft");h(m,v,A,"⋬","\\ntrianglelefteq",!0);h(m,v,A,"⊊","\\subsetneq",!0);h(m,v,A,"","\\@varsubsetneq");h(m,v,A,"⫋","\\subsetneqq",!0);h(m,v,A,"","\\@varsubsetneqq");h(m,v,A,"≯","\\ngtr",!0);h(m,v,A,"","\\@ngeqslant");h(m,v,A,"","\\@ngeqq");h(m,v,A,"⪈","\\gneq",!0);h(m,v,A,"≩","\\gneqq",!0);h(m,v,A,"","\\@gvertneqq");h(m,v,A,"⋧","\\gnsim",!0);h(m,v,A,"⪊","\\gnapprox",!0);h(m,v,A,"⊁","\\nsucc",!0);h(m,v,A,"⋡","\\nsucceq",!0);h(m,v,A,"⋩","\\succnsim",!0);h(m,v,A,"⪺","\\succnapprox",!0);h(m,v,A,"≆","\\ncong",!0);h(m,v,A,"","\\@nshortparallel");h(m,v,A,"∦","\\nparallel",!0);h(m,v,A,"⊯","\\nVDash",!0);h(m,v,A,"⋫","\\ntriangleright");h(m,v,A,"⋭","\\ntrianglerighteq",!0);h(m,v,A,"","\\@nsupseteqq");h(m,v,A,"⊋","\\supsetneq",!0);h(m,v,A,"","\\@varsupsetneq");h(m,v,A,"⫌","\\supsetneqq",!0);h(m,v,A,"","\\@varsupsetneqq");h(m,v,A,"⊮","\\nVdash",!0);h(m,v,A,"⪵","\\precneqq",!0);h(m,v,A,"⪶","\\succneqq",!0);h(m,v,A,"","\\@nsubseteqq");h(m,v,te,"⊴","\\unlhd");h(m,v,te,"⊵","\\unrhd");h(m,v,A,"↚","\\nleftarrow",!0);h(m,v,A,"↛","\\nrightarrow",!0);h(m,v,A,"⇍","\\nLeftarrow",!0);h(m,v,A,"⇏","\\nRightarrow",!0);h(m,v,A,"↮","\\nleftrightarrow",!0);h(m,v,A,"⇎","\\nLeftrightarrow",!0);h(m,v,A,"△","\\vartriangle");h(m,v,I,"ℏ","\\hslash");h(m,v,I,"▽","\\triangledown");h(m,v,I,"◊","\\lozenge");h(m,v,I,"Ⓢ","\\circledS");h(m,v,I,"®","\\circledR");h(F,v,I,"®","\\circledR");h(m,v,I,"∡","\\measuredangle",!0);h(m,v,I,"∄","\\nexists");h(m,v,I,"℧","\\mho");h(m,v,I,"Ⅎ","\\Finv",!0);h(m,v,I,"⅁","\\Game",!0);h(m,v,I,"‵","\\backprime");h(m,v,I,"▲","\\blacktriangle");h(m,v,I,"▼","\\blacktriangledown");h(m,v,I,"■","\\blacksquare");h(m,v,I,"⧫","\\blacklozenge");h(m,v,I,"★","\\bigstar");h(m,v,I,"∢","\\sphericalangle",!0);h(m,v,I,"∁","\\complement",!0);h(m,v,I,"ð","\\eth",!0);h(F,b,I,"ð","ð");h(m,v,I,"╱","\\diagup");h(m,v,I,"╲","\\diagdown");h(m,v,I,"□","\\square");h(m,v,I,"□","\\Box");h(m,v,I,"◊","\\Diamond");h(m,v,I,"¥","\\yen",!0);h(F,v,I,"¥","\\yen",!0);h(m,v,I,"✓","\\checkmark",!0);h(F,v,I,"✓","\\checkmark");h(m,v,I,"ℶ","\\beth",!0);h(m,v,I,"ℸ","\\daleth",!0);h(m,v,I,"ℷ","\\gimel",!0);h(m,v,I,"ϝ","\\digamma",!0);h(m,v,I,"ϰ","\\varkappa");h(m,v,ht,"┌","\\@ulcorner",!0);h(m,v,Ze,"┐","\\@urcorner",!0);h(m,v,ht,"└","\\@llcorner",!0);h(m,v,Ze,"┘","\\@lrcorner",!0);h(m,v,A,"≦","\\leqq",!0);h(m,v,A,"⩽","\\leqslant",!0);h(m,v,A,"⪕","\\eqslantless",!0);h(m,v,A,"≲","\\lesssim",!0);h(m,v,A,"⪅","\\lessapprox",!0);h(m,v,A,"≊","\\approxeq",!0);h(m,v,te,"⋖","\\lessdot");h(m,v,A,"⋘","\\lll",!0);h(m,v,A,"≶","\\lessgtr",!0);h(m,v,A,"⋚","\\lesseqgtr",!0);h(m,v,A,"⪋","\\lesseqqgtr",!0);h(m,v,A,"≑","\\doteqdot");h(m,v,A,"≓","\\risingdotseq",!0);h(m,v,A,"≒","\\fallingdotseq",!0);h(m,v,A,"∽","\\backsim",!0);h(m,v,A,"⋍","\\backsimeq",!0);h(m,v,A,"⫅","\\subseteqq",!0);h(m,v,A,"⋐","\\Subset",!0);h(m,v,A,"⊏","\\sqsubset",!0);h(m,v,A,"≼","\\preccurlyeq",!0);h(m,v,A,"⋞","\\curlyeqprec",!0);h(m,v,A,"≾","\\precsim",!0);h(m,v,A,"⪷","\\precapprox",!0);h(m,v,A,"⊲","\\vartriangleleft");h(m,v,A,"⊴","\\trianglelefteq");h(m,v,A,"⊨","\\vDash",!0);h(m,v,A,"⊪","\\Vvdash",!0);h(m,v,A,"⌣","\\smallsmile");h(m,v,A,"⌢","\\smallfrown");h(m,v,A,"≏","\\bumpeq",!0);h(m,v,A,"≎","\\Bumpeq",!0);h(m,v,A,"≧","\\geqq",!0);h(m,v,A,"⩾","\\geqslant",!0);h(m,v,A,"⪖","\\eqslantgtr",!0);h(m,v,A,"≳","\\gtrsim",!0);h(m,v,A,"⪆","\\gtrapprox",!0);h(m,v,te,"⋗","\\gtrdot");h(m,v,A,"⋙","\\ggg",!0);h(m,v,A,"≷","\\gtrless",!0);h(m,v,A,"⋛","\\gtreqless",!0);h(m,v,A,"⪌","\\gtreqqless",!0);h(m,v,A,"≖","\\eqcirc",!0);h(m,v,A,"≗","\\circeq",!0);h(m,v,A,"≜","\\triangleq",!0);h(m,v,A,"∼","\\thicksim");h(m,v,A,"≈","\\thickapprox");h(m,v,A,"⫆","\\supseteqq",!0);h(m,v,A,"⋑","\\Supset",!0);h(m,v,A,"⊐","\\sqsupset",!0);h(m,v,A,"≽","\\succcurlyeq",!0);h(m,v,A,"⋟","\\curlyeqsucc",!0);h(m,v,A,"≿","\\succsim",!0);h(m,v,A,"⪸","\\succapprox",!0);h(m,v,A,"⊳","\\vartriangleright");h(m,v,A,"⊵","\\trianglerighteq");h(m,v,A,"⊩","\\Vdash",!0);h(m,v,A,"∣","\\shortmid");h(m,v,A,"∥","\\shortparallel");h(m,v,A,"≬","\\between",!0);h(m,v,A,"⋔","\\pitchfork",!0);h(m,v,A,"∝","\\varpropto");h(m,v,A,"◀","\\blacktriangleleft");h(m,v,A,"∴","\\therefore",!0);h(m,v,A,"∍","\\backepsilon");h(m,v,A,"▶","\\blacktriangleright");h(m,v,A,"∵","\\because",!0);h(m,v,A,"⋘","\\llless");h(m,v,A,"⋙","\\gggtr");h(m,v,te,"⊲","\\lhd");h(m,v,te,"⊳","\\rhd");h(m,v,A,"≂","\\eqsim",!0);h(m,b,A,"⋈","\\Join");h(m,v,A,"≑","\\Doteq",!0);h(m,v,te,"∔","\\dotplus",!0);h(m,v,te,"∖","\\smallsetminus");h(m,v,te,"⋒","\\Cap",!0);h(m,v,te,"⋓","\\Cup",!0);h(m,v,te,"⩞","\\doublebarwedge",!0);h(m,v,te,"⊟","\\boxminus",!0);h(m,v,te,"⊞","\\boxplus",!0);h(m,v,te,"⋇","\\divideontimes",!0);h(m,v,te,"⋉","\\ltimes",!0);h(m,v,te,"⋊","\\rtimes",!0);h(m,v,te,"⋋","\\leftthreetimes",!0);h(m,v,te,"⋌","\\rightthreetimes",!0);h(m,v,te,"⋏","\\curlywedge",!0);h(m,v,te,"⋎","\\curlyvee",!0);h(m,v,te,"⊝","\\circleddash",!0);h(m,v,te,"⊛","\\circledast",!0);h(m,v,te,"⋅","\\centerdot");h(m,v,te,"⊺","\\intercal",!0);h(m,v,te,"⋒","\\doublecap");h(m,v,te,"⋓","\\doublecup");h(m,v,te,"⊠","\\boxtimes",!0);h(m,v,A,"⇢","\\dashrightarrow",!0);h(m,v,A,"⇠","\\dashleftarrow",!0);h(m,v,A,"⇇","\\leftleftarrows",!0);h(m,v,A,"⇆","\\leftrightarrows",!0);h(m,v,A,"⇚","\\Lleftarrow",!0);h(m,v,A,"↞","\\twoheadleftarrow",!0);h(m,v,A,"↢","\\leftarrowtail",!0);h(m,v,A,"↫","\\looparrowleft",!0);h(m,v,A,"⇋","\\leftrightharpoons",!0);h(m,v,A,"↶","\\curvearrowleft",!0);h(m,v,A,"↺","\\circlearrowleft",!0);h(m,v,A,"↰","\\Lsh",!0);h(m,v,A,"⇈","\\upuparrows",!0);h(m,v,A,"↿","\\upharpoonleft",!0);h(m,v,A,"⇃","\\downharpoonleft",!0);h(m,b,A,"⊶","\\origof",!0);h(m,b,A,"⊷","\\imageof",!0);h(m,v,A,"⊸","\\multimap",!0);h(m,v,A,"↭","\\leftrightsquigarrow",!0);h(m,v,A,"⇉","\\rightrightarrows",!0);h(m,v,A,"⇄","\\rightleftarrows",!0);h(m,v,A,"↠","\\twoheadrightarrow",!0);h(m,v,A,"↣","\\rightarrowtail",!0);h(m,v,A,"↬","\\looparrowright",!0);h(m,v,A,"↷","\\curvearrowright",!0);h(m,v,A,"↻","\\circlearrowright",!0);h(m,v,A,"↱","\\Rsh",!0);h(m,v,A,"⇊","\\downdownarrows",!0);h(m,v,A,"↾","\\upharpoonright",!0);h(m,v,A,"⇂","\\downharpoonright",!0);h(m,v,A,"⇝","\\rightsquigarrow",!0);h(m,v,A,"⇝","\\leadsto");h(m,v,A,"⇛","\\Rrightarrow",!0);h(m,v,A,"↾","\\restriction");h(m,b,I,"‘","`");h(m,b,I,"$","\\$");h(F,b,I,"$","\\$");h(F,b,I,"$","\\textdollar");h(m,b,I,"%","\\%");h(F,b,I,"%","\\%");h(m,b,I,"_","\\_");h(F,b,I,"_","\\_");h(F,b,I,"_","\\textunderscore");h(m,b,I,"∠","\\angle",!0);h(m,b,I,"∞","\\infty",!0);h(m,b,I,"′","\\prime");h(m,b,I,"△","\\triangle");h(m,b,I,"Γ","\\Gamma",!0);h(m,b,I,"Δ","\\Delta",!0);h(m,b,I,"Θ","\\Theta",!0);h(m,b,I,"Λ","\\Lambda",!0);h(m,b,I,"Ξ","\\Xi",!0);h(m,b,I,"Π","\\Pi",!0);h(m,b,I,"Σ","\\Sigma",!0);h(m,b,I,"Υ","\\Upsilon",!0);h(m,b,I,"Φ","\\Phi",!0);h(m,b,I,"Ψ","\\Psi",!0);h(m,b,I,"Ω","\\Omega",!0);h(m,b,I,"A","Α");h(m,b,I,"B","Β");h(m,b,I,"E","Ε");h(m,b,I,"Z","Ζ");h(m,b,I,"H","Η");h(m,b,I,"I","Ι");h(m,b,I,"K","Κ");h(m,b,I,"M","Μ");h(m,b,I,"N","Ν");h(m,b,I,"O","Ο");h(m,b,I,"P","Ρ");h(m,b,I,"T","Τ");h(m,b,I,"X","Χ");h(m,b,I,"¬","\\neg",!0);h(m,b,I,"¬","\\lnot");h(m,b,I,"⊤","\\top");h(m,b,I,"⊥","\\bot");h(m,b,I,"∅","\\emptyset");h(m,v,I,"∅","\\varnothing");h(m,b,ie,"α","\\alpha",!0);h(m,b,ie,"β","\\beta",!0);h(m,b,ie,"γ","\\gamma",!0);h(m,b,ie,"δ","\\delta",!0);h(m,b,ie,"ϵ","\\epsilon",!0);h(m,b,ie,"ζ","\\zeta",!0);h(m,b,ie,"η","\\eta",!0);h(m,b,ie,"θ","\\theta",!0);h(m,b,ie,"ι","\\iota",!0);h(m,b,ie,"κ","\\kappa",!0);h(m,b,ie,"λ","\\lambda",!0);h(m,b,ie,"μ","\\mu",!0);h(m,b,ie,"ν","\\nu",!0);h(m,b,ie,"ξ","\\xi",!0);h(m,b,ie,"ο","\\omicron",!0);h(m,b,ie,"π","\\pi",!0);h(m,b,ie,"ρ","\\rho",!0);h(m,b,ie,"σ","\\sigma",!0);h(m,b,ie,"τ","\\tau",!0);h(m,b,ie,"υ","\\upsilon",!0);h(m,b,ie,"ϕ","\\phi",!0);h(m,b,ie,"χ","\\chi",!0);h(m,b,ie,"ψ","\\psi",!0);h(m,b,ie,"ω","\\omega",!0);h(m,b,ie,"ε","\\varepsilon",!0);h(m,b,ie,"ϑ","\\vartheta",!0);h(m,b,ie,"ϖ","\\varpi",!0);h(m,b,ie,"ϱ","\\varrho",!0);h(m,b,ie,"ς","\\varsigma",!0);h(m,b,ie,"φ","\\varphi",!0);h(m,b,te,"∗","*",!0);h(m,b,te,"+","+");h(m,b,te,"−","-",!0);h(m,b,te,"⋅","\\cdot",!0);h(m,b,te,"∘","\\circ",!0);h(m,b,te,"÷","\\div",!0);h(m,b,te,"±","\\pm",!0);h(m,b,te,"×","\\times",!0);h(m,b,te,"∩","\\cap",!0);h(m,b,te,"∪","\\cup",!0);h(m,b,te,"∖","\\setminus",!0);h(m,b,te,"∧","\\land");h(m,b,te,"∨","\\lor");h(m,b,te,"∧","\\wedge",!0);h(m,b,te,"∨","\\vee",!0);h(m,b,I,"√","\\surd");h(m,b,ht,"⟨","\\langle",!0);h(m,b,ht,"∣","\\lvert");h(m,b,ht,"∥","\\lVert");h(m,b,Ze,"?","?");h(m,b,Ze,"!","!");h(m,b,Ze,"⟩","\\rangle",!0);h(m,b,Ze,"∣","\\rvert");h(m,b,Ze,"∥","\\rVert");h(m,b,A,"=","=");h(m,b,A,":",":");h(m,b,A,"≈","\\approx",!0);h(m,b,A,"≅","\\cong",!0);h(m,b,A,"≥","\\ge");h(m,b,A,"≥","\\geq",!0);h(m,b,A,"←","\\gets");h(m,b,A,">","\\gt",!0);h(m,b,A,"∈","\\in",!0);h(m,b,A,"","\\@not");h(m,b,A,"⊂","\\subset",!0);h(m,b,A,"⊃","\\supset",!0);h(m,b,A,"⊆","\\subseteq",!0);h(m,b,A,"⊇","\\supseteq",!0);h(m,v,A,"⊈","\\nsubseteq",!0);h(m,v,A,"⊉","\\nsupseteq",!0);h(m,b,A,"⊨","\\models");h(m,b,A,"←","\\leftarrow",!0);h(m,b,A,"≤","\\le");h(m,b,A,"≤","\\leq",!0);h(m,b,A,"<","\\lt",!0);h(m,b,A,"→","\\rightarrow",!0);h(m,b,A,"→","\\to");h(m,v,A,"≱","\\ngeq",!0);h(m,v,A,"≰","\\nleq",!0);h(m,b,Yt," ","\\ ");h(m,b,Yt," ","\\space");h(m,b,Yt," ","\\nobreakspace");h(F,b,Yt," ","\\ ");h(F,b,Yt," "," ");h(F,b,Yt," ","\\space");h(F,b,Yt," ","\\nobreakspace");h(m,b,Yt,"","\\nobreak");h(m,b,Yt,"","\\allowbreak");h(m,b,kn,",",",");h(m,b,kn,";",";");h(m,v,te,"⊼","\\barwedge",!0);h(m,v,te,"⊻","\\veebar",!0);h(m,b,te,"⊙","\\odot",!0);h(m,b,te,"⊕","\\oplus",!0);h(m,b,te,"⊗","\\otimes",!0);h(m,b,I,"∂","\\partial",!0);h(m,b,te,"⊘","\\oslash",!0);h(m,v,te,"⊚","\\circledcirc",!0);h(m,v,te,"⊡","\\boxdot",!0);h(m,b,te,"△","\\bigtriangleup");h(m,b,te,"▽","\\bigtriangledown");h(m,b,te,"†","\\dagger");h(m,b,te,"⋄","\\diamond");h(m,b,te,"⋆","\\star");h(m,b,te,"◃","\\triangleleft");h(m,b,te,"▹","\\triangleright");h(m,b,ht,"{","\\{");h(F,b,I,"{","\\{");h(F,b,I,"{","\\textbraceleft");h(m,b,Ze,"}","\\}");h(F,b,I,"}","\\}");h(F,b,I,"}","\\textbraceright");h(m,b,ht,"{","\\lbrace");h(m,b,Ze,"}","\\rbrace");h(m,b,ht,"[","\\lbrack",!0);h(F,b,I,"[","\\lbrack",!0);h(m,b,Ze,"]","\\rbrack",!0);h(F,b,I,"]","\\rbrack",!0);h(m,b,ht,"(","\\lparen",!0);h(m,b,Ze,")","\\rparen",!0);h(F,b,I,"<","\\textless",!0);h(F,b,I,">","\\textgreater",!0);h(m,b,ht,"⌊","\\lfloor",!0);h(m,b,Ze,"⌋","\\rfloor",!0);h(m,b,ht,"⌈","\\lceil",!0);h(m,b,Ze,"⌉","\\rceil",!0);h(m,b,I,"\\","\\backslash");h(m,b,I,"∣","|");h(m,b,I,"∣","\\vert");h(F,b,I,"|","\\textbar",!0);h(m,b,I,"∥","\\|");h(m,b,I,"∥","\\Vert");h(F,b,I,"∥","\\textbardbl");h(F,b,I,"~","\\textasciitilde");h(F,b,I,"\\","\\textbackslash");h(F,b,I,"^","\\textasciicircum");h(m,b,A,"↑","\\uparrow",!0);h(m,b,A,"⇑","\\Uparrow",!0);h(m,b,A,"↓","\\downarrow",!0);h(m,b,A,"⇓","\\Downarrow",!0);h(m,b,A,"↕","\\updownarrow",!0);h(m,b,A,"⇕","\\Updownarrow",!0);h(m,b,Pe,"∐","\\coprod");h(m,b,Pe,"⋁","\\bigvee");h(m,b,Pe,"⋀","\\bigwedge");h(m,b,Pe,"⨄","\\biguplus");h(m,b,Pe,"⋂","\\bigcap");h(m,b,Pe,"⋃","\\bigcup");h(m,b,Pe,"∫","\\int");h(m,b,Pe,"∫","\\intop");h(m,b,Pe,"∬","\\iint");h(m,b,Pe,"∭","\\iiint");h(m,b,Pe,"∏","\\prod");h(m,b,Pe,"∑","\\sum");h(m,b,Pe,"⨂","\\bigotimes");h(m,b,Pe,"⨁","\\bigoplus");h(m,b,Pe,"⨀","\\bigodot");h(m,b,Pe,"∮","\\oint");h(m,b,Pe,"∯","\\oiint");h(m,b,Pe,"∰","\\oiiint");h(m,b,Pe,"⨆","\\bigsqcup");h(m,b,Pe,"∫","\\smallint");h(F,b,Hr,"…","\\textellipsis");h(m,b,Hr,"…","\\mathellipsis");h(F,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"⋯","\\@cdots",!0);h(m,b,Hr,"⋱","\\ddots",!0);h(m,b,I,"⋮","\\varvdots");h(F,b,I,"⋮","\\varvdots");h(m,b,Ce,"ˊ","\\acute");h(m,b,Ce,"ˋ","\\grave");h(m,b,Ce,"¨","\\ddot");h(m,b,Ce,"~","\\tilde");h(m,b,Ce,"ˉ","\\bar");h(m,b,Ce,"˘","\\breve");h(m,b,Ce,"ˇ","\\check");h(m,b,Ce,"^","\\hat");h(m,b,Ce,"⃗","\\vec");h(m,b,Ce,"˙","\\dot");h(m,b,Ce,"˚","\\mathring");h(m,b,ie,"","\\@imath");h(m,b,ie,"","\\@jmath");h(m,b,I,"ı","ı");h(m,b,I,"ȷ","ȷ");h(F,b,I,"ı","\\i",!0);h(F,b,I,"ȷ","\\j",!0);h(F,b,I,"ß","\\ss",!0);h(F,b,I,"æ","\\ae",!0);h(F,b,I,"œ","\\oe",!0);h(F,b,I,"ø","\\o",!0);h(F,b,I,"Æ","\\AE",!0);h(F,b,I,"Œ","\\OE",!0);h(F,b,I,"Ø","\\O",!0);h(F,b,Ce,"ˊ","\\'");h(F,b,Ce,"ˋ","\\`");h(F,b,Ce,"ˆ","\\^");h(F,b,Ce,"˜","\\~");h(F,b,Ce,"ˉ","\\=");h(F,b,Ce,"˘","\\u");h(F,b,Ce,"˙","\\.");h(F,b,Ce,"¸","\\c");h(F,b,Ce,"˚","\\r");h(F,b,Ce,"ˇ","\\v");h(F,b,Ce,"¨",'\\"');h(F,b,Ce,"˝","\\H");h(F,b,Ce,"◯","\\textcircled");var eo={"--":!0,"---":!0,"``":!0,"''":!0};h(F,b,I,"–","--",!0);h(F,b,I,"–","\\textendash");h(F,b,I,"—","---",!0);h(F,b,I,"—","\\textemdash");h(F,b,I,"‘","`",!0);h(F,b,I,"‘","\\textquoteleft");h(F,b,I,"’","'",!0);h(F,b,I,"’","\\textquoteright");h(F,b,I,"“","``",!0);h(F,b,I,"“","\\textquotedblleft");h(F,b,I,"”","''",!0);h(F,b,I,"”","\\textquotedblright");h(m,b,I,"°","\\degree",!0);h(F,b,I,"°","\\degree");h(F,b,I,"°","\\textdegree",!0);h(m,b,I,"£","\\pounds");h(m,b,I,"£","\\mathsterling",!0);h(F,b,I,"£","\\pounds");h(F,b,I,"£","\\textsterling",!0);h(m,v,I,"✠","\\maltese");h(F,v,I,"✠","\\maltese");var Ru='0123456789/@."';for(var ta=0;ta{var t=e.charCodeAt(0),r=e.charCodeAt(1),n=(t-55296)*1024+(r-56320)+65536;if(119808<=n&&n<120484){var a=Math.floor((n-119808)/26);return Gu[a]}else if(120782<=n&&n<=120831){var i=Math.floor((n-120782)/10);return t3[i]}else{if(n===120485||n===120486)return Gu[0];if(120486{if(Jt(e.classes)!==Jt(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize||e.italic!==0&&e.hasClass("mathnormal"))return!1;if(e.classes.length===1){var r=e.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n of Object.keys(e.style))if(e.style[n]!==t.style[n])return!1;for(var a of Object.keys(t.style))if(e.style[a]!==t.style[a])return!1;return!0},to=e=>{for(var t=0;tr&&(r=u.height),u.depth>n&&(n=u.depth),u.maxFontSize>a&&(a=u.maxFontSize)}t.height=r,t.depth=n,t.maxFontSize=a},z=function(t,r,n,a){var i=new Fr(t,r,n,a);return xi(i),i},er=(e,t,r,n)=>new Fr(e,t,r,n),Or=function(t,r,n){var a=z([t],[],r);return a.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),a.style.borderBottomWidth=V(a.height),a.maxFontSize=1,a},i3=function(t,r,n,a){var i=new E0(t,r,n,a);return xi(i),i},Gt=function(t){var r=new Br(t);return xi(r),r},Lr=function(t,r){return t instanceof Br?z([],[t],r):t},u3=function(t){if(t.positionType==="individualShift"){for(var r=t.children,n=[r[0]],a=-r[0].shift-r[0].elem.depth,i=a,u=1;u{var r=z(["mspace"],[],t),n=Ie(e,t);return r.style.marginRight=V(n),r},qn=(e,t,r)=>{var n,a;switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return t==="textbf"&&r==="textit"?a="BoldItalic":t==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},Ba={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},no={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},ao=function(t,r){var[n,a,i]=no[t],u=new Zt(n),s=new zt([u],{width:V(a),height:V(i),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),l=er(["overlay"],[s],r);return l.height=i,l.style.height=V(i),l.style.width=V(a),l},_e={number:3,unit:"mu"},cr={number:4,unit:"mu"},Pt={number:5,unit:"mu"},s3={mord:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mop:{mord:_e,mop:_e,mrel:Pt,minner:_e},mbin:{mord:cr,mop:cr,mopen:cr,minner:cr},mrel:{mord:Pt,mop:Pt,mopen:Pt,minner:Pt},mopen:{},mclose:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mpunct:{mord:_e,mop:_e,mrel:Pt,mopen:_e,mclose:_e,mpunct:_e,minner:_e},minner:{mord:_e,mop:_e,mbin:cr,mrel:Pt,mopen:_e,mpunct:_e,minner:_e}},l3={mord:{mop:_e},mop:{mord:_e,mop:_e},mbin:{},mrel:{},mopen:{},mclose:{mop:_e},mpunct:{},minner:{mop:_e}},io={},a0={},i0={};function Z(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:a},l=0;l{var D=S.classes[0],_=x.classes[0];D==="mbin"&&c3.has(_)?S.classes[0]="mord":_==="mbin"&&o3.has(D)&&(x.classes[0]="mord")},{node:f},g,p),Fa(i,(x,S)=>{var D,_,N=za(S),M=za(x),W=N&&M?x.hasClass("mtight")?(D=l3[N])==null?void 0:D[M]:(_=s3[N])==null?void 0:_[M]:null;if(W)return ro(W,c)},{node:f},g,p),i},Fa=function(t,r,n,a,i){a&&t.push(a);for(var u=0;ug=>{t.splice(f+1,0,g),u++})(u)}a&&t.pop()},uo=function(t){return t instanceof Br||t instanceof E0||t instanceof Fr&&t.hasClass("enclosing")?t:null},Ha=function(t,r){var n=uo(t);if(n){var a=n.children;if(a.length){if(r==="right")return Ha(a[a.length-1],"right");if(r==="left")return Ha(a[0],"left")}}return t},za=function(t,r){if(!t)return null;r&&(t=Ha(t,r));var n=t.classes[0];return d3[n]||null},bn=function(t,r){var n=["nulldelimiter"].concat(t.baseSizingClasses());return z(r.concat(n))},Te=function(t,r,n){if(!t)return z();if(a0[t.type]){var a=a0[t.type](t,r);if(n&&r.size!==n.size){a=z(r.sizingClasses(n),[a],r);var i=r.sizeMultiplier/n.sizeMultiplier;a.height*=i,a.depth*=i}return a}else throw new Y("Got group of unknown type: '"+t.type+"'")};function Yn(e,t){var r=z(["base"],e,t),n=z(["strut"]);return n.style.height=V(r.height+r.depth),r.depth&&(n.style.verticalAlign=V(-r.depth)),r.children.unshift(n),r}function Ua(e,t){var r=null;e.length===1&&e[0].type==="tag"&&(r=e[0].tag,e=e[0].body);var n=He(e,t,"root"),a;n.length===2&&n[1].hasClass("tag")&&(a=n.pop());for(var i=[],u=[],s=0;s0&&(i.push(Yn(u,t)),u=[]),i.push(n[s]));u.length>0&&i.push(Yn(u,t));var c;r?(c=Yn(He(r,t,!0),t),c.classes=["tag"],i.push(c)):a&&i.push(a);var d=z(["katex-html"],i);if(d.setAttribute("aria-hidden","true"),c){var f=c.children[0];f.style.height=V(d.height+d.depth),d.depth&&(f.style.verticalAlign=V(-d.depth))}return d}function so(e){return new Br(e)}class G{constructor(t,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=t,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(t,r){this.attributes[t]=r}getAttribute(t){return this.attributes[t]}toNode(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);this.classes.length>0&&(t.className=Jt(this.classes));for(var n=0;n0&&(t+=' class ="'+Ve(Jt(this.classes))+'"'),t+=">";for(var n=0;n",t}toText(){return this.children.map(t=>t.toText()).join("")}}class Me{constructor(t){this.text=void 0,this.text=t}toNode(){return document.createTextNode(this.text)}toMarkup(){return Ve(this.toText())}toText(){return this.text}}class lo{constructor(t){this.width=void 0,this.character=void 0,this.width=t,t>=.05555&&t<=.05556?this.character=" ":t>=.1666&&t<=.1667?this.character=" ":t>=.2222&&t<=.2223?this.character=" ":t>=.2777&&t<=.2778?this.character="  ":t>=-.05556&&t<=-.05555?this.character=" ⁣":t>=-.1667&&t<=-.1666?this.character=" ⁣":t>=-.2223&&t<=-.2222?this.character=" ⁣":t>=-.2778&&t<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",V(this.width)),t}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var f3=new Set(["\\imath","\\jmath"]),m3=new Set(["mrow","mtable"]),bt=function(t,r,n){return we[r][t]&&we[r][t].replace&&t.charCodeAt(0)!==55349&&!(eo.hasOwnProperty(t)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(t=we[r][t].replace),new Me(t)},yi=function(t){return t.length===1?t[0]:new G("mrow",t)},p3={mathit:"italic",boldsymbol:e=>e.type==="textord"?"bold":"bold-italic",mathbf:"bold",mathbb:"double-struck",mathsfit:"sans-serif-italic",mathfrak:"fraktur",mathscr:"script",mathcal:"script",mathsf:"sans-serif",mathtt:"monospace"},vi=(e,t)=>{if(e.mode==="text"){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold"}var r=t.font;if(!r||r==="mathnormal")return null;var n=e.mode,a=p3[r];if(a)return typeof a=="function"?a(e):a;var i=e.text;if(f3.has(i))return null;if(we[n][i]){var u=we[n][i].replace;u&&(i=u)}var s=Ba[r].fontName;return Ei(i,s,n)?Ba[r].variant:null};function ia(e){if(!e)return!1;if(e.type==="mi"&&e.children.length===1){var t=e.children[0];return t instanceof Me&&t.text==="."}else if(e.type==="mo"&&e.children.length===1&&e.getAttribute("separator")==="true"&&e.getAttribute("lspace")==="0em"&&e.getAttribute("rspace")==="0em"){var r=e.children[0];return r instanceof Me&&r.text===","}else return!1}var dt=function(t,r,n){if(t.length===1){var a=Ae(t[0],r);return n&&a instanceof G&&a.type==="mo"&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var i=[],u,s=0;s=1&&(u.type==="mn"||ia(u))){var c=l.children[0];c instanceof G&&c.type==="mn"&&(c.children=[...u.children,...c.children],i.pop())}else if(u.type==="mi"&&u.children.length===1){var d=u.children[0];if(d instanceof Me&&d.text==="̸"&&(l.type==="mo"||l.type==="mi"||l.type==="mn")){var f=l.children[0];f instanceof Me&&f.text.length>0&&(f.text=f.text.slice(0,1)+"̸"+f.text.slice(1),i.pop())}}}i.push(l),u=l}return i},tr=function(t,r,n){return yi(dt(t,r,n))},Ae=function(t,r){if(!t)return new G("mrow");if(i0[t.type])return i0[t.type](t,r);throw new Y("Got group of unknown type: '"+t.type+"'")};function Vu(e,t,r,n,a){var i=dt(e,r),u;i.length===1&&i[0]instanceof G&&m3.has(i[0].type)?u=i[0]:u=new G("mrow",i);var s=new G("annotation",[new Me(t)]);s.setAttribute("encoding","application/x-tex");var l=new G("semantics",[u,s]),c=new G("math",[l]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var d=a?"katex":"katex-mathml";return z([d],[c])}var g3=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],ju=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Wu=function(t,r){return r.size<2?t:g3[t-1][r.size-1]};class Bt{constructor(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||Bt.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=ju[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}extend(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};return Object.assign(r,t),new Bt(r)}havingStyle(t){return this.style===t?this:this.extend({style:t,size:Wu(this.textSize,t)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:ju[t-1]})}havingBaseStyle(t){t=t||this.style.text();var r=Wu(Bt.BASESIZE,t);return this.size===r&&this.textSize===Bt.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}havingBaseSizing(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})}withColor(t){return this.extend({color:t})}withPhantom(){return this.extend({phantom:!0})}withFont(t){return this.extend({font:t})}withTextFontFamily(t){return this.extend({fontFamily:t,font:""})}withTextFontWeight(t){return this.extend({fontWeight:t,font:""})}withTextFontShape(t){return this.extend({fontShape:t,font:""})}sizingClasses(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==Bt.BASESIZE?["sizing","reset-size"+this.size,"size"+Bt.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Z4(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}Bt.BASESIZE=6;var oo=function(t){return new Bt({style:t.displayMode?oe.DISPLAY:oe.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},co=function(t,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),t=z(n,[t])}return t},b3=function(t,r,n){var a=oo(n),i;if(n.output==="mathml")return Vu(t,r,a,n.displayMode,!0);if(n.output==="html"){var u=Ua(t,a);i=z(["katex"],[u])}else{var s=Vu(t,r,a,n.displayMode,!1),l=Ua(t,a);i=z(["katex"],[s,l])}return co(i,n)},E3=function(t,r,n){var a=oo(n),i=Ua(t,a),u=z(["katex"],[i]);return co(u,n)},T3={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",underbracket:"⎵",overbracket:"⎴",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},y0=function(t){var r=new G("mo",[new Me(T3[t.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},x3={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overbracket:[["leftbracketover","rightbracketover"],1.6,440],underbracket:[["leftbracketunder","rightbracketunder"],1.6,410],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},y3=new Set(["widehat","widecheck","widetilde","utilde"]),v0=function(t,r){function n(){var s=4e5,l=t.label.slice(1);if(y3.has(l)&&"base"in t){var c=t.base.type==="ordgroup"?t.base.body.length:1,d,f,g;if(c>5)l==="widehat"||l==="widecheck"?(d=420,s=2364,g=.42,f=l+"4"):(d=312,s=2340,g=.34,f="tilde4");else{var p=[1,1,2,2,3,3][c];l==="widehat"||l==="widecheck"?(s=[0,1062,2364,2364,2364][p],d=[0,239,300,360,420][p],g=[0,.24,.3,.3,.36,.42][p],f=l+p):(s=[0,600,1033,2339,2340][p],d=[0,260,286,306,312][p],g=[0,.26,.286,.3,.306,.34][p],f="tilde"+p)}var x=new Zt(f),S=new zt([x],{width:"100%",height:V(g),viewBox:"0 0 "+s+" "+d,preserveAspectRatio:"none"});return{span:er([],[S],r),minWidth:0,height:g}}else{var D=[],_=x3[l];if(!_)throw new Error('No SVG data for "'+l+'".');var[N,M,W]=_,j=W/1e3,L=N.length,ee,re;if(L===1){if(_.length!==4)throw new Error('Expected 4-tuple for single-path SVG data "'+l+'".');ee=["hide-tail"],re=[_[3]]}else if(L===2)ee=["halfarrow-left","halfarrow-right"],re=["xMinYMin","xMaxYMin"];else if(L===3)ee=["brace-left","brace-center","brace-right"],re=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+L+" children.");for(var K=0;K0&&(a.style.minWidth=V(i)),a},v3=function(t,r,n,a,i){var u,s=t.height+t.depth+n+a;if(/fbox|color|angl/.test(r)){if(u=z(["stretchy",r],[],i),r==="fbox"){var l=i.color&&i.getColor();l&&(u.style.borderColor=l)}}else{var c=[];/^[bx]cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var d=new zt(c,{width:"100%",height:V(s)});u=er([],[d],i)}return u.height=s,u.style.height=V(s),u},A3={bin:1,close:1,inner:1,open:1,punct:1,rel:1},k3={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1};function S3(e){return e in A3}function ce(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function A0(e){var t=k0(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function k0(e){return e&&(e.type==="atom"||k3.hasOwnProperty(e.type))?e:null}var ho=e=>{if(e instanceof ct)return e;if(K4(e)&&e.children.length===1)return ho(e.children[0])},Ai=(e,t)=>{var r,n,a;e&&e.type==="supsub"?(n=ce(e.base,"accent"),r=n.base,e.base=r,a=Q4(Te(e,t)),e.base=n):(n=ce(e,"accent"),r=n.base);var i=Te(r,t.havingCrampedStyle()),u=n.isShifty&&qt(r),s=0;if(u){var l,c;s=(l=(c=ho(i))==null?void 0:c.skew)!=null?l:0}var d=n.label==="\\c",f=d?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight),g;if(n.isStretchy)g=v0(n,t),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:g,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+V(2*s)+")",marginLeft:V(2*s)}:void 0}]});else{var p,x;n.label==="\\vec"?(p=ao("vec",t),x=no.vec[1]):(p=x0({mode:n.mode,text:n.label},t,"textord"),p=$4(p),p.italic=0,x=p.width,d&&(f+=p.depth)),g=z(["accent-body"],[p]);var S=n.label==="\\textcircled";S&&(g.classes.push("accent-full"),f=i.height);var D=s;S||(D-=x/2),g.style.left=V(D),n.label==="\\textcircled"&&(g.style.top=".2em"),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-f},{type:"elem",elem:g}]})}var _=z(["mord","accent"],[g],t);return a?(a.children[0]=_,a.height=Math.max(_.height,a.height),a.classes[0]="mord",a):_},fo=(e,t)=>{var r=e.isStretchy?y0(e.label):new G("mo",[bt(e.label,e.mode)]),n=new G("mover",[Ae(e.base,t),r]);return n.setAttribute("accent","true"),n},w3=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));Z({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=u0(t[0]),n=!w3.test(e.funcName),a=!n||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],n=e.parser.mode;return n==="math"&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:(e,t)=>{var r=Te(e.base,t),n=v0(e,t),a=e.label==="\\utilde"?.12:0,i=Ee({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]});return z(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=y0(e.label),n=new G("munder",[Ae(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Gn=e=>{var t=new G("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};Z({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n,funcName:a}=e;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder(e,t){var r=t.style,n=t.havingStyle(r.sup()),a=Lr(Te(e.body,n,t),t),i=e.label.slice(0,2)==="\\x"?"x":"cd";a.classes.push(i+"-arrow-pad");var u;e.below&&(n=t.havingStyle(r.sub()),u=Lr(Te(e.below,n,t),t),u.classes.push(i+"-arrow-pad"));var s=v0(e,t),l=-t.fontMetrics().axisHeight+.5*s.height,c=-t.fontMetrics().axisHeight-.5*s.height-.111;(a.depth>.25||e.label==="\\xleftequilibrium")&&(c-=a.depth);var d;if(u){var f=-t.fontMetrics().axisHeight+u.height+.5*s.height+.111;d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]},{type:"elem",elem:u,shift:f}]})}else d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]}]});return z(["mrel","x-arrow"],[d],t)},mathmlBuilder(e,t){var r=y0(e.label);r.setAttribute("minsize",e.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(e.body){var a=Gn(Ae(e.body,t));if(e.below){var i=Gn(Ae(e.below,t));n=new G("munderover",[r,i,a])}else n=new G("mover",[r,a])}else if(e.below){var u=Gn(Ae(e.below,t));n=new G("munder",[r,u])}else n=Gn(),n=new G("mover",[r,n]);return n}});function mo(e,t){var r=He(e.body,t,!0);return z([e.mclass],r,t)}function po(e,t){var r,n=dt(e.body,t);return e.mclass==="minner"?r=new G("mpadded",n):e.mclass==="mord"?e.isCharacterBox?(r=n[0],r.type="mi"):r=new G("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new G("mo",n),e.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):e.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):e.mclass==="mopen"||e.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):e.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}Z({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Re(a),isCharacterBox:qt(a)}},htmlBuilder:mo,mathmlBuilder:po});var S0=e=>{var t=e.type==="ordgroup"&&e.body.length?e.body[0]:e;return t.type==="atom"&&(t.family==="bin"||t.family==="rel")?"m"+t.family:"mord"};Z({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:S0(t[0]),body:Re(t[1]),isCharacterBox:qt(t[1])}}});Z({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:n}=e,a=t[1],i=t[0],u;n!=="\\stackrel"?u=S0(a):u="mrel";var s={type:"op",mode:a.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:Re(a)},l={type:"supsub",mode:i.mode,base:s,sup:n==="\\underset"?null:i,sub:n==="\\underset"?i:null};return{type:"mclass",mode:r.mode,mclass:u,body:[l],isCharacterBox:qt(l)}},htmlBuilder:mo,mathmlBuilder:po});Z({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:S0(t[0]),body:Re(t[0])}},htmlBuilder(e,t){var r=He(e.body,t,!0),n=z([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){var r=dt(e.body,t),n=new G("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var C3={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xu=()=>({type:"styling",body:[],mode:"math",style:"display",resetFont:!0}),$u=e=>e.type==="textord"&&e.text==="@",_3=(e,t)=>(e.type==="mathord"||e.type==="atom")&&e.text===t;function I3(e,t,r){var n=C3[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{var a=r.callFunction("\\\\cdleft",[t[0]],[]),i={type:"atom",text:n,mode:"math",family:"rel"},u=r.callFunction("\\Big",[i],[]),s=r.callFunction("\\\\cdright",[t[1]],[]),l={type:"ordgroup",mode:"math",body:[a,u,s]};return r.callFunction("\\\\cdparent",[l],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var c={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[c],[])}default:return{type:"textord",text:" ",mode:"math"}}}function N3(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if(r==="&"||r==="\\\\")e.consume();else if(r==="\\end"){t[t.length-1].length===0&&t.pop();break}else throw new Y("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var n=[],a=[n],i=0;iAV".includes(c))for(var f=0;f<2;f++){for(var g=!0,p=l+1;pAV=|." after @',u[l]);var x=I3(c,d,e),S={type:"styling",body:[x],mode:"math",style:"display",resetFont:!0};n.push(S),s=Xu()}i%2===0?n.push(s):n.shift(),n=[],a.push(n)}e.gullet.endGroup(),e.gullet.endGroup();var D=new Array(a[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:a,arraystretch:1,addJot:!0,rowGaps:[null],cols:D,colSeparationType:"CD",hLinesBeforeRow:new Array(a.length+1).fill([])}}Z({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),n=Lr(Te(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){var r=new G("mrow",[Ae(e.label,t)]);return r=new G("mpadded",[r]),r.setAttribute("width","0"),e.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new G("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Z({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Lr(Te(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new G("mrow",[Ae(e.fragment,t)])}});Z({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,n=ce(t[0],"ordgroup"),a=n.body,i="",u=0;u=1114111)throw new Y("\\@char with invalid code point "+i);return l<=65535?c=String.fromCharCode(l):(l-=65536,c=String.fromCharCode((l>>10)+55296,(l&1023)+56320)),{type:"textord",mode:r.mode,text:c}}});var go=(e,t)=>{var r=He(e.body,t.withColor(e.color),!1);return Gt(r)},bo=(e,t)=>{var r=dt(e.body,t.withColor(e.color)),n=new G("mstyle",r);return n.setAttribute("mathcolor",e.color),n};Z({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,n=ce(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:Re(a)}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:n}=e,a=ce(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:n}=e,a=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&ce(a,"size").value}},htmlBuilder(e,t){var r=z(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(Ie(e.size,t)))),r},mathmlBuilder(e,t){var r=new G("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(Ie(e.size,t)))),r}});var qa={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Eo=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new Y("Expected a control sequence",e);return t},D3=e=>{var t=e.gullet.popToken();return t.text==="="&&(t=e.gullet.popToken(),t.text===" "&&(t=e.gullet.popToken())),t},To=(e,t,r,n)=>{var a=e.gullet.macros.get(r.text);a==null&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};Z({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var n=t.fetch();if(qa[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=qa[n.text]),ce(t.parseFunction(),"internal");throw new Y("Invalid token after macro prefix",n)}});Z({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=t.gullet.popToken(),a=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(a))throw new Y("Expected a control sequence",n);for(var i=0,u,s=[[]];t.gullet.future().text!=="{";)if(n=t.gullet.popToken(),n.text==="#"){if(t.gullet.future().text==="{"){u=t.gullet.future(),s[i].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new Y('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==i+1)throw new Y('Argument number "'+n.text+'" out of order');i++,s.push([])}else{if(n.text==="EOF")throw new Y("Expected a macro definition");s[i].push(n.text)}var{tokens:l}=t.gullet.consumeArg();return u&&l.unshift(u),(r==="\\edef"||r==="\\xdef")&&(l=t.gullet.expandTokens(l),l.reverse()),t.gullet.macros.set(a,{tokens:l,numArgs:i,delimiters:s},r===qa[r]),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken());t.gullet.consumeSpaces();var a=D3(t);return To(t,n,a,r==="\\\\globallet"),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return To(t,n,i,r==="\\\\globalfuture"),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var tn=function(t,r,n){var a=we.math[t]&&we.math[t].replace,i=Ei(a||t,r,n);if(!i)throw new Error("Unsupported symbol "+t+" and font size "+r+".");return i},ki=function(t,r,n,a){var i=n.havingBaseStyle(r),u=z(a.concat(i.sizingClasses(n)),[t],n),s=i.sizeMultiplier/n.sizeMultiplier;return u.height*=s,u.depth*=s,u.maxFontSize=i.sizeMultiplier,u},xo=function(t,r,n){var a=r.havingBaseStyle(n),i=(1-r.sizeMultiplier/a.sizeMultiplier)*r.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=V(i),t.height-=i,t.depth+=i},O3=function(t,r,n,a,i,u){var s=Qe(t,"Main-Regular",i,a),l=ki(s,r,a,u);return xo(l,a,r),l},L3=function(t,r,n,a){return Qe(t,"Size"+r+"-Regular",n,a)},yo=function(t,r,n,a,i,u){var s=L3(t,r,i,a),l=ki(z(["delimsizing","size"+r],[s],a),oe.TEXT,a,u);return n&&xo(l,a,oe.TEXT),l},ua=function(t,r,n){var a;r==="Size1-Regular"?a="delim-size1":a="delim-size4";var i=z(["delimsizinginner",a],[z([],[Qe(t,r,n)])]);return{type:"elem",elem:i}},sa=function(t,r,n){var a=wt["Size4-Regular"][t.charCodeAt(0)]?wt["Size4-Regular"][t.charCodeAt(0)][4]:wt["Size1-Regular"][t.charCodeAt(0)][4],i=new Zt("inner",q4(t,Math.round(1e3*r))),u=new zt([i],{width:V(a),height:V(r),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),s=er([],[u],n);return s.height=r,s.style.height=V(r),s.style.width=V(a),{type:"elem",elem:s}},Ya=.008,Vn={type:"kern",size:-1*Ya},R3=new Set(["|","\\lvert","\\rvert","\\vert"]),M3=new Set(["\\|","\\lVert","\\rVert","\\Vert"]),vo=function(t,r,n,a,i,u){var s,l,c,d,f="",g=0;s=c=d=t,l=null;var p="Size1-Regular";t==="\\uparrow"?c=d="⏐":t==="\\Uparrow"?c=d="‖":t==="\\downarrow"?s=c="⏐":t==="\\Downarrow"?s=c="‖":t==="\\updownarrow"?(s="\\uparrow",c="⏐",d="\\downarrow"):t==="\\Updownarrow"?(s="\\Uparrow",c="‖",d="\\Downarrow"):R3.has(t)?(c="∣",f="vert",g=333):M3.has(t)?(c="∥",f="doublevert",g=556):t==="["||t==="\\lbrack"?(s="⎡",c="⎢",d="⎣",p="Size4-Regular",f="lbrack",g=667):t==="]"||t==="\\rbrack"?(s="⎤",c="⎥",d="⎦",p="Size4-Regular",f="rbrack",g=667):t==="\\lfloor"||t==="⌊"?(c=s="⎢",d="⎣",p="Size4-Regular",f="lfloor",g=667):t==="\\lceil"||t==="⌈"?(s="⎡",c=d="⎢",p="Size4-Regular",f="lceil",g=667):t==="\\rfloor"||t==="⌋"?(c=s="⎥",d="⎦",p="Size4-Regular",f="rfloor",g=667):t==="\\rceil"||t==="⌉"?(s="⎤",c=d="⎥",p="Size4-Regular",f="rceil",g=667):t==="("||t==="\\lparen"?(s="⎛",c="⎜",d="⎝",p="Size4-Regular",f="lparen",g=875):t===")"||t==="\\rparen"?(s="⎞",c="⎟",d="⎠",p="Size4-Regular",f="rparen",g=875):t==="\\{"||t==="\\lbrace"?(s="⎧",l="⎨",d="⎩",c="⎪",p="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(s="⎫",l="⎬",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lgroup"||t==="⟮"?(s="⎧",d="⎩",c="⎪",p="Size4-Regular"):t==="\\rgroup"||t==="⟯"?(s="⎫",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lmoustache"||t==="⎰"?(s="⎧",d="⎭",c="⎪",p="Size4-Regular"):(t==="\\rmoustache"||t==="⎱")&&(s="⎫",d="⎩",c="⎪",p="Size4-Regular");var x=tn(s,p,i),S=x.height+x.depth,D=tn(c,p,i),_=D.height+D.depth,N=tn(d,p,i),M=N.height+N.depth,W=0,j=1;if(l!==null){var L=tn(l,p,i);W=L.height+L.depth,j=2}var ee=S+M+W,re=Math.max(0,Math.ceil((r-ee)/(j*_))),K=ee+re*j*_,R=a.fontMetrics().axisHeight;n&&(R*=a.sizeMultiplier);var J=K/2-R,Q=[];if(f.length>0){var be=K-S-M,ne=Math.round(K*1e3),X=Y4(f,Math.round(be*1e3)),me=new Zt(f,X),ke=V(g/1e3),ze=V(ne/1e3),at=new zt([me],{width:ke,height:ze,viewBox:"0 0 "+g+" "+ne}),w=er([],[at],a);w.height=ne/1e3,w.style.width=ke,w.style.height=ze,Q.push({type:"elem",elem:w})}else{if(Q.push(ua(d,p,i)),Q.push(Vn),l===null){var Oe=K-S-M+2*Ya;Q.push(sa(c,Oe,a))}else{var Xe=(K-S-M-W)/2+2*Ya;Q.push(sa(c,Xe,a)),Q.push(Vn),Q.push(ua(l,p,i)),Q.push(Vn),Q.push(sa(c,Xe,a))}Q.push(Vn),Q.push(ua(s,p,i))}var C=a.havingBaseStyle(oe.TEXT),Ye=Ee({positionType:"bottom",positionData:J,children:Q});return ki(z(["delimsizing","mult"],[Ye],C),oe.TEXT,a,u)},la=80,oa=.08,ca=function(t,r,n,a,i){var u=U4(t,a,n),s=new Zt(t,u),l=new zt([s],{width:"400em",height:V(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return er(["hide-tail"],[l],i)},P3=function(t,r){var n=r.havingBaseSizing(),a=Co("\\surd",t*n.sizeMultiplier,wo,n),i=n.sizeMultiplier,u=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),s,l,c,d,f;return a.type==="small"?(d=1e3+1e3*u+la,t<1?i=1:t<1.4&&(i=.7),l=(1+u+oa)/i,c=(1+u)/i,s=ca("sqrtMain",l,d,u,r),s.style.minWidth="0.853em",f=.833/i):a.type==="large"?(d=(1e3+la)*sn[a.size],c=(sn[a.size]+u)/i,l=(sn[a.size]+u+oa)/i,s=ca("sqrtSize"+a.size,l,d,u,r),s.style.minWidth="1.02em",f=1/i):(l=t+u+oa,c=t+u,d=Math.floor(1e3*t+u)+la,s=ca("sqrtTall",l,d,u,r),s.style.minWidth="0.742em",f=1.056),s.height=c,s.style.height=V(l),{span:s,advanceWidth:f,ruleWidth:(r.fontMetrics().sqrtRuleThickness+u)*i}},Ao=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"]),B3=new Set(["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"]),ko=new Set(["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),sn=[0,1.2,1.8,2.4,3],So=function(t,r,n,a,i){if(t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle"),Ao.has(t)||ko.has(t))return yo(t,r,!1,n,a,i);if(B3.has(t))return vo(t,sn[r],!1,n,a,i);throw new Y("Illegal delimiter: '"+t+"'")},F3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],H3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"stack"}],wo=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],z3=function(t){if(t.type==="small")return"Main-Regular";if(t.type==="large")return"Size"+t.size+"-Regular";if(t.type==="stack")return"Size4-Regular";var r=t.type;throw new Error("Add support for delim type '"+r+"' here.")},Co=function(t,r,n,a){for(var i=Math.min(2,3-a.style.size),u=i;ur)return s}return n[n.length-1]},Ga=function(t,r,n,a,i,u){t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle");var s;ko.has(t)?s=F3:Ao.has(t)?s=wo:s=H3;var l=Co(t,r,s,a);return l.type==="small"?O3(t,l.style,n,a,i,u):l.type==="large"?yo(t,l.size,n,a,i,u):vo(t,r,n,a,i,u)},ha=function(t,r,n,a,i,u){var s=a.fontMetrics().axisHeight*a.sizeMultiplier,l=901,c=5/a.fontMetrics().ptPerEm,d=Math.max(r-s,n+s),f=Math.max(d/500*l,2*d-c);return Ga(t,f,!0,a,i,u)},Qu={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},U3=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."]);function Ku(e){return"isMiddle"in e}function w0(e,t){var r=k0(e);if(r&&U3.has(r.text))return r;throw r?new Y("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e):new Y("Invalid delimiter type '"+e.type+"'",e)}Z({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=w0(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Qu[e.funcName].size,mclass:Qu[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>e.delim==="."?z([e.mclass]):So(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];e.delim!=="."&&t.push(bt(e.delim,e.mode));var r=new G("mo",t);e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(sn[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}});function Ju(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Z({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new Y("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:w0(t[0],e).text,color:r}}});Z({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=ce(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Ju(e);for(var r=He(e.body,t,!0,["mopen","mclose"]),n=0,a=0,i=!1,u=0;u{Ju(e);var r=dt(e.body,t);if(e.left!=="."){var n=new G("mo",[bt(e.left,e.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(e.right!=="."){var a=new G("mo",[bt(e.right,e.mode)]);a.setAttribute("fence","true"),e.rightColor&&a.setAttribute("mathcolor",e.rightColor),r.push(a)}return yi(r)}});Z({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e);if(!e.parser.leftrightDepth)throw new Y("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;return e.delim==="."?r=bn(t,[]):(r=So(e.delim,1,t,e.mode,[]),r.isMiddle={delim:e.delim,options:t}),r},mathmlBuilder:(e,t)=>{var r=e.delim==="\\vert"||e.delim==="|"?bt("|","text"):bt(e.delim,e.mode),n=new G("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});var C0=(e,t)=>{var r=Lr(Te(e.body,t),t),n=e.label.slice(1),a=t.sizeMultiplier,i,u,s=qt(e.body);if(n==="sout")i=z(["stretchy","sout"]),i.height=t.fontMetrics().defaultRuleThickness/a,u=-.5*t.fontMetrics().xHeight;else if(n==="phase"){var l=Ie({number:.6,unit:"pt"},t),c=Ie({number:.35,unit:"ex"},t),d=t.havingBaseSizing();a=a/d.sizeMultiplier;var f=r.height+r.depth+l+c;r.style.paddingLeft=V(f/2+l);var g=Math.floor(1e3*f*a),p=H4(g),x=new zt([new Zt("phase",p)],{width:"400em",height:V(g/1e3),viewBox:"0 0 400000 "+g,preserveAspectRatio:"xMinYMin slice"});i=er(["hide-tail"],[x],t),i.style.height=V(f),u=r.depth+l+c}else{/cancel/.test(n)?s||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var S,D,_=0;/box/.test(n)?(_=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),S=t.fontMetrics().fboxsep+(n==="colorbox"?0:_),D=S):n==="angl"?(_=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),S=4*_,D=Math.max(0,.25-r.depth)):(S=s?.2:0,D=S),i=v3(r,n,S,D,t),/fbox|boxed|fcolorbox/.test(n)?(i.style.borderStyle="solid",i.style.borderWidth=V(_)):n==="angl"&&_!==.049&&(i.style.borderTopWidth=V(_),i.style.borderRightWidth=V(_)),u=r.depth+D,e.backgroundColor&&(i.style.backgroundColor=e.backgroundColor,e.borderColor&&(i.style.borderColor=e.borderColor))}var N;if(e.backgroundColor)N=Ee({positionType:"individualShift",children:[{type:"elem",elem:i,shift:u},{type:"elem",elem:r,shift:0}]});else{var M=/cancel|phase/.test(n)?["svg-align"]:[];N=Ee({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:i,shift:u,wrapperClasses:M}]})}return/cancel/.test(n)&&(N.height=r.height,N.depth=r.depth),/cancel/.test(n)&&!s?z(["mord","cancel-lap"],[N],t):z(["mord"],[N],t)},_0=(e,t)=>{var r,n=new G(e.label.includes("colorbox")?"mpadded":"menclose",[Ae(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+V(a)+" solid "+e.borderColor)}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};Z({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:u}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=ce(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:u,borderColor:i,body:s}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}});Z({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\sout"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e;r.mode==="math"&&r.settings.reportNonstrict("mathVsSout","LaTeX's \\sout works only in text mode");var a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var _o={};function Nt(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l{var t=e.parser.settings;if(!t.displayMode)throw new Y("{"+e.envName+"} can be used only in display mode.")},q3=new Set(["gather","gather*"]);function Si(e){if(!e.includes("ed"))return!e.includes("*")}function ar(e,t,r){var{hskipBeforeAndAfter:n,addJot:a,cols:i,arraystretch:u,colSeparationType:s,autoTag:l,singleRow:c,emptySingleRow:d,maxNumCols:f,leqno:g}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!u){var p=e.gullet.expandMacroAsText("\\arraystretch");if(p==null)u=1;else if(u=parseFloat(p),!u||u<0)throw new Y("Invalid \\arraystretch: "+p)}e.gullet.beginGroup();var x=[],S=[x],D=[],_=[],N=l!=null?[]:void 0;function M(){l&&e.gullet.macros.set("\\@eqnsw","1",!0)}function W(){N&&(e.gullet.macros.get("\\df@tag")?(N.push(e.subparse([new ot("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):N.push(!!l&&e.gullet.macros.get("\\@eqnsw")==="1"))}for(M(),_.push(Zu(e));;){var j=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup();var L={type:"ordgroup",mode:e.mode,body:j};r&&(L={type:"styling",mode:e.mode,style:r,resetFont:!0,body:[L]}),x.push(L);var ee=e.fetch().text;if(ee==="&"){if(f&&x.length===f){if(c||s)throw new Y("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else if(ee==="\\end"){W(),x.length===1&&L.type==="styling"&&L.body.length===1&&L.body[0].type==="ordgroup"&&L.body[0].body.length===0&&(S.length>1||!d)&&S.pop(),_.length0&&(M+=.25),c.push({pos:M,isDashed:ue[he]})}for(W(u[0]),n=0;n0&&(J+=N,eeue))for(n=0;n=s)){var it=void 0;if(a>0||t.hskipBeforeAndAfter){var Lt,ir;it=(Lt=(ir=C)==null?void 0:ir.pregap)!=null?Lt:g,it!==0&&(X=z(["arraycolsep"],[]),X.style.width=V(it),ne.push(X))}var _n=[];for(n=0;n0){for(var R0=Or("hline",r,d),M0=Or("hdashline",r,d),Vr=[{type:"elem",elem:ur,shift:0}];c.length>0;){var Ln=c.pop(),Rn=Ln.pos-Q;Ln.isDashed?Vr.push({type:"elem",elem:M0,shift:Rn}):Vr.push({type:"elem",elem:R0,shift:Rn})}ur=Ee({positionType:"individualShift",children:Vr})}if(ke.length===0)return z(["mord"],[ur],r);var B=Ee({positionType:"individualShift",children:ke}),$=z(["tag"],[B],r);return Gt([ur,$])},Y3={c:"center ",l:"left ",r:"right "},Ot=function(t,r){for(var n=[],a=new G("mtd",[],["mtr-glue"]),i=new G("mtd",[],["mml-eqn-num"]),u=0;u0){var x=t.cols,S="",D=!1,_=0,N=x.length;x[0].type==="separator"&&(g+="top ",_=1),x[x.length-1].type==="separator"&&(g+="bottom ",N-=1);for(var M=_;M0?"left ":"",g+=K[K.length-1].length>0?"right ":"";for(var R=1;R0&&p&&(D=1),n[x]={type:"align",align:S,pregap:D,postgap:0}}return u.colSeparationType=p?"align":"alignat",u};Nt({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(u){var s=A0(u),l=s.text;if("lcr".includes(l))return{type:"align",align:l};if(l==="|")return{type:"separator",separator:"|"};if(l===":")return{type:"separator",separator:":"};throw new Y("Unknown column alignment: "+l,u)}),i={cols:a,hskipBeforeAndAfter:!0,maxNumCols:a.length};return ar(e.parser,i,wi(e.envName))},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(e.envName.charAt(e.envName.length-1)==="*"){var a=e.parser;if(a.consumeSpaces(),a.fetch().text==="["){if(a.consume(),a.consumeSpaces(),r=a.fetch().text,!"lcr".includes(r))throw new Y("Expected l or c or r",a.nextToken);a.consume(),a.consumeSpaces(),a.expect("]"),a.consume(),n.cols=[{type:"align",align:r}]}}var i=ar(e.parser,n,wi(e.envName)),u=Math.max(0,...i.body.map(s=>s.length));return i.cols=new Array(u).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[i],left:t[0],right:t[1],rightColor:void 0}:i},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t={arraystretch:.5},r=ar(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(s){var l=A0(s),c=l.text;if("lc".includes(c))return{type:"align",align:c};throw new Y("Unknown column alignment: "+c,s)});if(a.length>1)throw new Y("{subarray} can contain only one column");var i={cols:a,hskipBeforeAndAfter:!1,arraystretch:.5},u=ar(e.parser,i,"script");if(u.body.length>0&&u.body[0].length>1)throw new Y("{subarray} can contain only one column");return u},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ar(e.parser,t,wi(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:e.envName.includes("r")?".":"\\{",right:e.envName.includes("r")?"\\}":".",rightColor:void 0}},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){q3.has(e.envName)&&I0(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Si(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){I0(e);var t={autoTag:Si(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["CD"],props:{numArgs:0},handler(e){return I0(e),N3(e.parser)},htmlBuilder:Dt,mathmlBuilder:Ot});E("\\nonumber","\\gdef\\@eqnsw{0}");E("\\notag","\\nonumber");Z({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new Y(e.funcName+" valid only within array environment")}});var es=_o;Z({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];if(a.type!=="ordgroup")throw new Y("Invalid environment name",a);for(var i="",u=0;u{var r=e.font,n=t.withFont(r);return Te(e.body,n)},Oo=(e,t)=>{var r=e.font,n=t.withFont(r);return Ae(e.body,n)},ts={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};Z({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=u0(t[0]),i=n;return i in ts&&(i=ts[i]),{type:"font",mode:r.mode,font:i.slice(1),body:a}},htmlBuilder:Do,mathmlBuilder:Oo});Z({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:S0(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:qt(n)}}});Z({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n,breakOnTokenText:a}=e,{mode:i}=r,u=r.parseExpression(!0,a);return{type:"font",mode:i,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:u}}},htmlBuilder:Do,mathmlBuilder:Oo});var G3=(e,t)=>{var r=t.style,n=r.fracNum(),a=r.fracDen(),i;i=t.havingStyle(n);var u=Te(e.numer,i,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;u.height=u.height0?x=3*g:x=7*g,S=t.fontMetrics().denom1):(f>0?(p=t.fontMetrics().num2,x=g):(p=t.fontMetrics().num3,x=3*g),S=t.fontMetrics().denom2);var D;if(d){var N=t.fontMetrics().axisHeight;p-u.depth-(N+.5*f){var r=new G("mfrac",[Ae(e.numer,t),Ae(e.denom,t)]);if(!e.hasBarLine)r.setAttribute("linethickness","0px");else if(e.barSize){var n=Ie(e.barSize,t);r.setAttribute("linethickness",V(n))}if(e.leftDelim!=null||e.rightDelim!=null){var a=[];if(e.leftDelim!=null){var i=new G("mo",[new Me(e.leftDelim.replace("\\",""))]);i.setAttribute("fence","true"),a.push(i)}if(a.push(r),e.rightDelim!=null){var u=new G("mo",[new Me(e.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),a.push(u)}return yi(a)}return r},Lo=(e,t)=>{if(!t)return e;var r={type:"styling",mode:e.mode,style:t,body:[e]};return r};Z({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=t[1],u,s=null,l=null;switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":u=!0;break;case"\\\\atopfrac":u=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":u=!1,s="(",l=")";break;case"\\\\bracefrac":u=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":u=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}var c=n==="\\cfrac",d=null;return c||n.startsWith("\\d")?d="display":n.startsWith("\\t")&&(d="text"),Lo({type:"genfrac",mode:r.mode,numer:a,denom:i,continued:c,hasBarLine:u,leftDelim:s,rightDelim:l,barSize:null},d)},htmlBuilder:G3,mathmlBuilder:V3});Z({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var{parser:t,funcName:r,token:n}=e,a;switch(r){case"\\over":a="\\frac";break;case"\\choose":a="\\binom";break;case"\\atop":a="\\\\atopfrac";break;case"\\brace":a="\\\\bracefrac";break;case"\\brack":a="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:t.mode,replaceWith:a,token:n}}});var rs=["display","text","script","scriptscript"],ns=function(t){var r=null;return t.length>0&&(r=t,r=r==="."?null:r),r};Z({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var{parser:r}=e,n=t[4],a=t[5],i=u0(t[0]),u=i.type==="atom"&&i.family==="open"?ns(i.text):null,s=u0(t[1]),l=s.type==="atom"&&s.family==="close"?ns(s.text):null,c=ce(t[2],"size"),d,f=null;c.isBlank?d=!0:(f=c.value,d=f.number>0);var g=null,p=t[3];if(p.type==="ordgroup"){if(p.body.length>0){var x=ce(p.body[0],"textord");g=rs[Number(x.text)]}}else p=ce(p,"textord"),g=rs[Number(p.text)];return Lo({type:"genfrac",mode:r.mode,numer:n,denom:a,continued:!1,hasBarLine:d,barSize:f,leftDelim:u,rightDelim:l},g)}});Z({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:n,token:a}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:ce(t[0],"size").value,token:a}}});Z({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=ce(t[1],"infix").size;if(!i)throw new Error("\\\\abovefrac expected size, but got "+String(i));var u=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:u,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null}}});var Ro=(e,t)=>{var r=t.style,n,a;e.type==="supsub"?(n=e.sup?Te(e.sup,t.havingStyle(r.sup()),t):Te(e.sub,t.havingStyle(r.sub()),t),a=ce(e.base,"horizBrace")):a=ce(e,"horizBrace");var i=Te(a.base,t.havingBaseStyle(oe.DISPLAY)),u=v0(a,t),s;if(a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:u,wrapperClasses:["svg-align"]}]}):s=Ee({positionType:"bottom",positionData:i.depth+.1+u.height,children:[{type:"elem",elem:u,wrapperClasses:["svg-align"]},{type:"kern",size:.1},{type:"elem",elem:i}]}),n){var l=z(["minner",a.isOver?"mover":"munder"],[s],t);a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:n}]}):s=Ee({positionType:"bottom",positionData:l.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:l}]})}return z(["minner",a.isOver?"mover":"munder"],[s],t)},j3=(e,t)=>{var r=y0(e.label);return new G(e.isOver?"mover":"munder",[Ae(e.base,t),r])};Z({type:"horizBrace",names:["\\overbrace","\\underbrace","\\overbracket","\\underbracket"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:n.includes("\\over"),base:t[0]}},htmlBuilder:Ro,mathmlBuilder:j3});Z({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[1],a=ce(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:Re(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=He(e.body,t,!1);return i3(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=tr(e.body,t);return r instanceof G||(r=new G("mrow",[r])),r.setAttribute("href",e.href),r}});Z({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=ce(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i{var{parser:r,funcName:n,token:a}=e,i=ce(t[0],"raw").string,u=t[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var s,l={};switch(n){case"\\htmlClass":l.class=i,s={command:"\\htmlClass",class:i};break;case"\\htmlId":l.id=i,s={command:"\\htmlId",id:i};break;case"\\htmlStyle":l.style=i,s={command:"\\htmlStyle",style:i};break;case"\\htmlData":{for(var c=i.split(","),d=0;d{var r=He(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));var a=z(n,r,t);for(var i in e.attributes)i!=="class"&&e.attributes.hasOwnProperty(i)&&a.setAttribute(i,e.attributes[i]);return a},mathmlBuilder:(e,t)=>tr(e.body,t)});Z({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInArgument:!0,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Re(t[0]),mathml:Re(t[1])}},htmlBuilder:(e,t)=>{var r=He(e.html,t,!1);return Gt(r)},mathmlBuilder:(e,t)=>tr(e.mathml,t)});var da=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new Y("Invalid size: '"+t+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!Ql(n))throw new Y("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n};Z({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:n}=e,a={number:0,unit:"em"},i={number:.9,unit:"em"},u={number:0,unit:"em"},s="";if(r[0])for(var l=ce(r[0],"raw").string,c=l.split(","),d=0;d{var r=Ie(e.height,t),n=0;e.totalheight.number>0&&(n=Ie(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=Ie(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var u=new W4(e.src,e.alt,i);return u.height=r,u.depth=n,u},mathmlBuilder:(e,t)=>{var r=new G("mglyph",[]);r.setAttribute("alt",e.alt);var n=Ie(e.height,t),a=0;if(e.totalheight.number>0&&(a=Ie(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=Ie(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}});Z({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=ce(t[0],"size");if(r.settings.strict){var i=n[1]==="m",u=a.value.unit==="mu";i?(u||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+a.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):u&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder(e,t){return ro(e.dimension,t)},mathmlBuilder(e,t){var r=Ie(e.dimension,t);return new lo(r)}});Z({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:(e,t)=>{var r;e.alignment==="clap"?(r=z([],[Te(e.body,t)]),r=z(["inner"],[r],t)):r=z(["inner"],[Te(e.body,t)]);var n=z(["fix"],[]),a=z([e.alignment],[r,n],t),i=z(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=z(["thinbox"],[a],t),z(["mord","vbox"],[a],t)},mathmlBuilder:(e,t)=>{var r=new G("mpadded",[Ae(e.body,t)]);if(e.alignment!=="rlap"){var n=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}});Z({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:n}=e,a=n.mode;n.switchMode("math");var i=r==="\\("?"\\)":"$",u=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",resetFont:!0,body:u}}});Z({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new Y("Mismatched "+e.funcName)}});var as=(e,t)=>{switch(t.style.size){case oe.DISPLAY.size:return e.display;case oe.TEXT.size:return e.text;case oe.SCRIPT.size:return e.script;case oe.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};Z({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Re(t[0]),text:Re(t[1]),script:Re(t[2]),scriptscript:Re(t[3])}},htmlBuilder:(e,t)=>{var r=as(e,t),n=He(r,t,!1);return Gt(n)},mathmlBuilder:(e,t)=>{var r=as(e,t);return tr(r,t)}});var Mo=(e,t,r,n,a,i,u)=>{e=z([],[e]);var s=r&&qt(r),l,c;if(t){var d=Te(t,n.havingStyle(a.sup()),n);c={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-d.depth)}}if(r){var f=Te(r,n.havingStyle(a.sub()),n);l={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-f.height)}}var g;if(c&&l){var p=n.fontMetrics().bigOpSpacing5+l.elem.height+l.elem.depth+l.kern+e.depth+u;g=Ee({positionType:"bottom",positionData:p,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else if(l){var x=e.height-u;g=Ee({positionType:"top",positionData:x,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e}]})}else if(c){var S=e.depth+u;g=Ee({positionType:"bottom",positionData:S,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else return e;var D=[g];if(l&&i!==0&&!s){var _=z(["mspace"],[],n);_.style.marginRight=V(i),D.unshift(_)}return z(["mop","op-limits"],D,n)},Po=new Set(["\\smallint"]),zr=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"op"),a=!0):i=ce(e,"op");var u=t.style,s=!1;u.size===oe.DISPLAY.size&&i.symbol&&!Po.has(i.name)&&(s=!0);var l,c;if(i.symbol){var d=s?"Size2-Regular":"Size1-Regular",f="";if((i.name==="\\oiint"||i.name==="\\oiiint")&&(f=i.name.slice(1),i.name=f==="oiint"?"\\iint":"\\iiint"),l=Qe(i.name,d,"math",t,["mop","op-symbol",s?"large-op":"small-op"]),c=l.italic,f.length>0){var g=ao(f+"Size"+(s?"2":"1"),t);l=Ee({positionType:"individualShift",children:[{type:"elem",elem:l,shift:0},{type:"elem",elem:g,shift:s?.08:0}]}),i.name="\\"+f,l.classes.unshift("mop"),l.italic=c}}else if(i.body){var p=He(i.body,t,!0);p.length===1&&p[0]instanceof ct?(l=p[0],l.classes[0]="mop"):l=z(["mop"],p,t)}else{for(var x=[],S=1;S{var r;if(e.symbol)r=new G("mo",[bt(e.name,e.mode)]),Po.has(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new G("mo",dt(e.body,t));else{r=new G("mi",[new Me(e.name.slice(1))]);var n=new G("mo",[bt("⁡","text")]);e.parentIsSupSub?r=new G("mrow",[r,n]):r=so([r,n])}return r},W3={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Z({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=n;return a.length===1&&(a=W3[a]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Re(n)}},htmlBuilder:zr,mathmlBuilder:Sn});var X3={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Z({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0,allowedInArgument:!0},handler(e){var{parser:t,funcName:r}=e,n=r;return n.length===1&&(n=X3[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:zr,mathmlBuilder:Sn});var Bo=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"operatorname"),a=!0):i=ce(e,"operatorname");var u;if(i.body.length>0){for(var s=i.body.map(f=>{var g="text"in f?f.text:void 0;return typeof g=="string"?{type:"textord",mode:f.mode,text:g}:f}),l=He(s,t.withFont("mathrm"),!0),c=0;c{for(var r=dt(e.body,t.withFont("mathrm")),n=!0,a=0;ad.toText()).join("");r=[new Me(s)]}var l=new G("mi",r);l.setAttribute("mathvariant","normal");var c=new G("mo",[bt("⁡","text")]);return e.parentIsSupSub?new G("mrow",[l,c]):so([l,c])};Z({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"operatorname",mode:r.mode,body:Re(a),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:Bo,mathmlBuilder:$3});E("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");br({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Gt(He(e.body,t,!1)):z(["mord"],He(e.body,t,!0),t)},mathmlBuilder(e,t){return tr(e.body,t,!0)}});Z({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle()),n=Or("overline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*a},{type:"elem",elem:n},{type:"kern",size:a}]});return z(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("mover",[Ae(e.body,t),r]);return n.setAttribute("accent","true"),n}});Z({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"phantom",mode:r.mode,body:Re(n)}},htmlBuilder:(e,t)=>{var r=He(e.body,t.withPhantom(),!1);return Gt(r)},mathmlBuilder:(e,t)=>{var r=dt(e.body,t);return new G("mphantom",r)}});E("\\hphantom","\\smash{\\phantom{#1}}");Z({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{var r=z(["inner"],[Te(e.body,t.withPhantom())]),n=z(["fix"],[]);return z(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{var r=dt(Re(e.body),t),n=new G("mphantom",r),a=new G("mpadded",[n]);return a.setAttribute("width","0px"),a}});Z({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,n=ce(t[0],"size").value,a=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:a}},htmlBuilder(e,t){var r=Te(e.body,t),n=Ie(e.dy,t);return Ee({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}});Z({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}});Z({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){var{parser:n}=e,a=r[0],i=ce(t[0],"size"),u=ce(t[1],"size");return{type:"rule",mode:n.mode,shift:a&&ce(a,"size").value,width:i.value,height:u.value}},htmlBuilder(e,t){var r=z(["mord","rule"],[],t),n=Ie(e.width,t),a=Ie(e.height,t),i=e.shift?Ie(e.shift,t):0;return r.style.borderRightWidth=V(n),r.style.borderTopWidth=V(a),r.style.bottom=V(i),r.width=n,r.height=a+i,r.depth=-i,r.maxFontSize=a*1.125*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=Ie(e.width,t),n=Ie(e.height,t),a=e.shift?Ie(e.shift,t):0,i=t.color&&t.getColor()||"black",u=new G("mspace");u.setAttribute("mathbackground",i),u.setAttribute("width",V(r)),u.setAttribute("height",V(n));var s=new G("mpadded",[u]);return a>=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});function Fo(e,t,r){for(var n=He(e,t,!1),a=t.sizeMultiplier/r.sizeMultiplier,i=0;i{var r=t.havingSize(e.size);return Fo(e.body,r,t)};Z({type:"sizing",names:is,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:is.indexOf(n)+1,body:i}},htmlBuilder:Q3,mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),n=dt(e.body,r),a=new G("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}});Z({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:n}=e,a=!1,i=!1,u=r[0]&&ce(r[0],"ordgroup");if(u)for(var s,l=0;l{var r=z([],[Te(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0),e.smashDepth&&(r.depth=0),e.smashHeight&&e.smashDepth)return z(["mord","smash"],[r],t);if(r.children)for(var n=0;n{var r=new G("mpadded",[Ae(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}});Z({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n}=e,a=r[0],i=t[0];return{type:"sqrt",mode:n.mode,body:i,index:a}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle());r.height===0&&(r.height=t.fontMetrics().xHeight),r=Lr(r,t);var n=t.fontMetrics(),a=n.defaultRuleThickness,i=a;t.style.idr.height+r.depth+u&&(u=(u+f-r.height-r.depth)/2);var g=l.height-r.height-u-c;r.style.paddingLeft=V(d);var p=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+g)},{type:"elem",elem:l},{type:"kern",size:c}]});if(e.index){var x=t.havingStyle(oe.SCRIPTSCRIPT),S=Te(e.index,x,t),D=.6*(p.height-p.depth),_=Ee({positionType:"shift",positionData:-D,children:[{type:"elem",elem:S}]}),N=z(["root"],[_]);return z(["mord","sqrt"],[N,p],t)}else return z(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:n}=e;return n?new G("mroot",[Ae(r,t),Ae(n,t)]):new G("msqrt",[Ae(r,t)])}});var Va={display:oe.DISPLAY,text:oe.TEXT,script:oe.SCRIPT,scriptscript:oe.SCRIPTSCRIPT};function K3(e){return e in Va}Z({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!0,r),u=n.slice(1,n.length-5);if(!K3(u))throw new Error("Unknown style: "+u);return{type:"styling",mode:a.mode,style:u,body:i}},htmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);return e.resetFont&&(n=n.withFont("")),Fo(e.body,n,t)},mathmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);e.resetFont&&(n=n.withFont(""));var a=dt(e.body,n),i=new G("mstyle",a),u={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},s=u[e.style];return i.setAttribute("scriptlevel",s[0]),i.setAttribute("displaystyle",s[1]),i}});var J3=function(t,r){var n=t.base;if(n)if(n.type==="op"){var a=n.limits&&(r.style.size===oe.DISPLAY.size||n.alwaysHandleSupSub);return a?zr:null}else if(n.type==="operatorname"){var i=n.alwaysHandleSupSub&&(r.style.size===oe.DISPLAY.size||n.limits);return i?Bo:null}else{if(n.type==="accent")return qt(n.base)?Ai:null;if(n.type==="horizBrace"){var u=!t.sub;return u===n.isOver?Ro:null}else return null}else return null};br({type:"supsub",htmlBuilder(e,t){var r=J3(e,t);if(r)return r(e,t);var{base:n,sup:a,sub:i}=e,u=Te(n,t),s,l,c=t.fontMetrics(),d=0,f=0,g=n&&qt(n);if(a){var p=t.havingStyle(t.style.sup());s=Te(a,p,t),g||(d=u.height-p.fontMetrics().supDrop*p.sizeMultiplier/t.sizeMultiplier)}if(i){var x=t.havingStyle(t.style.sub());l=Te(i,x,t),g||(f=u.depth+x.fontMetrics().subDrop*x.sizeMultiplier/t.sizeMultiplier)}var S;t.style===oe.DISPLAY?S=c.sup1:t.style.cramped?S=c.sup3:S=c.sup2;var D=t.sizeMultiplier,_=V(.5/c.ptPerEm/D),N=null;if(l){var M=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");if(u instanceof ct||M){var W;N=V(-((W=u.italic)!=null?W:0))}}var j;if(s&&l){d=Math.max(d,S,s.depth+.25*c.xHeight),f=Math.max(f,c.sub2);var L=c.defaultRuleThickness,ee=4*L;if(d-s.depth-(l.height-f)0&&(d+=re,f-=re)}var K=[{type:"elem",elem:l,shift:f,marginRight:_,marginLeft:N},{type:"elem",elem:s,shift:-d,marginRight:_}];j=Ee({positionType:"individualShift",children:K})}else if(l){f=Math.max(f,c.sub1,l.height-.8*c.xHeight);var R=[{type:"elem",elem:l,marginLeft:N,marginRight:_}];j=Ee({positionType:"shift",positionData:f,children:R})}else if(s)d=Math.max(d,S,s.depth+.25*c.xHeight),j=Ee({positionType:"shift",positionData:-d,children:[{type:"elem",elem:s,marginRight:_}]});else throw new Error("supsub must have either sup or sub.");var J=za(u,"right")||"mord";return z([J],[u,z(["msupsub"],[j])],t)},mathmlBuilder(e,t){var r=!1,n,a;e.base&&e.base.type==="horizBrace"&&(a=!!e.sup,a===e.base.isOver&&(r=!0,n=e.base.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var i=[Ae(e.base,t)];e.sub&&i.push(Ae(e.sub,t)),e.sup&&i.push(Ae(e.sup,t));var u;if(r)u=n?"mover":"munder";else if(e.sub)if(e.sup){var c=e.base;c&&c.type==="op"&&c.limits&&t.style===oe.DISPLAY||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(t.style===oe.DISPLAY||c.limits)?u="munderover":u="msubsup"}else{var l=e.base;l&&l.type==="op"&&l.limits&&(t.style===oe.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||t.style===oe.DISPLAY)?u="munder":u="msub"}else{var s=e.base;s&&s.type==="op"&&s.limits&&(t.style===oe.DISPLAY||s.alwaysHandleSupSub)||s&&s.type==="operatorname"&&s.alwaysHandleSupSub&&(s.limits||t.style===oe.DISPLAY)?u="mover":u="msup"}return new G(u,i)}});br({type:"atom",htmlBuilder(e,t){return Ti(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){var r=new G("mo",[bt(e.text,e.mode)]);if(e.family==="bin"){var n=vi(e,t);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});var Ho={mi:"italic",mn:"normal",mtext:"normal"};br({type:"mathord",htmlBuilder(e,t){return x0(e,t,"mathord")},mathmlBuilder(e,t){var r=new G("mi",[bt(e.text,e.mode,t)]),n=vi(e,t)||"italic";return n!==Ho[r.type]&&r.setAttribute("mathvariant",n),r}});br({type:"textord",htmlBuilder(e,t){return x0(e,t,"textord")},mathmlBuilder(e,t){var r=bt(e.text,e.mode,t),n=vi(e,t)||"normal",a;return e.mode==="text"?a=new G("mtext",[r]):/[0-9]/.test(e.text)?a=new G("mn",[r]):e.text==="\\prime"?a=new G("mo",[r]):a=new G("mi",[r]),n!==Ho[a.type]&&a.setAttribute("mathvariant",n),a}});var fa={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ma={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};br({type:"spacing",htmlBuilder(e,t){if(ma.hasOwnProperty(e.text)){var r=ma[e.text].className||"";if(e.mode==="text"){var n=x0(e,t,"textord");return n.classes.push(r),n}else return z(["mspace",r],[Ti(e.text,e.mode,t)],t)}else{if(fa.hasOwnProperty(e.text))return z(["mspace",fa[e.text]],[],t);throw new Y('Unknown type of space "'+e.text+'"')}},mathmlBuilder(e,t){var r;if(ma.hasOwnProperty(e.text))r=new G("mtext",[new Me(" ")]);else{if(fa.hasOwnProperty(e.text))return new G("mspace");throw new Y('Unknown type of space "'+e.text+'"')}return r}});var us=()=>{var e=new G("mtd",[]);return e.setAttribute("width","50%"),e};br({type:"tag",mathmlBuilder(e,t){var r=new G("mtable",[new G("mtr",[us(),new G("mtd",[tr(e.body,t)]),us(),new G("mtd",[tr(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var ss={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ls={"\\textbf":"textbf","\\textmd":"textmd"},Z3={"\\textit":"textit","\\textup":"textup"},os=(e,t)=>{var r=e.font;if(r){if(ss[r])return t.withTextFontFamily(ss[r]);if(ls[r])return t.withTextFontWeight(ls[r]);if(r==="\\emph")return t.fontShape==="textit"?t.withTextFontShape("textup"):t.withTextFontShape("textit")}else return t;return t.withTextFontShape(Z3[r])};Z({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"text",mode:r.mode,body:Re(a),font:n}},htmlBuilder(e,t){var r=os(e,t),n=He(e.body,r,!0);return z(["mord","text"],n,r)},mathmlBuilder(e,t){var r=os(e,t);return tr(e.body,r)}});Z({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=Or("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]});return z(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("munder",[Ae(e.body,t),r]);return n.setAttribute("accentunder","true"),n}});Z({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ee({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)],["vcenter"]);return new G("mrow",[r])}});Z({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new Y("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=cs(e),n=[],a=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"␣":" "),Qt=io,zo=`[ \r - ]`,e6="\\\\[a-zA-Z@]+",t6="\\\\[^\uD800-\uDFFF]",r6="("+e6+")"+zo+"*",n6=`\\\\( -|[ \r ]+ -?)[ \r ]*`,ja="[̀-ͯ]",a6=new RegExp(ja+"+$"),i6="("+zo+"+)|"+(n6+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(ja+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(ja+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+r6)+("|"+t6+")");class hs{constructor(t,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=r,this.tokenRegex=new RegExp(i6,"g"),this.catcodes={"%":14,"~":13}}setCatcode(t,r){this.catcodes[t]=r}lex(){var t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new ot("EOF",new rt(this,r,r));var n=this.tokenRegex.exec(t);if(n===null||n.index!==r)throw new Y("Unexpected character: '"+t[r]+"'",new ot(t[r],new rt(this,r,r+1)));var a=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[a]===14){var i=t.indexOf(` -`,this.tokenRegex.lastIndex);return i===-1?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=i+1,this.lex()}return new ot(a,new rt(this,r,this.tokenRegex.lastIndex))}}class u6{constructor(t,r){t===void 0&&(t={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=t,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Y("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var r in t)t.hasOwnProperty(r)&&(t[r]==null?delete this.current[r]:this.current[r]=t[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,r,n){if(n===void 0&&(n=!1),n){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][t]=r)}else{var i=this.undefStack[this.undefStack.length-1];i&&!i.hasOwnProperty(t)&&(i[t]=this.current[t])}r==null?delete this.current[t]:this.current[t]=r}}var s6=Io;E("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});E("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});E("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});E("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});E("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return t[0].length===1&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});E("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");E("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});var ds={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};E("\\char",function(e){var t=e.popToken(),r,n=0;if(t.text==="'")r=8,t=e.popToken();else if(t.text==='"')r=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")n=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new Y("\\char` missing argument");n=t.text.charCodeAt(0)}else r=10;if(r){if(n=ds[t.text],n==null||n>=r)throw new Y("Invalid base-"+r+" digit "+t.text);for(var a;(a=ds[e.future().text])!=null&&a{var a=e.consumeArg().tokens;if(a.length!==1)throw new Y("\\newcommand's first argument must be a macro name");var i=a[0].text,u=e.isDefined(i);if(u&&!t)throw new Y("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!u&&!r)throw new Y("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(a=e.consumeArg().tokens,a.length===1&&a[0].text==="["){for(var l="",c=e.expandNextToken();c.text!=="]"&&c.text!=="EOF";)l+=c.text,c=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new Y("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return u&&n||e.macros.set(i,{tokens:a,numArgs:s}),""};E("\\newcommand",e=>Ci(e,!1,!0,!1));E("\\renewcommand",e=>Ci(e,!0,!1,!1));E("\\providecommand",e=>Ci(e,!0,!0,!0));E("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(r=>r.text).join("")),""});E("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(r=>r.text).join("")),""});E("\\show",e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Qt[r],we.math[r],we.text[r]),""});E("\\bgroup","{");E("\\egroup","}");E("~","\\nobreakspace");E("\\lq","`");E("\\rq","'");E("\\aa","\\r a");E("\\AA","\\r A");E("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");E("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");E("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");E("ℬ","\\mathscr{B}");E("ℰ","\\mathscr{E}");E("ℱ","\\mathscr{F}");E("ℋ","\\mathscr{H}");E("ℐ","\\mathscr{I}");E("ℒ","\\mathscr{L}");E("ℳ","\\mathscr{M}");E("ℛ","\\mathscr{R}");E("ℭ","\\mathfrak{C}");E("ℌ","\\mathfrak{H}");E("ℨ","\\mathfrak{Z}");E("\\Bbbk","\\Bbb{k}");E("\\llap","\\mathllap{\\textrm{#1}}");E("\\rlap","\\mathrlap{\\textrm{#1}}");E("\\clap","\\mathclap{\\textrm{#1}}");E("\\mathstrut","\\vphantom{(}");E("\\underbar","\\underline{\\text{#1}}");E("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');E("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");E("\\ne","\\neq");E("≠","\\neq");E("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");E("∉","\\notin");E("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");E("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");E("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");E("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");E("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");E("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");E("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");E("⟂","\\perp");E("‼","\\mathclose{!\\mkern-0.8mu!}");E("∌","\\notni");E("⌜","\\ulcorner");E("⌝","\\urcorner");E("⌞","\\llcorner");E("⌟","\\lrcorner");E("©","\\copyright");E("®","\\textregistered");E("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');E("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');E("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');E("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');E("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");E("⋮","\\vdots");E("\\varGamma","\\mathit{\\Gamma}");E("\\varDelta","\\mathit{\\Delta}");E("\\varTheta","\\mathit{\\Theta}");E("\\varLambda","\\mathit{\\Lambda}");E("\\varXi","\\mathit{\\Xi}");E("\\varPi","\\mathit{\\Pi}");E("\\varSigma","\\mathit{\\Sigma}");E("\\varUpsilon","\\mathit{\\Upsilon}");E("\\varPhi","\\mathit{\\Phi}");E("\\varPsi","\\mathit{\\Psi}");E("\\varOmega","\\mathit{\\Omega}");E("\\substack","\\begin{subarray}{c}#1\\end{subarray}");E("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");E("\\boxed","\\fbox{$\\displaystyle{#1}$}");E("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");E("\\implies","\\DOTSB\\;\\Longrightarrow\\;");E("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");E("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");E("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var fs={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},l6=new Set(["bin","rel"]);E("\\dots",function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in fs?t=fs[r]:(r.slice(0,4)==="\\not"||r in we.math&&l6.has(we.math[r].group))&&(t="\\dotsb"),t});var _i={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};E("\\dotso",function(e){var t=e.future().text;return t in _i?"\\ldots\\,":"\\ldots"});E("\\dotsc",function(e){var t=e.future().text;return t in _i&&t!==","?"\\ldots\\,":"\\ldots"});E("\\cdots",function(e){var t=e.future().text;return t in _i?"\\@cdots\\,":"\\@cdots"});E("\\dotsb","\\cdots");E("\\dotsm","\\cdots");E("\\dotsi","\\!\\cdots");E("\\dotsx","\\ldots\\,");E("\\DOTSI","\\relax");E("\\DOTSB","\\relax");E("\\DOTSX","\\relax");E("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");E("\\,","\\tmspace+{3mu}{.1667em}");E("\\thinspace","\\,");E("\\>","\\mskip{4mu}");E("\\:","\\tmspace+{4mu}{.2222em}");E("\\medspace","\\:");E("\\;","\\tmspace+{5mu}{.2777em}");E("\\thickspace","\\;");E("\\!","\\tmspace-{3mu}{.1667em}");E("\\negthinspace","\\!");E("\\negmedspace","\\tmspace-{4mu}{.2222em}");E("\\negthickspace","\\tmspace-{5mu}{.277em}");E("\\enspace","\\kern.5em ");E("\\enskip","\\hskip.5em\\relax");E("\\quad","\\hskip1em\\relax");E("\\qquad","\\hskip2em\\relax");E("\\tag","\\@ifstar\\tag@literal\\tag@paren");E("\\tag@paren","\\tag@literal{({#1})}");E("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new Y("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});E("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");E("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");E("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");E("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");E("\\newline","\\\\\\relax");E("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Uo=V(wt["Main-Regular"][84][1]-.7*wt["Main-Regular"][65][1]);E("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");E("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");E("\\hspace","\\@ifstar\\@hspacer\\@hspace");E("\\@hspace","\\hskip #1\\relax");E("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");E("\\ordinarycolon",":");E("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");E("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');E("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');E("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');E("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');E("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');E("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');E("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');E("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');E("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');E("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');E("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');E("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');E("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');E("∷","\\dblcolon");E("∹","\\eqcolon");E("≔","\\coloneqq");E("≕","\\eqqcolon");E("⩴","\\Coloneqq");E("\\ratio","\\vcentcolon");E("\\coloncolon","\\dblcolon");E("\\colonequals","\\coloneqq");E("\\coloncolonequals","\\Coloneqq");E("\\equalscolon","\\eqqcolon");E("\\equalscoloncolon","\\Eqqcolon");E("\\colonminus","\\coloneq");E("\\coloncolonminus","\\Coloneq");E("\\minuscolon","\\eqcolon");E("\\minuscoloncolon","\\Eqcolon");E("\\coloncolonapprox","\\Colonapprox");E("\\coloncolonsim","\\Colonsim");E("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");E("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");E("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");E("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");E("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");E("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");E("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");E("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");E("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");E("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");E("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");E("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");E("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");E("\\nleqq","\\html@mathml{\\@nleqq}{≰}");E("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");E("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");E("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");E("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");E("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");E("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");E("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");E("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");E("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");E("\\imath","\\html@mathml{\\@imath}{ı}");E("\\jmath","\\html@mathml{\\@jmath}{ȷ}");E("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");E("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");E("⟦","\\llbracket");E("⟧","\\rrbracket");E("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");E("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");E("⦃","\\lBrace");E("⦄","\\rBrace");E("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");E("⦵","\\minuso");E("\\darr","\\downarrow");E("\\dArr","\\Downarrow");E("\\Darr","\\Downarrow");E("\\lang","\\langle");E("\\rang","\\rangle");E("\\uarr","\\uparrow");E("\\uArr","\\Uparrow");E("\\Uarr","\\Uparrow");E("\\N","\\mathbb{N}");E("\\R","\\mathbb{R}");E("\\Z","\\mathbb{Z}");E("\\alef","\\aleph");E("\\alefsym","\\aleph");E("\\Alpha","\\mathrm{A}");E("\\Beta","\\mathrm{B}");E("\\bull","\\bullet");E("\\Chi","\\mathrm{X}");E("\\clubs","\\clubsuit");E("\\cnums","\\mathbb{C}");E("\\Complex","\\mathbb{C}");E("\\Dagger","\\ddagger");E("\\diamonds","\\diamondsuit");E("\\empty","\\emptyset");E("\\Epsilon","\\mathrm{E}");E("\\Eta","\\mathrm{H}");E("\\exist","\\exists");E("\\harr","\\leftrightarrow");E("\\hArr","\\Leftrightarrow");E("\\Harr","\\Leftrightarrow");E("\\hearts","\\heartsuit");E("\\image","\\Im");E("\\infin","\\infty");E("\\Iota","\\mathrm{I}");E("\\isin","\\in");E("\\Kappa","\\mathrm{K}");E("\\larr","\\leftarrow");E("\\lArr","\\Leftarrow");E("\\Larr","\\Leftarrow");E("\\lrarr","\\leftrightarrow");E("\\lrArr","\\Leftrightarrow");E("\\Lrarr","\\Leftrightarrow");E("\\Mu","\\mathrm{M}");E("\\natnums","\\mathbb{N}");E("\\Nu","\\mathrm{N}");E("\\Omicron","\\mathrm{O}");E("\\plusmn","\\pm");E("\\rarr","\\rightarrow");E("\\rArr","\\Rightarrow");E("\\Rarr","\\Rightarrow");E("\\real","\\Re");E("\\reals","\\mathbb{R}");E("\\Reals","\\mathbb{R}");E("\\Rho","\\mathrm{P}");E("\\sdot","\\cdot");E("\\sect","\\S");E("\\spades","\\spadesuit");E("\\sub","\\subset");E("\\sube","\\subseteq");E("\\supe","\\supseteq");E("\\Tau","\\mathrm{T}");E("\\thetasym","\\vartheta");E("\\weierp","\\wp");E("\\Zeta","\\mathrm{Z}");E("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");E("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");E("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");E("\\bra","\\mathinner{\\langle{#1}|}");E("\\ket","\\mathinner{|{#1}\\rangle}");E("\\braket","\\mathinner{\\langle{#1}\\rangle}");E("\\Bra","\\left\\langle#1\\right|");E("\\Ket","\\left|#1\\right\\rangle");var qo=e=>t=>{var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,u=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=f=>g=>{e&&(g.macros.set("|",u),a.length&&g.macros.set("\\|",s));var p=f;if(!f&&a.length){var x=g.future();x.text==="|"&&(g.popToken(),p=!0)}return{tokens:p?a:n,numArgs:0}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var c=t.consumeArg().tokens,d=t.expandTokens([...i,...c,...r]);return t.macros.endGroup(),{tokens:d.reverse(),numArgs:0}};E("\\bra@ket",qo(!1));E("\\bra@set",qo(!0));E("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");E("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");E("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");E("\\angln","{\\angl n}");E("\\blue","\\textcolor{##6495ed}{#1}");E("\\orange","\\textcolor{##ffa500}{#1}");E("\\pink","\\textcolor{##ff00af}{#1}");E("\\red","\\textcolor{##df0030}{#1}");E("\\green","\\textcolor{##28ae7b}{#1}");E("\\gray","\\textcolor{gray}{#1}");E("\\purple","\\textcolor{##9d38bd}{#1}");E("\\blueA","\\textcolor{##ccfaff}{#1}");E("\\blueB","\\textcolor{##80f6ff}{#1}");E("\\blueC","\\textcolor{##63d9ea}{#1}");E("\\blueD","\\textcolor{##11accd}{#1}");E("\\blueE","\\textcolor{##0c7f99}{#1}");E("\\tealA","\\textcolor{##94fff5}{#1}");E("\\tealB","\\textcolor{##26edd5}{#1}");E("\\tealC","\\textcolor{##01d1c1}{#1}");E("\\tealD","\\textcolor{##01a995}{#1}");E("\\tealE","\\textcolor{##208170}{#1}");E("\\greenA","\\textcolor{##b6ffb0}{#1}");E("\\greenB","\\textcolor{##8af281}{#1}");E("\\greenC","\\textcolor{##74cf70}{#1}");E("\\greenD","\\textcolor{##1fab54}{#1}");E("\\greenE","\\textcolor{##0d923f}{#1}");E("\\goldA","\\textcolor{##ffd0a9}{#1}");E("\\goldB","\\textcolor{##ffbb71}{#1}");E("\\goldC","\\textcolor{##ff9c39}{#1}");E("\\goldD","\\textcolor{##e07d10}{#1}");E("\\goldE","\\textcolor{##a75a05}{#1}");E("\\redA","\\textcolor{##fca9a9}{#1}");E("\\redB","\\textcolor{##ff8482}{#1}");E("\\redC","\\textcolor{##f9685d}{#1}");E("\\redD","\\textcolor{##e84d39}{#1}");E("\\redE","\\textcolor{##bc2612}{#1}");E("\\maroonA","\\textcolor{##ffbde0}{#1}");E("\\maroonB","\\textcolor{##ff92c6}{#1}");E("\\maroonC","\\textcolor{##ed5fa6}{#1}");E("\\maroonD","\\textcolor{##ca337c}{#1}");E("\\maroonE","\\textcolor{##9e034e}{#1}");E("\\purpleA","\\textcolor{##ddd7ff}{#1}");E("\\purpleB","\\textcolor{##c6b9fc}{#1}");E("\\purpleC","\\textcolor{##aa87ff}{#1}");E("\\purpleD","\\textcolor{##7854ab}{#1}");E("\\purpleE","\\textcolor{##543b78}{#1}");E("\\mintA","\\textcolor{##f5f9e8}{#1}");E("\\mintB","\\textcolor{##edf2df}{#1}");E("\\mintC","\\textcolor{##e0e5cc}{#1}");E("\\grayA","\\textcolor{##f6f7f7}{#1}");E("\\grayB","\\textcolor{##f0f1f2}{#1}");E("\\grayC","\\textcolor{##e3e5e6}{#1}");E("\\grayD","\\textcolor{##d6d8da}{#1}");E("\\grayE","\\textcolor{##babec2}{#1}");E("\\grayF","\\textcolor{##888d93}{#1}");E("\\grayG","\\textcolor{##626569}{#1}");E("\\grayH","\\textcolor{##3b3e40}{#1}");E("\\grayI","\\textcolor{##21242c}{#1}");E("\\kaBlue","\\textcolor{##314453}{#1}");E("\\kaGreen","\\textcolor{##71B307}{#1}");var Yo={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class o6{constructor(t,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new u6(s6,r.macros),this.mode=n,this.stack=[]}feed(t){this.lexer=new hs(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var r,n,a;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:a,end:n}=this.consumeArg(["]"])}else({tokens:a,start:r,end:n}=this.consumeArg());return this.pushToken(new ot("EOF",n.loc)),this.pushTokens(a),new ot("",rt.range(r,n))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var r=[],n=t&&t.length>0;n||this.consumeSpaces();var a=this.future(),i,u=0,s=0;do{if(i=this.popToken(),r.push(i),i.text==="{")++u;else if(i.text==="}"){if(--u,u===-1)throw new Y("Extra }",i)}else if(i.text==="EOF")throw new Y("Unexpected end of input in a macro argument, expected '"+(t&&n?t[s]:"}")+"'",i);if(t&&n)if((u===0||u===1&&t[s]==="{")&&i.text===t[s]){if(++s,s===t.length){r.splice(-s,s);break}}else s=0}while(u!==0||n);return a.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:a,end:i}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new Y("The length of delimiters doesn't match the number of args!");for(var n=r[0],a=0;athis.settings.maxExpand)throw new Y("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var r=this.popToken(),n=r.text,a=r.noexpand?null:this._getExpansion(n);if(a==null||t&&a.unexpandable){if(t&&a==null&&n[0]==="\\"&&!this.isDefined(n))throw new Y("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var i=a.tokens,u=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs){i=i.slice();for(var s=i.length-1;s>=0;--s){var l=i[s];if(l.text==="#"){if(s===0)throw new Y("Incomplete placeholder at end of macro body",l);if(l=i[--s],l.text==="#")i.splice(s+1,1);else if(/^[1-9]$/.test(l.text))i.splice(s,2,...u[+l.text-1]);else throw new Y("Not a valid argument number",l)}}}return this.pushTokens(i),i.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}}expandMacro(t){return this.macros.has(t)?this.expandTokens([new ot(t)]):void 0}expandTokens(t){var r=[],n=this.stack.length;for(this.pushTokens(t);this.stack.length>n;)if(this.expandOnce(!0)===!1){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),r.push(a)}return this.countExpansion(r.length),r}expandMacroAsText(t){var r=this.expandMacro(t);return r&&r.map(n=>n.text).join("")}_getExpansion(t){var r=this.macros.get(t);if(r==null)return r;if(t.length===1){var n=this.lexer.catcodes[t];if(n!=null&&n!==13)return}var a=typeof r=="function"?r(this):r;if(typeof a=="string"){var i=0;if(a.includes("#"))for(var u=a.replace(/##/g,"");u.includes("#"+(i+1));)++i;for(var s=new hs(a,this.settings),l=[],c=s.lex();c.text!=="EOF";)l.push(c),c=s.lex();l.reverse();var d={tokens:l,numArgs:i};return d}return a}isDefined(t){return this.macros.has(t)||Qt.hasOwnProperty(t)||we.math.hasOwnProperty(t)||we.text.hasOwnProperty(t)||Yo.hasOwnProperty(t)}isExpandable(t){var r=this.macros.get(t);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Qt.hasOwnProperty(t)&&!Qt[t].primitive}}var ms=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,jn=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),pa={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ps={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};let Go=class Vo{constructor(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new o6(t,r,this.mode),this.settings=r,this.leftrightDepth=0,this.nextToken=null}expect(t,r){if(r===void 0&&(r=!0),this.fetch().text!==t)throw new Y("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var r=this.nextToken;this.consume(),this.gullet.pushToken(new ot("}")),this.gullet.pushTokens(t);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(t,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var a=this.fetch();if(Vo.endOfExpression.has(a.text)||r&&a.text===r||t&&Qt[a.text]&&Qt[a.text].infix)break;var i=this.parseAtom(r);if(i){if(i.type==="internal")continue}else break;n.push(i)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){for(var r=-1,n,a=0;a=128)this.settings.strict&&($l(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),t)),u={type:"textord",mode:"text",loc:rt.range(t),text:r};else return null;if(this.consume(),i)for(var d=0;dc&&(c=d):d&&(c!==void 0&&c>-1&&l.push(` -`.repeat(c)||" "),c=-1,l.push(d))}return l.join("")}function ec(e,t,r){return e.type==="element"?F6(e,t,r):e.type==="text"?r.whitespace==="normal"?tc(e,r):H6(e):[]}function F6(e,t,r){const n=rc(e,r),a=e.children||[];let i=-1,u=[];if(P6(e))return u;let s,l;for(Xa(e)||ks(e)&&xs(t,e,ks)?l=` -`:M6(e)?(s=2,l=2):Zo(e)&&(s=1,l=1);++i-1&&i<=t.length){let u=0;for(;;){let s=r[u];if(s===void 0){const l=Ss(t,r[u-1]);s=l===-1?t.length+1:l+1,r[u]=s}if(s>i)return{line:u+1,column:i-(u>0?r[u-1]:0)+1,offset:i};u++}}}function a(i){if(i&&typeof i.line=="number"&&typeof i.column=="number"&&!Number.isNaN(i.line)&&!Number.isNaN(i.column)){for(;r.length1?r[i.line-2]:0)+i.column-1;if(u=55296&&e<=57343}function cp(e){return e>=56320&&e<=57343}function hp(e,t){return(e-55296)*1024+9216+t}function sc(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function lc(e){return e>=64976&&e<=65007||op.has(e)}var P;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(P||(P={}));const dp=65536;class fp{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=dp,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,r){const{line:n,col:a,offset:i}=this,u=a+r,s=i+r;return{code:t,startLine:n,endLine:n,startCol:u,endCol:u,startOffset:s,endOffset:s}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){const r=this.html.charCodeAt(this.pos+1);if(cp(r))return this.pos++,this._addGap(),hp(t,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,T.EOF;return this._err(P.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,r){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,r){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(t,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;const n=this.html.charCodeAt(r);return n===T.CARRIAGE_RETURN?T.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;let t=this.html.charCodeAt(this.pos);return t===T.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,T.LINE_FEED):t===T.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,uc(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===T.LINE_FEED||t===T.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){sc(t)?this._err(P.controlCharacterInInputStream):lc(t)&&this._err(P.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}const mp=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),pp=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function gp(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=pp.get(e))!==null&&t!==void 0?t:e}var qe;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(qe||(qe={}));const bp=32;var Kt;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(Kt||(Kt={}));function $a(e){return e>=qe.ZERO&&e<=qe.NINE}function Ep(e){return e>=qe.UPPER_A&&e<=qe.UPPER_F||e>=qe.LOWER_A&&e<=qe.LOWER_F}function Tp(e){return e>=qe.UPPER_A&&e<=qe.UPPER_Z||e>=qe.LOWER_A&&e<=qe.LOWER_Z||$a(e)}function xp(e){return e===qe.EQUALS||Tp(e)}var Ue;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(Ue||(Ue={}));var Ft;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Ft||(Ft={}));class yp{constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n,this.state=Ue.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Ft.Strict}startEntity(t){this.decodeMode=t,this.state=Ue.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,r){switch(this.state){case Ue.EntityStart:return t.charCodeAt(r)===qe.NUM?(this.state=Ue.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=Ue.NamedEntity,this.stateNamedEntity(t,r));case Ue.NumericStart:return this.stateNumericStart(t,r);case Ue.NumericDecimal:return this.stateNumericDecimal(t,r);case Ue.NumericHex:return this.stateNumericHex(t,r);case Ue.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|bp)===qe.LOWER_X?(this.state=Ue.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=Ue.NumericDecimal,this.stateNumericDecimal(t,r))}addToNumericResult(t,r,n,a){if(r!==n){const i=n-r;this.result=this.result*Math.pow(a,i)+Number.parseInt(t.substr(r,i),a),this.consumed+=i}}stateNumericHex(t,r){const n=r;for(;r>14;for(;r>14,i!==0){if(u===qe.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Ft.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;const{result:r,decodeTree:n}=this,a=(n[r]&Kt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,a,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){const{decodeTree:a}=this;return this.emitCodePoint(r===1?a[t]&~Kt.VALUE_LENGTH:a[t+1],n),r===3&&this.emitCodePoint(a[t+2],n),n}end(){var t;switch(this.state){case Ue.NamedEntity:return this.result!==0&&(this.decodeMode!==Ft.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ue.NumericDecimal:return this.emitNumericEntity(0,2);case Ue.NumericHex:return this.emitNumericEntity(0,3);case Ue.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ue.EntityStart:return 0}}}function vp(e,t,r,n){const a=(t&Kt.BRANCH_LENGTH)>>7,i=t&Kt.JUMP_TABLE;if(a===0)return i!==0&&n===i?r:-1;if(i){const l=n-i;return l<0||l>=a?-1:e[r+l]-1}let u=r,s=u+a-1;for(;u<=s;){const l=u+s>>>1,c=e[l];if(cn)s=l-1;else return e[l+a]}return-1}var H;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(H||(H={}));var mr;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(mr||(mr={}));var pt;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})(pt||(pt={}));var O;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(O||(O={}));var o;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(o||(o={}));const Ap=new Map([[O.A,o.A],[O.ADDRESS,o.ADDRESS],[O.ANNOTATION_XML,o.ANNOTATION_XML],[O.APPLET,o.APPLET],[O.AREA,o.AREA],[O.ARTICLE,o.ARTICLE],[O.ASIDE,o.ASIDE],[O.B,o.B],[O.BASE,o.BASE],[O.BASEFONT,o.BASEFONT],[O.BGSOUND,o.BGSOUND],[O.BIG,o.BIG],[O.BLOCKQUOTE,o.BLOCKQUOTE],[O.BODY,o.BODY],[O.BR,o.BR],[O.BUTTON,o.BUTTON],[O.CAPTION,o.CAPTION],[O.CENTER,o.CENTER],[O.CODE,o.CODE],[O.COL,o.COL],[O.COLGROUP,o.COLGROUP],[O.DD,o.DD],[O.DESC,o.DESC],[O.DETAILS,o.DETAILS],[O.DIALOG,o.DIALOG],[O.DIR,o.DIR],[O.DIV,o.DIV],[O.DL,o.DL],[O.DT,o.DT],[O.EM,o.EM],[O.EMBED,o.EMBED],[O.FIELDSET,o.FIELDSET],[O.FIGCAPTION,o.FIGCAPTION],[O.FIGURE,o.FIGURE],[O.FONT,o.FONT],[O.FOOTER,o.FOOTER],[O.FOREIGN_OBJECT,o.FOREIGN_OBJECT],[O.FORM,o.FORM],[O.FRAME,o.FRAME],[O.FRAMESET,o.FRAMESET],[O.H1,o.H1],[O.H2,o.H2],[O.H3,o.H3],[O.H4,o.H4],[O.H5,o.H5],[O.H6,o.H6],[O.HEAD,o.HEAD],[O.HEADER,o.HEADER],[O.HGROUP,o.HGROUP],[O.HR,o.HR],[O.HTML,o.HTML],[O.I,o.I],[O.IMG,o.IMG],[O.IMAGE,o.IMAGE],[O.INPUT,o.INPUT],[O.IFRAME,o.IFRAME],[O.KEYGEN,o.KEYGEN],[O.LABEL,o.LABEL],[O.LI,o.LI],[O.LINK,o.LINK],[O.LISTING,o.LISTING],[O.MAIN,o.MAIN],[O.MALIGNMARK,o.MALIGNMARK],[O.MARQUEE,o.MARQUEE],[O.MATH,o.MATH],[O.MENU,o.MENU],[O.META,o.META],[O.MGLYPH,o.MGLYPH],[O.MI,o.MI],[O.MO,o.MO],[O.MN,o.MN],[O.MS,o.MS],[O.MTEXT,o.MTEXT],[O.NAV,o.NAV],[O.NOBR,o.NOBR],[O.NOFRAMES,o.NOFRAMES],[O.NOEMBED,o.NOEMBED],[O.NOSCRIPT,o.NOSCRIPT],[O.OBJECT,o.OBJECT],[O.OL,o.OL],[O.OPTGROUP,o.OPTGROUP],[O.OPTION,o.OPTION],[O.P,o.P],[O.PARAM,o.PARAM],[O.PLAINTEXT,o.PLAINTEXT],[O.PRE,o.PRE],[O.RB,o.RB],[O.RP,o.RP],[O.RT,o.RT],[O.RTC,o.RTC],[O.RUBY,o.RUBY],[O.S,o.S],[O.SCRIPT,o.SCRIPT],[O.SEARCH,o.SEARCH],[O.SECTION,o.SECTION],[O.SELECT,o.SELECT],[O.SOURCE,o.SOURCE],[O.SMALL,o.SMALL],[O.SPAN,o.SPAN],[O.STRIKE,o.STRIKE],[O.STRONG,o.STRONG],[O.STYLE,o.STYLE],[O.SUB,o.SUB],[O.SUMMARY,o.SUMMARY],[O.SUP,o.SUP],[O.TABLE,o.TABLE],[O.TBODY,o.TBODY],[O.TEMPLATE,o.TEMPLATE],[O.TEXTAREA,o.TEXTAREA],[O.TFOOT,o.TFOOT],[O.TD,o.TD],[O.TH,o.TH],[O.THEAD,o.THEAD],[O.TITLE,o.TITLE],[O.TR,o.TR],[O.TRACK,o.TRACK],[O.TT,o.TT],[O.U,o.U],[O.UL,o.UL],[O.SVG,o.SVG],[O.VAR,o.VAR],[O.WBR,o.WBR],[O.XMP,o.XMP]]);function qr(e){var t;return(t=Ap.get(e))!==null&&t!==void 0?t:o.UNKNOWN}const U=o,kp={[H.HTML]:new Set([U.ADDRESS,U.APPLET,U.AREA,U.ARTICLE,U.ASIDE,U.BASE,U.BASEFONT,U.BGSOUND,U.BLOCKQUOTE,U.BODY,U.BR,U.BUTTON,U.CAPTION,U.CENTER,U.COL,U.COLGROUP,U.DD,U.DETAILS,U.DIR,U.DIV,U.DL,U.DT,U.EMBED,U.FIELDSET,U.FIGCAPTION,U.FIGURE,U.FOOTER,U.FORM,U.FRAME,U.FRAMESET,U.H1,U.H2,U.H3,U.H4,U.H5,U.H6,U.HEAD,U.HEADER,U.HGROUP,U.HR,U.HTML,U.IFRAME,U.IMG,U.INPUT,U.LI,U.LINK,U.LISTING,U.MAIN,U.MARQUEE,U.MENU,U.META,U.NAV,U.NOEMBED,U.NOFRAMES,U.NOSCRIPT,U.OBJECT,U.OL,U.P,U.PARAM,U.PLAINTEXT,U.PRE,U.SCRIPT,U.SECTION,U.SELECT,U.SOURCE,U.STYLE,U.SUMMARY,U.TABLE,U.TBODY,U.TD,U.TEMPLATE,U.TEXTAREA,U.TFOOT,U.TH,U.THEAD,U.TITLE,U.TR,U.TRACK,U.UL,U.WBR,U.XMP]),[H.MATHML]:new Set([U.MI,U.MO,U.MN,U.MS,U.MTEXT,U.ANNOTATION_XML]),[H.SVG]:new Set([U.TITLE,U.FOREIGN_OBJECT,U.DESC]),[H.XLINK]:new Set,[H.XML]:new Set,[H.XMLNS]:new Set},Qa=new Set([U.H1,U.H2,U.H3,U.H4,U.H5,U.H6]);O.STYLE,O.SCRIPT,O.XMP,O.IFRAME,O.NOEMBED,O.NOFRAMES,O.PLAINTEXT;var y;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(y||(y={}));const De={DATA:y.DATA,RCDATA:y.RCDATA,RAWTEXT:y.RAWTEXT,SCRIPT_DATA:y.SCRIPT_DATA,PLAINTEXT:y.PLAINTEXT,CDATA_SECTION:y.CDATA_SECTION};function Sp(e){return e>=T.DIGIT_0&&e<=T.DIGIT_9}function rn(e){return e>=T.LATIN_CAPITAL_A&&e<=T.LATIN_CAPITAL_Z}function wp(e){return e>=T.LATIN_SMALL_A&&e<=T.LATIN_SMALL_Z}function Xt(e){return wp(e)||rn(e)}function Cs(e){return Xt(e)||Sp(e)}function Wn(e){return e+32}function cc(e){return e===T.SPACE||e===T.LINE_FEED||e===T.TABULATION||e===T.FORM_FEED}function _s(e){return cc(e)||e===T.SOLIDUS||e===T.GREATER_THAN_SIGN}function Cp(e){return e===T.NULL?P.nullCharacterReference:e>1114111?P.characterReferenceOutsideUnicodeRange:uc(e)?P.surrogateCharacterReference:lc(e)?P.noncharacterCharacterReference:sc(e)||e===T.CARRIAGE_RETURN?P.controlCharacterReference:null}class _p{constructor(t,r){this.options=t,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=y.DATA,this.returnState=y.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new fp(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new yp(mp,(n,a)=>{this.preprocessor.pos=this.entityStartPos+a-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(P.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(P.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{const a=Cp(n);a&&this._err(a,1)}}:void 0)}_err(t,r=0){var n,a;(a=(n=this.handler).onParseError)===null||a===void 0||a.call(n,this.preprocessor.getError(t,r))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.())}write(t,r,n){this.active=!0,this.preprocessor.write(t,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let r=0;r0&&this._err(P.endTagWithAttributes),t.selfClosing&&this._err(P.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case de.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case de.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case de.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){const t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:de.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,r)}_emitCodePoint(t){const r=cc(t)?de.WHITESPACE_CHARACTER:t===T.NULL?de.NULL_CHARACTER:de.CHARACTER;this._appendCharToCurrentCharacterToken(r,String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(de.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=y.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Ft.Attribute:Ft.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===y.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case y.DATA:{this._stateData(t);break}case y.RCDATA:{this._stateRcdata(t);break}case y.RAWTEXT:{this._stateRawtext(t);break}case y.SCRIPT_DATA:{this._stateScriptData(t);break}case y.PLAINTEXT:{this._statePlaintext(t);break}case y.TAG_OPEN:{this._stateTagOpen(t);break}case y.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case y.TAG_NAME:{this._stateTagName(t);break}case y.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case y.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case y.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case y.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case y.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case y.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case y.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case y.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case y.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case y.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case y.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case y.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case y.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case y.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case y.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case y.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case y.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case y.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case y.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case y.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case y.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case y.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case y.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case y.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case y.BOGUS_COMMENT:{this._stateBogusComment(t);break}case y.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case y.COMMENT_START:{this._stateCommentStart(t);break}case y.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case y.COMMENT:{this._stateComment(t);break}case y.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case y.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case y.COMMENT_END:{this._stateCommentEnd(t);break}case y.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case y.DOCTYPE:{this._stateDoctype(t);break}case y.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case y.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case y.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case y.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case y.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case y.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case y.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case y.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case y.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case y.CDATA_SECTION:{this._stateCdataSection(t);break}case y.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case y.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case y.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case y.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.TAG_OPEN;break}case T.AMPERSAND:{this._startCharacterReference();break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitCodePoint(t);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case T.AMPERSAND:{this._startCharacterReference();break}case T.LESS_THAN_SIGN:{this.state=y.RCDATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.RAWTEXT_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.SCRIPT_DATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(Xt(t))this._createStartTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.EXCLAMATION_MARK:{this.state=y.MARKUP_DECLARATION_OPEN;break}case T.SOLIDUS:{this.state=y.END_TAG_OPEN;break}case T.QUESTION_MARK:{this._err(P.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=y.BOGUS_COMMENT,this._stateBogusComment(t);break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(P.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=y.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(Xt(t))this._createEndTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.GREATER_THAN_SIGN:{this._err(P.missingEndTagName),this.state=y.DATA;break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===T.SOLIDUS?this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Xt(t)?(this._emitChars("<"),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=y.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){Xt(t)?(this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===T.SOLIDUS?(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(et.SCRIPT,!1)&&_s(this.preprocessor.peek(et.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,r){const n=this._indexOf(t);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(t,r,n){const a=this._indexOf(t)+1;this.items.splice(a,0,r),this.tagIDs.splice(a,0,n),this.stackTop++,a===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,a===this.stackTop)}popUntilTagNamePopped(t){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(t,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==H.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(t){for(;this.stackTop>=t;){const r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(t,r){const n=this._indexOfTagNames(t,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(Lp,H.HTML)}clearBackToTableBodyContext(){this.clearBackTo(Op,H.HTML)}clearBackToTableRowContext(){this.clearBackTo(Dp,H.HTML)}remove(t){const r=this._indexOf(t);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===o.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){const r=this._indexOf(t)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===o.HTML}hasInDynamicScope(t,r){for(let n=this.stackTop;n>=0;n--){const a=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case H.HTML:{if(a===t)return!0;if(r.has(a))return!1;break}case H.SVG:{if(Ds.has(a))return!1;break}case H.MATHML:{if(Ns.has(a))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,s0)}hasInListItemScope(t){return this.hasInDynamicScope(t,Ip)}hasInButtonScope(t){return this.hasInDynamicScope(t,Np)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case H.HTML:{if(Qa.has(r))return!0;if(s0.has(r))return!1;break}case H.SVG:{if(Ds.has(r))return!1;break}case H.MATHML:{if(Ns.has(r))return!1;break}}}return!0}hasInTableScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===H.HTML)switch(this.tagIDs[t]){case o.TBODY:case o.THEAD:case o.TFOOT:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasInSelectScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.OPTION:case o.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&hc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Is.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Is.has(this.currentTagId);)this.pop()}}const ga=3;var St;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(St||(St={}));const Os={type:St.Marker};class Pp{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,r){const n=[],a=r.length,i=this.treeAdapter.getTagName(t),u=this.treeAdapter.getNamespaceURI(t);for(let s=0;s[u.name,u.value]));let i=0;for(let u=0;ua.get(l.name)===l.value)&&(i+=1,i>=ga&&this.entries.splice(s.idx,1))}}insertMarker(){this.entries.unshift(Os)}pushElement(t,r){this._ensureNoahArkCondition(t),this.entries.unshift({type:St.Element,element:t,token:r})}insertElementAfterBookmark(t,r){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:St.Element,element:t,token:r})}removeEntry(t){const r=this.entries.indexOf(t);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){const t=this.entries.indexOf(Os);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){const r=this.entries.find(n=>n.type===St.Marker||this.treeAdapter.getTagName(n.element)===t);return r&&r.type===St.Element?r:null}getElementEntry(t){return this.entries.find(r=>r.type===St.Element&&r.element===t)}}const $t={createDocument(){return{nodeName:"#document",mode:pt.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){const n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,r,n){const a=e.childNodes.find(i=>i.nodeName==="#documentType");if(a)a.name=t,a.publicId=r,a.systemId=n;else{const i={nodeName:"#documentType",name:t,publicId:r,systemId:n,parentNode:null};$t.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const r=e.childNodes[e.childNodes.length-1];if($t.isTextNode(r)){r.value+=t;return}}$t.appendChild(e,$t.createTextNode(t))},insertTextBefore(e,t,r){const n=e.childNodes[e.childNodes.indexOf(r)-1];n&&$t.isTextNode(n)?n.value+=t:$t.insertBefore(e,$t.createTextNode(t),r)},adoptAttributes(e,t){const r=new Set(e.attrs.map(n=>n.name));for(let n=0;ne.startsWith(r))}function qp(e){return e.name===dc&&e.publicId===null&&(e.systemId===null||e.systemId===Bp)}function Yp(e){if(e.name!==dc)return pt.QUIRKS;const{systemId:t}=e;if(t&&t.toLowerCase()===Fp)return pt.QUIRKS;let{publicId:r}=e;if(r!==null){if(r=r.toLowerCase(),zp.has(r))return pt.QUIRKS;let n=t===null?Hp:fc;if(Ls(r,n))return pt.QUIRKS;if(n=t===null?mc:Up,Ls(r,n))return pt.LIMITED_QUIRKS}return pt.NO_QUIRKS}const Rs={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},Gp="definitionurl",Vp="definitionURL",jp=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),Wp=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:H.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:H.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:H.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:H.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:H.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:H.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:H.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:H.XML}],["xml:space",{prefix:"xml",name:"space",namespace:H.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:H.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:H.XMLNS}]]),Xp=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),$p=new Set([o.B,o.BIG,o.BLOCKQUOTE,o.BODY,o.BR,o.CENTER,o.CODE,o.DD,o.DIV,o.DL,o.DT,o.EM,o.EMBED,o.H1,o.H2,o.H3,o.H4,o.H5,o.H6,o.HEAD,o.HR,o.I,o.IMG,o.LI,o.LISTING,o.MENU,o.META,o.NOBR,o.OL,o.P,o.PRE,o.RUBY,o.S,o.SMALL,o.SPAN,o.STRONG,o.STRIKE,o.SUB,o.SUP,o.TABLE,o.TT,o.U,o.UL,o.VAR]);function Qp(e){const t=e.tagID;return t===o.FONT&&e.attrs.some(({name:n})=>n===mr.COLOR||n===mr.SIZE||n===mr.FACE)||$p.has(t)}function pc(e){for(let t=0;t0&&this._setContextModes(t,r)}onItemPop(t,r){var n,a;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(a=(n=this.treeAdapter).onItemPop)===null||a===void 0||a.call(n,t,this.openElements.current),r){let i,u;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,u=this.fragmentContextID):{current:i,currentTagId:u}=this.openElements,this._setContextModes(i,u)}}_setContextModes(t,r){const n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===H.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,t)}_switchToTextParsing(t,r){this._insertElement(t,H.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=k.TEXT}switchToPlaintextParsing(){this.insertionMode=k.TEXT,this.originalInsertionMode=k.IN_BODY,this.tokenizer.state=De.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===O.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==H.HTML))switch(this.fragmentContextID){case o.TITLE:case o.TEXTAREA:{this.tokenizer.state=De.RCDATA;break}case o.STYLE:case o.XMP:case o.IFRAME:case o.NOEMBED:case o.NOFRAMES:case o.NOSCRIPT:{this.tokenizer.state=De.RAWTEXT;break}case o.SCRIPT:{this.tokenizer.state=De.SCRIPT_DATA;break}case o.PLAINTEXT:{this.tokenizer.state=De.PLAINTEXT;break}}}_setDocumentType(t){const r=t.name||"",n=t.publicId||"",a=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,a),t.location){const u=this.treeAdapter.getChildNodes(this.document).find(s=>this.treeAdapter.isDocumentTypeNode(s));u&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}}_attachElementToTree(t,r){if(this.options.sourceCodeLocationInfo){const n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(t,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t)}}_appendElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location)}_insertElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID)}_insertFakeElement(t,r){const n=this.treeAdapter.createElement(t,H.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(t){const r=this.treeAdapter.createElement(t.tagName,H.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,t.location),this.openElements.push(r,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const t=this.treeAdapter.createElement(O.HTML,H.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,o.HTML)}_appendCommentNode(t,r){const n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location)}_insertCharacters(t){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,t.chars,n):this.treeAdapter.insertText(r,t.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,t.chars)),!t.location)return;const a=this.treeAdapter.getChildNodes(r),i=n?a.lastIndexOf(n):a.length,u=a[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(u)){const{endLine:l,endCol:c,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(u,{endLine:l,endCol:c,endOffset:d})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}_adoptNodes(t,r){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(t,r){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&r.location){const n=r.location,a=this.treeAdapter.getTagName(t),i=r.type===de.END_TAG&&a===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,t.tagID===o.SVG&&this.treeAdapter.getTagName(r)===O.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===H.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===o.MGLYPH||t.tagID===o.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,H.HTML)}_processToken(t){switch(t.type){case de.CHARACTER:{this.onCharacter(t);break}case de.NULL_CHARACTER:{this.onNullCharacter(t);break}case de.COMMENT:{this.onComment(t);break}case de.DOCTYPE:{this.onDoctype(t);break}case de.START_TAG:{this._processStartTag(t);break}case de.END_TAG:{this.onEndTag(t);break}case de.EOF:{this.onEof(t);break}case de.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,r,n){const a=this.treeAdapter.getNamespaceURI(r),i=this.treeAdapter.getAttrList(r);return e5(t,a,i,n)}_reconstructActiveFormattingElements(){const t=this.activeFormattingElements.entries.length;if(t){const r=this.activeFormattingElements.entries.findIndex(a=>a.type===St.Marker||this.openElements.contains(a.element)),n=r===-1?t-1:r-1;for(let a=n;a>=0;a--){const i=this.activeFormattingElements.entries[a];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=k.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(o.P),this.openElements.popUntilTagNamePopped(o.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case o.TR:{this.insertionMode=k.IN_ROW;return}case o.TBODY:case o.THEAD:case o.TFOOT:{this.insertionMode=k.IN_TABLE_BODY;return}case o.CAPTION:{this.insertionMode=k.IN_CAPTION;return}case o.COLGROUP:{this.insertionMode=k.IN_COLUMN_GROUP;return}case o.TABLE:{this.insertionMode=k.IN_TABLE;return}case o.BODY:{this.insertionMode=k.IN_BODY;return}case o.FRAMESET:{this.insertionMode=k.IN_FRAMESET;return}case o.SELECT:{this._resetInsertionModeForSelect(t);return}case o.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case o.HTML:{this.insertionMode=this.headElement?k.AFTER_HEAD:k.BEFORE_HEAD;return}case o.TD:case o.TH:{if(t>0){this.insertionMode=k.IN_CELL;return}break}case o.HEAD:{if(t>0){this.insertionMode=k.IN_HEAD;return}break}}this.insertionMode=k.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let r=t-1;r>0;r--){const n=this.openElements.tagIDs[r];if(n===o.TEMPLATE)break;if(n===o.TABLE){this.insertionMode=k.IN_SELECT_IN_TABLE;return}}this.insertionMode=k.IN_SELECT}_isElementCausesFosterParenting(t){return bc.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){const r=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case o.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===H.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case o.TABLE:{const n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){const r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,t,r.beforeElement):this.treeAdapter.appendChild(r.parent,t)}_isSpecialElement(t,r){const n=this.treeAdapter.getNamespaceURI(t);return kp[n].has(r)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){R7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:{Tc(this,t);break}case k.TEXT:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{Sc(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){L7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.TEXT:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){Ka(this,t);return}switch(this.insertionMode){case k.INITIAL:case k.BEFORE_HTML:case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_TEMPLATE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{Ka(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.AFTER_BODY:{h5(this,t);break}case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{d5(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case k.INITIAL:{f5(this,t);break}case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:{this._err(t,P.misplacedDoctype);break}case k.IN_TABLE_TEXT:{en(this,t);break}}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,P.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?M7(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{m5(this,t);break}case k.BEFORE_HEAD:{g5(this,t);break}case k.IN_HEAD:{yt(this,t);break}case k.IN_HEAD_NO_SCRIPT:{T5(this,t);break}case k.AFTER_HEAD:{y5(this,t);break}case k.IN_BODY:{We(this,t);break}case k.IN_TABLE:{Rr(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{b7(this,t);break}case k.IN_COLUMN_GROUP:{Bi(this,t);break}case k.IN_TABLE_BODY:{O0(this,t);break}case k.IN_ROW:{L0(this,t);break}case k.IN_CELL:{x7(this,t);break}case k.IN_SELECT:{_c(this,t);break}case k.IN_SELECT_IN_TABLE:{v7(this,t);break}case k.IN_TEMPLATE:{k7(this,t);break}case k.AFTER_BODY:{w7(this,t);break}case k.IN_FRAMESET:{C7(this,t);break}case k.AFTER_FRAMESET:{I7(this,t);break}case k.AFTER_AFTER_BODY:{D7(this,t);break}case k.AFTER_AFTER_FRAMESET:{O7(this,t);break}}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?P7(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{p5(this,t);break}case k.BEFORE_HEAD:{b5(this,t);break}case k.IN_HEAD:{E5(this,t);break}case k.IN_HEAD_NO_SCRIPT:{x5(this,t);break}case k.AFTER_HEAD:{v5(this,t);break}case k.IN_BODY:{D0(this,t);break}case k.TEXT:{s7(this,t);break}case k.IN_TABLE:{En(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{E7(this,t);break}case k.IN_COLUMN_GROUP:{T7(this,t);break}case k.IN_TABLE_BODY:{Ja(this,t);break}case k.IN_ROW:{Cc(this,t);break}case k.IN_CELL:{y7(this,t);break}case k.IN_SELECT:{Ic(this,t);break}case k.IN_SELECT_IN_TABLE:{A7(this,t);break}case k.IN_TEMPLATE:{S7(this,t);break}case k.AFTER_BODY:{Dc(this,t);break}case k.IN_FRAMESET:{_7(this,t);break}case k.AFTER_FRAMESET:{N7(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onEof(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{Ac(this,t);break}case k.TEXT:{l7(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_TEMPLATE:{Nc(this,t);break}case k.AFTER_BODY:case k.IN_FRAMESET:case k.AFTER_FRAMESET:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Pi(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===T.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.TEXT:case k.IN_COLUMN_GROUP:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{this._insertCharacters(t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:case k.AFTER_BODY:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Ec(this,t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{kc(this,t);break}}}}function i5(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):vc(e,t),r}function u5(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){const a=e.openElements.items[n];if(a===t.element)break;e._isSpecialElement(a,e.openElements.tagIDs[n])&&(r=a)}return r||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),r}function s5(e,t,r){let n=t,a=e.openElements.getCommonAncestor(t);for(let i=0,u=a;u!==r;i++,u=a){a=e.openElements.getCommonAncestor(u);const s=e.activeFormattingElements.getElementEntry(u),l=s&&i>=n5;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(u)):(u=l5(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(u,n),n=u)}return n}function l5(e,t){const r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function o5(e,t,r){const n=e.treeAdapter.getTagName(t),a=qr(n);if(e._isElementCausesFosterParenting(a))e._fosterParentElement(r);else{const i=e.treeAdapter.getNamespaceURI(t);a===o.TEMPLATE&&i===H.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function c5(e,t,r){const n=e.treeAdapter.getNamespaceURI(r.element),{token:a}=r,i=e.treeAdapter.createElement(a.tagName,n,a.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,a),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,i,a.tagID)}function Mi(e,t){for(let r=0;r=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],a=e.treeAdapter.getNodeSourceCodeLocation(n);if(a&&!a.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const i=e.openElements.items[1],u=e.treeAdapter.getNodeSourceCodeLocation(i);u&&!u.endTag&&e._setEndLocation(i,t)}}}}function f5(e,t){e._setDocumentType(t);const r=t.forceQuirks?pt.QUIRKS:Yp(t);qp(t)||e._err(t,P.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=k.BEFORE_HTML}function Zr(e,t){e._err(t,P.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,pt.QUIRKS),e.insertionMode=k.BEFORE_HTML,e._processToken(t)}function m5(e,t){t.tagID===o.HTML?(e._insertElement(t,H.HTML),e.insertionMode=k.BEFORE_HEAD):ln(e,t)}function p5(e,t){const r=t.tagID;(r===o.HTML||r===o.HEAD||r===o.BODY||r===o.BR)&&ln(e,t)}function ln(e,t){e._insertFakeRootElement(),e.insertionMode=k.BEFORE_HEAD,e._processToken(t)}function g5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.HEAD:{e._insertElement(t,H.HTML),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD;break}default:on(e,t)}}function b5(e,t){const r=t.tagID;r===o.HEAD||r===o.BODY||r===o.HTML||r===o.BR?on(e,t):e._err(t,P.endTagWithoutMatchingOpenElement)}function on(e,t){e._insertFakeElement(O.HEAD,o.HEAD),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD,e._processToken(t)}function yt(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.TITLE:{e._switchToTextParsing(t,De.RCDATA);break}case o.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,De.RAWTEXT):(e._insertElement(t,H.HTML),e.insertionMode=k.IN_HEAD_NO_SCRIPT);break}case o.NOFRAMES:case o.STYLE:{e._switchToTextParsing(t,De.RAWTEXT);break}case o.SCRIPT:{e._switchToTextParsing(t,De.SCRIPT_DATA);break}case o.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=k.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(k.IN_TEMPLATE);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:cn(e,t)}}function E5(e,t){switch(t.tagID){case o.HEAD:{e.openElements.pop(),e.insertionMode=k.AFTER_HEAD;break}case o.BODY:case o.BR:case o.HTML:{cn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function Tr(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==o.TEMPLATE&&e._err(t,P.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,P.endTagWithoutMatchingOpenElement)}function cn(e,t){e.openElements.pop(),e.insertionMode=k.AFTER_HEAD,e._processToken(t)}function T5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASEFONT:case o.BGSOUND:case o.HEAD:case o.LINK:case o.META:case o.NOFRAMES:case o.STYLE:{yt(e,t);break}case o.NOSCRIPT:{e._err(t,P.nestedNoscriptInHead);break}default:hn(e,t)}}function x5(e,t){switch(t.tagID){case o.NOSCRIPT:{e.openElements.pop(),e.insertionMode=k.IN_HEAD;break}case o.BR:{hn(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function hn(e,t){const r=t.type===de.EOF?P.openElementsLeftAfterEof:P.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=k.IN_HEAD,e._processToken(t)}function y5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BODY:{e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_BODY;break}case o.FRAMESET:{e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET;break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{e._err(t,P.abandonedHeadElementChild),e.openElements.push(e.headElement,o.HEAD),yt(e,t),e.openElements.remove(e.headElement);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:dn(e,t)}}function v5(e,t){switch(t.tagID){case o.BODY:case o.HTML:case o.BR:{dn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function dn(e,t){e._insertFakeElement(O.BODY,o.BODY),e.insertionMode=k.IN_BODY,N0(e,t)}function N0(e,t){switch(t.type){case de.CHARACTER:{Tc(e,t);break}case de.WHITESPACE_CHARACTER:{Ec(e,t);break}case de.COMMENT:{Ka(e,t);break}case de.START_TAG:{We(e,t);break}case de.END_TAG:{D0(e,t);break}case de.EOF:{Ac(e,t);break}}}function Ec(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function Tc(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function A5(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function k5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}function S5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET)}function w5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function C5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&Qa.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,H.HTML)}function _5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function I5(e,t){const r=e.openElements.tmplCount>0;(!e.formElement||r)&&(e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),r||(e.formElement=e.openElements.current))}function N5(e,t){e.framesetOk=!1;const r=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){const a=e.openElements.tagIDs[n];if(r===o.LI&&a===o.LI||(r===o.DD||r===o.DT)&&(a===o.DD||a===o.DT)){e.openElements.generateImpliedEndTagsWithExclusion(a),e.openElements.popUntilTagNamePopped(a);break}if(a!==o.ADDRESS&&a!==o.DIV&&a!==o.P&&e._isSpecialElement(e.openElements.items[n],a))break}e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function D5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.tokenizer.state=De.PLAINTEXT}function O5(e,t){e.openElements.hasInScope(o.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1}function L5(e,t){const r=e.activeFormattingElements.getElementEntryInScopeWithTagName(O.A);r&&(Mi(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function R5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function M5(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(o.NOBR)&&(Mi(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function P5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function B5(e,t){e.treeAdapter.getDocumentMode(e.document)!==pt.QUIRKS&&e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_TABLE}function xc(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function yc(e){const t=oc(e,mr.TYPE);return t!=null&&t.toLowerCase()===t5}function F5(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),yc(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function H5(e,t){e._appendElement(t,H.HTML),t.ackSelfClosing=!0}function z5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function U5(e,t){t.tagName=O.IMG,t.tagID=o.IMG,xc(e,t)}function q5(e,t){e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.tokenizer.state=De.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=k.TEXT}function Y5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function G5(e,t){e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function Bs(e,t){e._switchToTextParsing(t,De.RAWTEXT)}function V5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===k.IN_TABLE||e.insertionMode===k.IN_CAPTION||e.insertionMode===k.IN_TABLE_BODY||e.insertionMode===k.IN_ROW||e.insertionMode===k.IN_CELL?k.IN_SELECT_IN_TABLE:k.IN_SELECT}function j5(e,t){e.openElements.currentTagId===o.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function W5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,H.HTML)}function X5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(o.RTC),e._insertElement(t,H.HTML)}function $5(e,t){e._reconstructActiveFormattingElements(),pc(t),Ri(t),t.selfClosing?e._appendElement(t,H.MATHML):e._insertElement(t,H.MATHML),t.ackSelfClosing=!0}function Q5(e,t){e._reconstructActiveFormattingElements(),gc(t),Ri(t),t.selfClosing?e._appendElement(t,H.SVG):e._insertElement(t,H.SVG),t.ackSelfClosing=!0}function Fs(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function We(e,t){switch(t.tagID){case o.I:case o.S:case o.B:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.SMALL:case o.STRIKE:case o.STRONG:{R5(e,t);break}case o.A:{L5(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{C5(e,t);break}case o.P:case o.DL:case o.OL:case o.UL:case o.DIV:case o.DIR:case o.NAV:case o.MAIN:case o.MENU:case o.ASIDE:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.DETAILS:case o.ADDRESS:case o.ARTICLE:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{w5(e,t);break}case o.LI:case o.DD:case o.DT:{N5(e,t);break}case o.BR:case o.IMG:case o.WBR:case o.AREA:case o.EMBED:case o.KEYGEN:{xc(e,t);break}case o.HR:{z5(e,t);break}case o.RB:case o.RTC:{W5(e,t);break}case o.RT:case o.RP:{X5(e,t);break}case o.PRE:case o.LISTING:{_5(e,t);break}case o.XMP:{Y5(e,t);break}case o.SVG:{Q5(e,t);break}case o.HTML:{A5(e,t);break}case o.BASE:case o.LINK:case o.META:case o.STYLE:case o.TITLE:case o.SCRIPT:case o.BGSOUND:case o.BASEFONT:case o.TEMPLATE:{yt(e,t);break}case o.BODY:{k5(e,t);break}case o.FORM:{I5(e,t);break}case o.NOBR:{M5(e,t);break}case o.MATH:{$5(e,t);break}case o.TABLE:{B5(e,t);break}case o.INPUT:{F5(e,t);break}case o.PARAM:case o.TRACK:case o.SOURCE:{H5(e,t);break}case o.IMAGE:{U5(e,t);break}case o.BUTTON:{O5(e,t);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{P5(e,t);break}case o.IFRAME:{G5(e,t);break}case o.SELECT:{V5(e,t);break}case o.OPTION:case o.OPTGROUP:{j5(e,t);break}case o.NOEMBED:case o.NOFRAMES:{Bs(e,t);break}case o.FRAMESET:{S5(e,t);break}case o.TEXTAREA:{q5(e,t);break}case o.NOSCRIPT:{e.options.scriptingEnabled?Bs(e,t):Fs(e,t);break}case o.PLAINTEXT:{D5(e,t);break}case o.COL:case o.TH:case o.TD:case o.TR:case o.HEAD:case o.FRAME:case o.TBODY:case o.TFOOT:case o.THEAD:case o.CAPTION:case o.COLGROUP:break;default:Fs(e,t)}}function K5(e,t){if(e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,e.options.sourceCodeLocationInfo)){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}function J5(e,t){e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,Dc(e,t))}function Z5(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function e7(e){const t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(o.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(o.FORM):r&&e.openElements.remove(r))}function t7(e){e.openElements.hasInButtonScope(o.P)||e._insertFakeElement(O.P,o.P),e._closePElement()}function r7(e){e.openElements.hasInListItemScope(o.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(o.LI),e.openElements.popUntilTagNamePopped(o.LI))}function n7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}function a7(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function i7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function u7(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(O.BR,o.BR),e.openElements.pop(),e.framesetOk=!1}function vc(e,t){const r=t.tagName,n=t.tagID;for(let a=e.openElements.stackTop;a>0;a--){const i=e.openElements.items[a],u=e.openElements.tagIDs[a];if(n===u&&(n!==o.UNKNOWN||e.treeAdapter.getTagName(i)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=a&&e.openElements.shortenToLength(a);break}if(e._isSpecialElement(i,u))break}}function D0(e,t){switch(t.tagID){case o.A:case o.B:case o.I:case o.S:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.NOBR:case o.SMALL:case o.STRIKE:case o.STRONG:{Mi(e,t);break}case o.P:{t7(e);break}case o.DL:case o.UL:case o.OL:case o.DIR:case o.DIV:case o.NAV:case o.PRE:case o.MAIN:case o.MENU:case o.ASIDE:case o.BUTTON:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.ADDRESS:case o.ARTICLE:case o.DETAILS:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.LISTING:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{Z5(e,t);break}case o.LI:{r7(e);break}case o.DD:case o.DT:{n7(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{a7(e);break}case o.BR:{u7(e);break}case o.BODY:{K5(e,t);break}case o.HTML:{J5(e,t);break}case o.FORM:{e7(e);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{i7(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:vc(e,t)}}function Ac(e,t){e.tmplInsertionModeStack.length>0?Nc(e,t):Pi(e,t)}function s7(e,t){var r;t.tagID===o.SCRIPT&&((r=e.scriptHandler)===null||r===void 0||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function l7(e,t){e._err(t,P.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function ba(e,t){if(e.openElements.currentTagId!==void 0&&bc.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=k.IN_TABLE_TEXT,t.type){case de.CHARACTER:{Sc(e,t);break}case de.WHITESPACE_CHARACTER:{kc(e,t);break}}else wn(e,t)}function o7(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_CAPTION}function c7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_COLUMN_GROUP}function h7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.COLGROUP,o.COLGROUP),e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t)}function d7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_TABLE_BODY}function f7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.TBODY,o.TBODY),e.insertionMode=k.IN_TABLE_BODY,O0(e,t)}function m7(e,t){e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function p7(e,t){yc(t)?e._appendElement(t,H.HTML):wn(e,t),t.ackSelfClosing=!0}function g7(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,H.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Rr(e,t){switch(t.tagID){case o.TD:case o.TH:case o.TR:{f7(e,t);break}case o.STYLE:case o.SCRIPT:case o.TEMPLATE:{yt(e,t);break}case o.COL:{h7(e,t);break}case o.FORM:{g7(e,t);break}case o.TABLE:{m7(e,t);break}case o.TBODY:case o.TFOOT:case o.THEAD:{d7(e,t);break}case o.INPUT:{p7(e,t);break}case o.CAPTION:{o7(e,t);break}case o.COLGROUP:{c7(e,t);break}default:wn(e,t)}}function En(e,t){switch(t.tagID){case o.TABLE:{e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}case o.BODY:case o.CAPTION:case o.COL:case o.COLGROUP:case o.HTML:case o.TBODY:case o.TD:case o.TFOOT:case o.TH:case o.THEAD:case o.TR:break;default:wn(e,t)}}function wn(e,t){const r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,N0(e,t),e.fosterParentingEnabled=r}function kc(e,t){e.pendingCharacterTokens.push(t)}function Sc(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function en(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r0&&e.openElements.currentTagId===o.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===o.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===o.OPTGROUP&&e.openElements.pop();break}case o.OPTION:{e.openElements.currentTagId===o.OPTION&&e.openElements.pop();break}case o.SELECT:{e.openElements.hasInSelectScope(o.SELECT)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}}}function v7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e._processStartTag(t)):_c(e,t)}function A7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Ic(e,t)}function k7(e,t){switch(t.tagID){case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{yt(e,t);break}case o.CAPTION:case o.COLGROUP:case o.TBODY:case o.TFOOT:case o.THEAD:{e.tmplInsertionModeStack[0]=k.IN_TABLE,e.insertionMode=k.IN_TABLE,Rr(e,t);break}case o.COL:{e.tmplInsertionModeStack[0]=k.IN_COLUMN_GROUP,e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t);break}case o.TR:{e.tmplInsertionModeStack[0]=k.IN_TABLE_BODY,e.insertionMode=k.IN_TABLE_BODY,O0(e,t);break}case o.TD:case o.TH:{e.tmplInsertionModeStack[0]=k.IN_ROW,e.insertionMode=k.IN_ROW,L0(e,t);break}default:e.tmplInsertionModeStack[0]=k.IN_BODY,e.insertionMode=k.IN_BODY,We(e,t)}}function S7(e,t){t.tagID===o.TEMPLATE&&Tr(e,t)}function Nc(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Pi(e,t)}function w7(e,t){t.tagID===o.HTML?We(e,t):o0(e,t)}function Dc(e,t){var r;if(t.tagID===o.HTML){if(e.fragmentContext||(e.insertionMode=k.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===o.HTML){e._setEndLocation(e.openElements.items[0],t);const n=e.openElements.items[1];n&&!(!((r=e.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&e._setEndLocation(n,t)}}else o0(e,t)}function o0(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function C7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.FRAMESET:{e._insertElement(t,H.HTML);break}case o.FRAME:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.NOFRAMES:{yt(e,t);break}}}function _7(e,t){t.tagID===o.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==o.FRAMESET&&(e.insertionMode=k.AFTER_FRAMESET))}function I7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function N7(e,t){t.tagID===o.HTML&&(e.insertionMode=k.AFTER_AFTER_FRAMESET)}function D7(e,t){t.tagID===o.HTML?We(e,t):Jn(e,t)}function Jn(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function O7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function L7(e,t){t.chars=Se,e._insertCharacters(t)}function R7(e,t){e._insertCharacters(t),e.framesetOk=!1}function Oc(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==H.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function M7(e,t){if(Qp(t))Oc(e),e._startTagOutsideForeignContent(t);else{const r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===H.MATHML?pc(t):n===H.SVG&&(Kp(t),gc(t)),Ri(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}function P7(e,t){if(t.tagID===o.P||t.tagID===o.BR){Oc(e),e._endTagOutsideForeignContent(t);return}for(let r=e.openElements.stackTop;r>0;r--){const n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===H.HTML){e._endTagOutsideForeignContent(t);break}const a=e.treeAdapter.getTagName(n);if(a.toLowerCase()===t.tagName){t.tagName=a,e.openElements.shortenToLength(r);break}}}O.AREA,O.BASE,O.BASEFONT,O.BGSOUND,O.BR,O.COL,O.EMBED,O.FRAME,O.HR,O.IMG,O.INPUT,O.KEYGEN,O.LINK,O.META,O.PARAM,O.SOURCE,O.TRACK,O.WBR;const B7=/<(\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\t\n\f\r />])/gi,F7=new Set(["mdxFlowExpression","mdxJsxFlowElement","mdxJsxTextElement","mdxTextExpression","mdxjsEsm"]),Hs={sourceCodeLocationInfo:!0,scriptingEnabled:!1};function Lc(e,t){const r=X7(e),n=_l("type",{handlers:{root:H7,element:z7,text:U7,comment:Mc,doctype:q7,raw:G7},unknown:V7}),a={parser:r?new Ps(Hs):Ps.getFragmentParser(void 0,Hs),handle(s){n(s,a)},stitches:!1,options:t||{}};n(e,a),Yr(a,_t());const i=r?a.parser.document:a.parser.getFragment(),u=$6(i,{file:a.options.file});return a.stitches&&b0(u,"comment",function(s,l,c){const d=s;if(d.value.stitch&&c&&l!==void 0){const f=c.children;return f[l]=d.value.stitch,l}}),u.type==="root"&&u.children.length===1&&u.children[0].type===e.type?u.children[0]:u}function Rc(e,t){let r=-1;if(e)for(;++r4&&(t.parser.tokenizer.state=0);const r={type:de.CHARACTER,chars:e.value,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function q7(e,t){const r={type:de.DOCTYPE,name:"html",forceQuirks:!1,publicId:"",systemId:"",location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function Y7(e,t){t.stitches=!0;const r=$7(e);if("children"in e&&"children"in r){const n=Lc({type:"root",children:e.children},t.options);r.children=n.children}Mc({type:"comment",value:{stitch:r}},t)}function Mc(e,t){const r=e.value,n={type:de.COMMENT,data:r,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function G7(e,t){if(t.parser.tokenizer.preprocessor.html="",t.parser.tokenizer.preprocessor.pos=-1,t.parser.tokenizer.preprocessor.lastGapPos=-2,t.parser.tokenizer.preprocessor.gapStack=[],t.parser.tokenizer.preprocessor.skipNextNewLine=!1,t.parser.tokenizer.preprocessor.lastChunkWritten=!1,t.parser.tokenizer.preprocessor.endOfChunkHit=!1,t.parser.tokenizer.preprocessor.isEol=!1,Pc(t,_t(e)),t.parser.tokenizer.write(t.options.tagfilter?e.value.replace(B7,"<$1$2"):e.value,!1),t.parser.tokenizer._runParsingLoop(),t.parser.tokenizer.state===72||t.parser.tokenizer.state===78){t.parser.tokenizer.preprocessor.lastChunkWritten=!0;const r=t.parser.tokenizer._consume();t.parser.tokenizer._callState(r)}}function V7(e,t){const r=e;if(t.options.passThrough&&t.options.passThrough.includes(r.type))Y7(r,t);else{let n="";throw F7.has(r.type)&&(n=". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax"),new Error("Cannot compile `"+r.type+"` node"+n)}}function Yr(e,t){Pc(e,t);const r=e.parser.tokenizer.currentCharacterToken;r&&r.location&&(r.location.endLine=e.parser.tokenizer.preprocessor.line,r.location.endCol=e.parser.tokenizer.preprocessor.col+1,r.location.endOffset=e.parser.tokenizer.preprocessor.offset+1,e.parser.currentToken=r,e.parser._processToken(e.parser.currentToken)),e.parser.tokenizer.paused=!1,e.parser.tokenizer.inLoop=!1,e.parser.tokenizer.active=!1,e.parser.tokenizer.returnState=De.DATA,e.parser.tokenizer.charRefCode=-1,e.parser.tokenizer.consumedAfterSnapshot=-1,e.parser.tokenizer.currentLocation=null,e.parser.tokenizer.currentCharacterToken=null,e.parser.tokenizer.currentToken=null,e.parser.tokenizer.currentAttr={name:"",value:""}}function Pc(e,t){if(t&&t.offset!==void 0){const r={startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:-1,endCol:-1,endOffset:-1};e.parser.tokenizer.preprocessor.lineStartPos=-t.column+1,e.parser.tokenizer.preprocessor.droppedBufferSize=t.offset,e.parser.tokenizer.preprocessor.line=t.line,e.parser.tokenizer.currentLocation=r}}function j7(e,t){const r=e.tagName.toLowerCase();if(t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,_t(e));const n=t.parser.openElements.current;let a="namespaceURI"in n?n.namespaceURI:Ct.html;a===Ct.html&&r==="svg"&&(a=Ct.svg);const i=ep({...e,children:[]},{space:a===Ct.svg?"svg":"html"}),u={type:de.START_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:"attrs"in i?i.attrs:[],location:Cn(e)};t.parser.currentToken=u,t.parser._processToken(t.parser.currentToken),t.parser.tokenizer.lastStartTagName=r}function W7(e,t){const r=e.tagName.toLowerCase();if(!t.parser.tokenizer.inForeignNode&&lp.includes(r)||t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,d0(e));const n={type:de.END_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:[],location:Cn(e)};t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken),r===t.parser.tokenizer.lastStartTagName&&(t.parser.tokenizer.state===De.RCDATA||t.parser.tokenizer.state===De.RAWTEXT||t.parser.tokenizer.state===De.SCRIPT_DATA)&&(t.parser.tokenizer.state=De.DATA)}function X7(e){const t=e.type==="root"?e.children[0]:e;return!!(t&&(t.type==="doctype"||t.type==="element"&&t.tagName.toLowerCase()==="html"))}function Cn(e){const t=_t(e)||{line:void 0,column:void 0,offset:void 0},r=d0(e)||{line:void 0,column:void 0,offset:void 0};return{startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:r.line,endCol:r.column,endOffset:r.offset}}function $7(e){return"children"in e?Nr({...e,children:[]}):Nr(e)}function Q7(e){return function(t,r){return Lc(t,{...e,file:r})}}function c0(e){return typeof e=="string"?e:typeof e=="number"?String(e):e?Array.isArray(e)?e.map(c0).join(""):typeof e=="object"&&"props"in e?c0(e.props.children):"":""}function K7(e){return e.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function Sr(e){return function({children:r,...n}){const a=c0(r),i=n.id||K7(a);return pe.jsx(e,{...n,id:i,children:r})}}const J7={h1:Sr("h1"),h2:Sr("h2"),h3:Sr("h3"),h4:Sr("h4"),h5:Sr("h5"),h6:Sr("h6")};function a8(){const{id:e}=Bc(),t=zc.find(d=>d.id===e),[r,n]=Xr.useState(""),[a,i]=Xr.useState(null),[u,s]=Xr.useState(null);Xr.useEffect(()=>{if(!t)return;const d=new AbortController,f=t.filename;return fetch(`/blog/${f}`,{signal:d.signal}).then(g=>{if(!g.ok)throw new Error("Failed to load post");return g.text()}).then(g=>{const p=g.replace(/^\s*#[^#\n]*\r?\n/,"");n(p),i(f),s(null)}).catch(g=>{g instanceof DOMException&&g.name==="AbortError"||(console.error(g),i(f),s(f))}),()=>d.abort()},[t]);const l=!!(t&&a!==t.filename),c=!!(t&&u===t.filename);return Xr.useEffect(()=>{function d(f){const p=f.target.closest("a");if(!p)return;const x=p.getAttribute("href");if(!x||!x.startsWith("#"))return;f.preventDefault();const S=document.getElementById(x.slice(1));S&&(S.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",x))}return document.addEventListener("click",d),()=>document.removeEventListener("click",d)},[]),t?pe.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[pe.jsx(Fc,{title:`${t.title} - QECTOR Blog`,description:t.description}),pe.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[pe.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),pe.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),pe.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[pe.jsxs(P0,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[pe.jsx(Uc,{size:18,className:"mr-2"}),"Back to All Articles"]}),pe.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[pe.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[pe.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[pe.jsx(qc,{size:16,className:"mr-2"}),t.date]}),pe.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:t.category}),pe.jsxs("span",{className:"text-sm text-slate-400",children:["By ",pe.jsx(P0,{to:"/guillaume-lessard",className:"hover:text-cyan-300",children:"Guillaume Lessard"}),r?` · ${Math.max(1,Math.round(r.split(/\s+/).length/220))} min read`:""]})]}),pe.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:t.title}),pe.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:t.description})]}),pe.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:l?pe.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[pe.jsx(Yc,{size:48,className:"animate-spin text-cyan-400 mb-4"}),pe.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):c?pe.jsx("div",{className:"py-20 text-center text-red-400",children:pe.jsx("p",{children:"Failed to load the article. Please try again later."})}):pe.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:pe.jsx(Qf,{remarkPlugins:[l4,g6],rehypePlugins:[j6,Q7],components:{...J7,table:d=>{const{node:f,...g}=d;return pe.jsx("div",{className:"overflow-x-auto",children:pe.jsx("table",{...g})})},pre:d=>{const{children:f}=d,g=Fi.Children.toArray(f)[0];let p="",x="text";if(Fi.isValidElement(g)){const S=g.props,D=/language-([\w-]+)/.exec(S.className||"");D&&(x=D[1]),p=c0(S.children).replace(/\n$/,"")}return pe.jsx(Hc,{code:p,language:x,className:"not-prose"})},img:d=>{const f=d.width!=null&&d.height!=null;return pe.jsx("img",{...d,className:f?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:r})})})]})]})]}):pe.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:pe.jsxs("div",{className:"text-center",children:[pe.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),pe.jsx(P0,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{a8 as default}; diff --git a/assets/BlogPost-Cft_Na6k.js b/assets/BlogPost-Cft_Na6k.js deleted file mode 100644 index 702085b3..00000000 --- a/assets/BlogPost-Cft_Na6k.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-BN-vOeL2.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-CkWMP1e_.js b/assets/BlogPost-CkWMP1e_.js deleted file mode 100644 index 6ea45463..00000000 --- a/assets/BlogPost-CkWMP1e_.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e,R as j}from"./vendor-react-BiHfrq0e.js";import{S as w,C as k}from"./index-Bh9DBCb3.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as $,L as f}from"./vendor-PiU4YGcH.js";import{m as z,k as F,n as M}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function S(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function c(t){return function({children:i,...m}){const h=u(i),p=m.id||S(h);return e.jsx(t,{...m,id:p,children:i})}}const R={h1:c("h1"),h2:c("h2"),h3:c("h3"),h4:c("h4"),h5:c("h5"),h6:c("h6")};function W(){const{id:t}=$(),s=E.find(r=>r.id===t),[i,m]=x.useState(""),[h,p]=x.useState(null),[y,g]=x.useState(null);x.useEffect(()=>{if(!s)return;const r=new AbortController,n=s.filename;return fetch(`/blog/${n}`,{signal:r.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),g(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),g(n))}),()=>r.abort()},[s]);const N=!!(s&&h!==s.filename),v=!!(s&&y===s.filename);return x.useEffect(()=>{function r(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const d=document.getElementById(l.slice(1));d&&(d.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",r),()=>document.removeEventListener("click",r)},[]),s?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(w,{title:`${s.title} - QECTOR Blog`,description:s.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(f,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(z,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(F,{size:16,className:"mr-2"}),s.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:s.category}),e.jsxs("span",{className:"text-sm text-slate-400",children:["By ",e.jsx(f,{to:"/guillaume-lessard",className:"hover:text-cyan-300",children:"Guillaume Lessard"}),i?` · ${Math.max(1,Math.round(i.split(/\s+/).length/220))} min read`:""]})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:s.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:s.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:N?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx(M,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...R,table:r=>{const{node:n,...a}=r;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:r=>{const{children:n}=r,a=j.Children.toArray(n)[0];let o="",l="text";if(j.isValidElement(a)){const d=a.props,b=/language-([\w-]+)/.exec(d.className||"");b&&(l=b[1]),o=u(d.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:r=>{const n=r.width!=null&&r.height!=null;return e.jsx("img",{...r,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:i})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(f,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{W as default}; diff --git a/assets/BlogPost-DA4aOT_h.js b/assets/BlogPost-DA4aOT_h.js deleted file mode 100644 index 788fc8b2..00000000 --- a/assets/BlogPost-DA4aOT_h.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as j}from"./vendor-react-BiHfrq0e.js";import{S as k,C as E}from"./index-iVST85F-.js";import{b as C}from"./blogData-OjR2ZtNr.js";import{M as A,r as L,a as B,b as P,c as z}from"./vendor-md-CLKxNZoa.js";import{C as F,L as y}from"./vendor-PiU4YGcH.js";import{m as S,k as $,n as R}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function M(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||M(h);return e.jsx(t,{...m,id:p,children:x})}}const I={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=F(),r=C.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[w,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const v=!!(r&&h!==r.filename),N=!!(r&&w===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(k,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(y,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(S,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx($,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:v?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx(R,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):N?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(A,{remarkPlugins:[P,z],rehypePlugins:[L,B],components:{...I,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{node:n,children:a}=s,o=j.Children.toArray(a)[0];let l="",c="text";if(j.isValidElement(o)){const g=o.props,b=/language-([\w-]+)/.exec(g.className||"");b&&(c=b[1]),l=u(g.children).replace(/\n$/,"")}return e.jsx(E,{code:l,language:c,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(y,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-DI-YldHS.js b/assets/BlogPost-DI-YldHS.js deleted file mode 100644 index d3f702ea..00000000 --- a/assets/BlogPost-DI-YldHS.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-CxWP17m6.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-DItcK1GC.js b/assets/BlogPost-DItcK1GC.js deleted file mode 100644 index 1a010e7e..00000000 --- a/assets/BlogPost-DItcK1GC.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-DRAXObZB.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-DeO2pN01.js b/assets/BlogPost-DeO2pN01.js deleted file mode 100644 index 899712f6..00000000 --- a/assets/BlogPost-DeO2pN01.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-BUYYSLdX.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-Dhg8xum2.js b/assets/BlogPost-Dhg8xum2.js deleted file mode 100644 index c5235a68..00000000 --- a/assets/BlogPost-Dhg8xum2.js +++ /dev/null @@ -1,292 +0,0 @@ -import{g as zs,j as pe,r as Xr,R as Fi}from"./vendor-react-BiHfrq0e.js";import{b as Bc,L as P0,S as Fc,C as Hc}from"./index-CcwlvHYJ.js";import{b as zc}from"./blogData-OjR2ZtNr.js";import{m as Uc,k as qc,n as Yc}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function Hi(e){const t=[],r=String(e||"");let n=r.indexOf(","),a=0,i=!1;for(;!i;){n===-1&&(n=r.length,i=!0);const u=r.slice(a,n).trim();(u||!i)&&t.push(u),a=n+1,n=r.indexOf(",",a)}return t}function Us(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const Gc=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Vc=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,jc={};function zi(e,t){return(jc.jsx?Vc:Gc).test(e)}const Wc=/[ \t\n\f\r]/g;function Xc(e){return typeof e=="object"?e.type==="text"?Ui(e.value):!1:Ui(e)}function Ui(e){return e.replace(Wc,"")===""}class Tn{constructor(t,r,n){this.normal=r,this.property=t,n&&(this.space=n)}}Tn.prototype.normal={};Tn.prototype.property={};Tn.prototype.space=void 0;function qs(e,t){const r={},n={};for(const a of e)Object.assign(r,a.property),Object.assign(n,a.normal);return new Tn(r,n,t)}function fn(e){return e.toLowerCase()}class nt{constructor(t,r){this.attribute=r,this.property=t}}nt.prototype.attribute="";nt.prototype.booleanish=!1;nt.prototype.boolean=!1;nt.prototype.commaOrSpaceSeparated=!1;nt.prototype.commaSeparated=!1;nt.prototype.defined=!1;nt.prototype.mustUseProperty=!1;nt.prototype.number=!1;nt.prototype.overloadedBoolean=!1;nt.prototype.property="";nt.prototype.spaceSeparated=!1;nt.prototype.space=void 0;let $c=0;const le=gr(),Le=gr(),Ea=gr(),q=gr(),ye=gr(),fr=gr(),st=gr();function gr(){return 2**++$c}const Ta=Object.freeze(Object.defineProperty({__proto__:null,boolean:le,booleanish:Le,commaOrSpaceSeparated:st,commaSeparated:fr,number:q,overloadedBoolean:Ea,spaceSeparated:ye},Symbol.toStringTag,{value:"Module"})),B0=Object.keys(Ta);class Za extends nt{constructor(t,r,n,a){let i=-1;if(super(t,r),qi(this,"space",a),typeof n=="number")for(;++i4&&r.slice(0,4)==="data"&&e1.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(Yi,r1);n="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!Yi.test(i)){let u=i.replace(Zc,t1);u.charAt(0)!=="-"&&(u="-"+u),t="data"+u}}a=Za}return new a(n,t)}function t1(e){return"-"+e.toLowerCase()}function r1(e){return e.charAt(1).toUpperCase()}const xn=qs([Ys,Qc,js,Ws,Xs],"html"),rr=qs([Ys,Kc,js,Ws,Xs],"svg");function Gi(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function $s(e){return e.join(" ").trim()}var Ar={},F0,Vi;function n1(){if(Vi)return F0;Vi=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,n=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,i=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,s=/^\s+|\s+$/g,l=` -`,c="/",d="*",f="",g="comment",p="declaration";function x(D,_){if(typeof D!="string")throw new TypeError("First argument must be a string");if(!D)return[];_=_||{};var N=1,M=1;function W(ne){var X=ne.match(t);X&&(N+=X.length);var me=ne.lastIndexOf(l);M=~me?ne.length-me:M+ne.length}function j(){var ne={line:N,column:M};return function(X){return X.position=new L(ne),K(),X}}function L(ne){this.start=ne,this.end={line:N,column:M},this.source=_.source}L.prototype.content=D;function ee(ne){var X=new Error(_.source+":"+N+":"+M+": "+ne);if(X.reason=ne,X.filename=_.source,X.line=N,X.column=M,X.source=D,!_.silent)throw X}function re(ne){var X=ne.exec(D);if(X){var me=X[0];return W(me),D=D.slice(me.length),X}}function K(){re(r)}function R(ne){var X;for(ne=ne||[];X=J();)X!==!1&&ne.push(X);return ne}function J(){var ne=j();if(!(c!=D.charAt(0)||d!=D.charAt(1))){for(var X=2;f!=D.charAt(X)&&(d!=D.charAt(X)||c!=D.charAt(X+1));)++X;if(X+=2,f===D.charAt(X-1))return ee("End of comment missing");var me=D.slice(2,X-2);return M+=2,W(me),D=D.slice(X),M+=2,ne({type:g,comment:me})}}function Q(){var ne=j(),X=re(n);if(X){if(J(),!re(a))return ee("property missing ':'");var me=re(i),ke=ne({type:p,property:S(X[0].replace(e,f)),value:me?S(me[0].replace(e,f)):f});return re(u),ke}}function be(){var ne=[];R(ne);for(var X;X=Q();)X!==!1&&(ne.push(X),R(ne));return ne}return K(),be()}function S(D){return D?D.replace(s,f):f}return F0=x,F0}var ji;function a1(){if(ji)return Ar;ji=1;var e=Ar&&Ar.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Ar,"__esModule",{value:!0}),Ar.default=r;const t=e(n1());function r(n,a){let i=null;if(!n||typeof n!="string")return i;const u=(0,t.default)(n),s=typeof a=="function";return u.forEach(l=>{if(l.type!=="declaration")return;const{property:c,value:d}=l;s?a(c,d,l):d&&(i=i||{},i[c]=d)}),i}return Ar}var $r={},Wi;function i1(){if(Wi)return $r;Wi=1,Object.defineProperty($r,"__esModule",{value:!0}),$r.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,n=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,i=function(c){return!c||r.test(c)||e.test(c)},u=function(c,d){return d.toUpperCase()},s=function(c,d){return"".concat(d,"-")},l=function(c,d){return d===void 0&&(d={}),i(c)?c:(c=c.toLowerCase(),d.reactCompat?c=c.replace(a,s):c=c.replace(n,s),c.replace(t,u))};return $r.camelCase=l,$r}var Qr,Xi;function u1(){if(Xi)return Qr;Xi=1;var e=Qr&&Qr.__importDefault||function(a){return a&&a.__esModule?a:{default:a}},t=e(a1()),r=i1();function n(a,i){var u={};return!a||typeof a!="string"||(0,t.default)(a,function(s,l){s&&l&&(u[(0,r.camelCase)(s,i)]=l)}),u}return n.default=n,Qr=n,Qr}var s1=u1();const l1=zs(s1),d0=Qs("end"),_t=Qs("start");function Qs(e){return t;function t(r){const n=r&&r.position&&r.position[e]||{};if(typeof n.line=="number"&&n.line>0&&typeof n.column=="number"&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset=="number"&&n.offset>-1?n.offset:void 0}}}function o1(e){const t=_t(e),r=d0(e);if(t&&r)return{start:t,end:r}}function nn(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?$i(e.position):"start"in e||"end"in e?$i(e):"line"in e||"column"in e?xa(e):""}function xa(e){return Qi(e&&e.line)+":"+Qi(e&&e.column)}function $i(e){return xa(e&&e.start)+"-"+xa(e&&e.end)}function Qi(e){return e&&typeof e=="number"?e:1}class je extends Error{constructor(t,r,n){super(),typeof r=="string"&&(n=r,r=void 0);let a="",i={},u=!1;if(r&&("line"in r&&"column"in r?i={place:r}:"start"in r&&"end"in r?i={place:r}:"type"in r?i={ancestors:[r],place:r.position}:i={...r}),typeof t=="string"?a=t:!i.cause&&t&&(u=!0,a=t.message,i.cause=t),!i.ruleId&&!i.source&&typeof n=="string"){const l=n.indexOf(":");l===-1?i.ruleId=n:(i.source=n.slice(0,l),i.ruleId=n.slice(l+1))}if(!i.place&&i.ancestors&&i.ancestors){const l=i.ancestors[i.ancestors.length-1];l&&(i.place=l.position)}const s=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=s?s.line:void 0,this.name=nn(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=u&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}je.prototype.file="";je.prototype.name="";je.prototype.reason="";je.prototype.message="";je.prototype.stack="";je.prototype.column=void 0;je.prototype.line=void 0;je.prototype.ancestors=void 0;je.prototype.cause=void 0;je.prototype.fatal=void 0;je.prototype.place=void 0;je.prototype.ruleId=void 0;je.prototype.source=void 0;const ei={}.hasOwnProperty,c1=new Map,h1=/[A-Z]/g,d1=new Set(["table","tbody","thead","tfoot","tr"]),f1=new Set(["td","th"]),Ks="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function m1(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let n;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=v1(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=y1(r,t.jsx,t.jsxs)}const a={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:n,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?rr:xn,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},i=Js(a,e,void 0);return i&&typeof i!="string"?i:a.create(e,a.Fragment,{children:i||void 0},void 0)}function Js(e,t,r){if(t.type==="element")return p1(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return g1(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return E1(e,t,r);if(t.type==="mdxjsEsm")return b1(e,t);if(t.type==="root")return T1(e,t,r);if(t.type==="text")return x1(e,t)}function p1(e,t,r){const n=e.schema;let a=n;t.tagName.toLowerCase()==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=el(e,t.tagName,!1),u=A1(e,t);let s=ri(e,t);return d1.has(t.tagName)&&(s=s.filter(function(l){return typeof l=="string"?!Xc(l):!0})),Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function g1(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}mn(e,t.position)}function b1(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);mn(e,t.position)}function E1(e,t,r){const n=e.schema;let a=n;t.name==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=t.name===null?e.Fragment:el(e,t.name,!0),u=k1(e,t),s=ri(e,t);return Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function T1(e,t,r){const n={};return ti(n,ri(e,t)),e.create(t,e.Fragment,n,r)}function x1(e,t){return t.value}function Zs(e,t,r,n){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=n)}function ti(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function y1(e,t,r){return n;function n(a,i,u,s){const c=Array.isArray(u.children)?r:t;return s?c(i,u,s):c(i,u)}}function v1(e,t){return r;function r(n,a,i,u){const s=Array.isArray(i.children),l=_t(n);return t(a,i,u,s,{columnNumber:l?l.column-1:void 0,fileName:e,lineNumber:l?l.line:void 0},void 0)}}function A1(e,t){const r={};let n,a;for(a in t.properties)if(a!=="children"&&ei.call(t.properties,a)){const i=S1(e,a,t.properties[a]);if(i){const[u,s]=i;e.tableCellAlignToStyle&&u==="align"&&typeof s=="string"&&f1.has(t.tagName)?n=s:r[u]=s}}if(n){const i=r.style||(r.style={});i[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function k1(e,t){const r={};for(const n of t.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&e.evaluater){const i=n.data.estree.body[0];i.type;const u=i.expression;u.type;const s=u.properties[0];s.type,Object.assign(r,e.evaluater.evaluateExpression(s.argument))}else mn(e,t.position);else{const a=n.name;let i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&e.evaluater){const s=n.value.data.estree.body[0];s.type,i=e.evaluater.evaluateExpression(s.expression)}else mn(e,t.position);else i=n.value===null?!0:n.value;r[a]=i}return r}function ri(e,t){const r=[];let n=-1;const a=e.passKeys?new Map:c1;for(;++na?0:a+t:t=t>a?a:t,r=r>0?r:0,n.length<1e4)u=Array.from(n),u.unshift(t,r),e.splice(...u);else for(r&&e.splice(t,r);i0?(lt(e,e.length,0,t),e):t}const Zi={}.hasOwnProperty;function rl(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function xt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ke=nr(/[A-Za-z]/),Ge=nr(/[\dA-Za-z]/),R1=nr(/[#-'*+\--9=?A-Z^-~]/);function Zn(e){return e!==null&&(e<32||e===127)}const ya=nr(/\d/),M1=nr(/[\dA-Fa-f]/),P1=nr(/[!-/:-@[-`{-~]/);function ae(e){return e!==null&&e<-2}function ve(e){return e!==null&&(e<0||e===32)}function ge(e){return e===-2||e===-1||e===32}const f0=nr(new RegExp("\\p{P}|\\p{S}","u")),pr=nr(/\s/);function nr(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function Pr(e){const t=[];let r=-1,n=0,a=0;for(;++r55295&&i<57344){const s=e.charCodeAt(r+1);i<56320&&s>56319&&s<57344?(u=String.fromCharCode(i,s),a=1):u="�"}else u=String.fromCharCode(i);u&&(t.push(e.slice(n,r),encodeURIComponent(u)),n=r+a+1,u=""),a&&(r+=a,a=0)}return t.join("")+e.slice(n)}function fe(e,t,r,n){const a=n?n-1:Number.POSITIVE_INFINITY;let i=0;return u;function u(l){return ge(l)?(e.enter(r),s(l)):t(l)}function s(l){return ge(l)&&i++u))return;const ee=t.events.length;let re=ee,K,R;for(;re--;)if(t.events[re][0]==="exit"&&t.events[re][1].type==="chunkFlow"){if(K){R=t.events[re][1].end;break}K=!0}for(_(n),L=ee;LM;){const j=r[W];t.containerState=j[1],j[0].exit.call(t,e)}r.length=M}function N(){a.write([null]),i=void 0,a=void 0,t.containerState._closeFlow=void 0}}function U1(e,t,r){return fe(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ir(e){if(e===null||ve(e)||pr(e))return 1;if(f0(e))return 2}function m0(e,t,r){const n=[];let a=-1;for(;++a1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const f={...e[n][1].end},g={...e[r][1].start};tu(f,-l),tu(g,l),u={type:l>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},s={type:l>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:g},i={type:l>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[r][1].start}},a={type:l>1?"strong":"emphasis",start:{...u.start},end:{...s.end}},e[n][1].end={...u.start},e[r][1].start={...s.end},c=[],e[n][1].end.offset-e[n][1].start.offset&&(c=mt(c,[["enter",e[n][1],t],["exit",e[n][1],t]])),c=mt(c,[["enter",a,t],["enter",u,t],["exit",u,t],["enter",i,t]]),c=mt(c,m0(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),c=mt(c,[["exit",i,t],["enter",s,t],["exit",s,t],["exit",a,t]]),e[r][1].end.offset-e[r][1].start.offset?(d=2,c=mt(c,[["enter",e[r][1],t],["exit",e[r][1],t]])):d=0,lt(e,n-1,r-n+3,c),r=n+c.length-d-2;break}}for(r=-1;++r0&&ge(L)?fe(e,N,"linePrefix",i+1)(L):N(L)}function N(L){return L===null||ae(L)?e.check(ru,S,W)(L):(e.enter("codeFlowValue"),M(L))}function M(L){return L===null||ae(L)?(e.exit("codeFlowValue"),N(L)):(e.consume(L),M)}function W(L){return e.exit("codeFenced"),t(L)}function j(L,ee,re){let K=0;return R;function R(X){return L.enter("lineEnding"),L.consume(X),L.exit("lineEnding"),J}function J(X){return L.enter("codeFencedFence"),ge(X)?fe(L,Q,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(X):Q(X)}function Q(X){return X===s?(L.enter("codeFencedFenceSequence"),be(X)):re(X)}function be(X){return X===s?(K++,L.consume(X),be):K>=u?(L.exit("codeFencedFenceSequence"),ge(X)?fe(L,ne,"whitespace")(X):ne(X)):re(X)}function ne(X){return X===null||ae(X)?(L.exit("codeFencedFence"),ee(X)):re(X)}}}function Z1(e,t,r){const n=this;return a;function a(u){return u===null?r(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}const z0={name:"codeIndented",tokenize:th},eh={partial:!0,tokenize:rh};function th(e,t,r){const n=this;return a;function a(c){return e.enter("codeIndented"),fe(e,i,"linePrefix",5)(c)}function i(c){const d=n.events[n.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?u(c):r(c)}function u(c){return c===null?l(c):ae(c)?e.attempt(eh,u,l)(c):(e.enter("codeFlowValue"),s(c))}function s(c){return c===null||ae(c)?(e.exit("codeFlowValue"),u(c)):(e.consume(c),s)}function l(c){return e.exit("codeIndented"),t(c)}}function rh(e,t,r){const n=this;return a;function a(u){return n.parser.lazy[n.now().line]?r(u):ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),a):fe(e,i,"linePrefix",5)(u)}function i(u){const s=n.events[n.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(u):ae(u)?a(u):r(u)}}const nh={name:"codeText",previous:ih,resolve:ah,tokenize:uh};function ah(e){let t=e.length-4,r=3,n,a;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(t,r,n){const a=r||0;this.setCursor(Math.trunc(t));const i=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return n&&Kr(this.left,n),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Kr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Kr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(u):e.interrupt(n.parser.constructs.flow,r,t)(u)}}function ll(e,t,r,n,a,i,u,s,l){const c=l||Number.POSITIVE_INFINITY;let d=0;return f;function f(_){return _===60?(e.enter(n),e.enter(a),e.enter(i),e.consume(_),e.exit(i),g):_===null||_===32||_===41||Zn(_)?r(_):(e.enter(n),e.enter(u),e.enter(s),e.enter("chunkString",{contentType:"string"}),S(_))}function g(_){return _===62?(e.enter(i),e.consume(_),e.exit(i),e.exit(a),e.exit(n),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(_))}function p(_){return _===62?(e.exit("chunkString"),e.exit(s),g(_)):_===null||_===60||ae(_)?r(_):(e.consume(_),_===92?x:p)}function x(_){return _===60||_===62||_===92?(e.consume(_),p):p(_)}function S(_){return!d&&(_===null||_===41||ve(_))?(e.exit("chunkString"),e.exit(s),e.exit(u),e.exit(n),t(_)):d999||p===null||p===91||p===93&&!l||p===94&&!s&&"_hiddenFootnoteSupport"in u.parser.constructs?r(p):p===93?(e.exit(i),e.enter(a),e.consume(p),e.exit(a),e.exit(n),t):ae(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),f(p))}function f(p){return p===null||p===91||p===93||ae(p)||s++>999?(e.exit("chunkString"),d(p)):(e.consume(p),l||(l=!ge(p)),p===92?g:f)}function g(p){return p===91||p===92||p===93?(e.consume(p),s++,f):f(p)}}function cl(e,t,r,n,a,i){let u;return s;function s(g){return g===34||g===39||g===40?(e.enter(n),e.enter(a),e.consume(g),e.exit(a),u=g===40?41:g,l):r(g)}function l(g){return g===u?(e.enter(a),e.consume(g),e.exit(a),e.exit(n),t):(e.enter(i),c(g))}function c(g){return g===u?(e.exit(i),l(u)):g===null?r(g):ae(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),fe(e,c,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(g))}function d(g){return g===u||g===null||ae(g)?(e.exit("chunkString"),c(g)):(e.consume(g),g===92?f:d)}function f(g){return g===u||g===92?(e.consume(g),d):d(g)}}function an(e,t){let r;return n;function n(a){return ae(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,n):ge(a)?fe(e,n,r?"linePrefix":"lineSuffix")(a):t(a)}}const mh={name:"definition",tokenize:gh},ph={partial:!0,tokenize:bh};function gh(e,t,r){const n=this;let a;return i;function i(p){return e.enter("definition"),u(p)}function u(p){return ol.call(n,e,s,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return a=xt(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):r(p)}function l(p){return ve(p)?an(e,c)(p):c(p)}function c(p){return ll(e,d,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function d(p){return e.attempt(ph,f,f)(p)}function f(p){return ge(p)?fe(e,g,"whitespace")(p):g(p)}function g(p){return p===null||ae(p)?(e.exit("definition"),n.parser.defined.push(a),t(p)):r(p)}}function bh(e,t,r){return n;function n(s){return ve(s)?an(e,a)(s):r(s)}function a(s){return cl(e,i,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function i(s){return ge(s)?fe(e,u,"whitespace")(s):u(s)}function u(s){return s===null||ae(s)?t(s):r(s)}}const Eh={name:"hardBreakEscape",tokenize:Th};function Th(e,t,r){return n;function n(i){return e.enter("hardBreakEscape"),e.consume(i),a}function a(i){return ae(i)?(e.exit("hardBreakEscape"),t(i)):r(i)}}const xh={name:"headingAtx",resolve:yh,tokenize:vh};function yh(e,t){let r=e.length-2,n=3,a,i;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(a={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},i={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},lt(e,n,r-n+1,[["enter",a,t],["enter",i,t],["exit",i,t],["exit",a,t]])),e}function vh(e,t,r){let n=0;return a;function a(d){return e.enter("atxHeading"),i(d)}function i(d){return e.enter("atxHeadingSequence"),u(d)}function u(d){return d===35&&n++<6?(e.consume(d),u):d===null||ve(d)?(e.exit("atxHeadingSequence"),s(d)):r(d)}function s(d){return d===35?(e.enter("atxHeadingSequence"),l(d)):d===null||ae(d)?(e.exit("atxHeading"),t(d)):ge(d)?fe(e,s,"whitespace")(d):(e.enter("atxHeadingText"),c(d))}function l(d){return d===35?(e.consume(d),l):(e.exit("atxHeadingSequence"),s(d))}function c(d){return d===null||d===35||ve(d)?(e.exit("atxHeadingText"),s(d)):(e.consume(d),c)}}const Ah=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],au=["pre","script","style","textarea"],kh={concrete:!0,name:"htmlFlow",resolveTo:Ch,tokenize:_h},Sh={partial:!0,tokenize:Nh},wh={partial:!0,tokenize:Ih};function Ch(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function _h(e,t,r){const n=this;let a,i,u,s,l;return c;function c(C){return d(C)}function d(C){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(C),f}function f(C){return C===33?(e.consume(C),g):C===47?(e.consume(C),i=!0,S):C===63?(e.consume(C),a=3,n.interrupt?t:w):Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function g(C){return C===45?(e.consume(C),a=2,p):C===91?(e.consume(C),a=5,s=0,x):Ke(C)?(e.consume(C),a=4,n.interrupt?t:w):r(C)}function p(C){return C===45?(e.consume(C),n.interrupt?t:w):r(C)}function x(C){const Ye="CDATA[";return C===Ye.charCodeAt(s++)?(e.consume(C),s===Ye.length?n.interrupt?t:Q:x):r(C)}function S(C){return Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function D(C){if(C===null||C===47||C===62||ve(C)){const Ye=C===47,vt=u.toLowerCase();return!Ye&&!i&&au.includes(vt)?(a=1,n.interrupt?t(C):Q(C)):Ah.includes(u.toLowerCase())?(a=6,Ye?(e.consume(C),_):n.interrupt?t(C):Q(C)):(a=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(C):i?N(C):M(C))}return C===45||Ge(C)?(e.consume(C),u+=String.fromCharCode(C),D):r(C)}function _(C){return C===62?(e.consume(C),n.interrupt?t:Q):r(C)}function N(C){return ge(C)?(e.consume(C),N):R(C)}function M(C){return C===47?(e.consume(C),R):C===58||C===95||Ke(C)?(e.consume(C),W):ge(C)?(e.consume(C),M):R(C)}function W(C){return C===45||C===46||C===58||C===95||Ge(C)?(e.consume(C),W):j(C)}function j(C){return C===61?(e.consume(C),L):ge(C)?(e.consume(C),j):M(C)}function L(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),l=C,ee):ge(C)?(e.consume(C),L):re(C)}function ee(C){return C===l?(e.consume(C),l=null,K):C===null||ae(C)?r(C):(e.consume(C),ee)}function re(C){return C===null||C===34||C===39||C===47||C===60||C===61||C===62||C===96||ve(C)?j(C):(e.consume(C),re)}function K(C){return C===47||C===62||ge(C)?M(C):r(C)}function R(C){return C===62?(e.consume(C),J):r(C)}function J(C){return C===null||ae(C)?Q(C):ge(C)?(e.consume(C),J):r(C)}function Q(C){return C===45&&a===2?(e.consume(C),me):C===60&&a===1?(e.consume(C),ke):C===62&&a===4?(e.consume(C),Oe):C===63&&a===3?(e.consume(C),w):C===93&&a===5?(e.consume(C),at):ae(C)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(Sh,Xe,be)(C)):C===null||ae(C)?(e.exit("htmlFlowData"),be(C)):(e.consume(C),Q)}function be(C){return e.check(wh,ne,Xe)(C)}function ne(C){return e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),X}function X(C){return C===null||ae(C)?be(C):(e.enter("htmlFlowData"),Q(C))}function me(C){return C===45?(e.consume(C),w):Q(C)}function ke(C){return C===47?(e.consume(C),u="",ze):Q(C)}function ze(C){if(C===62){const Ye=u.toLowerCase();return au.includes(Ye)?(e.consume(C),Oe):Q(C)}return Ke(C)&&u.length<8?(e.consume(C),u+=String.fromCharCode(C),ze):Q(C)}function at(C){return C===93?(e.consume(C),w):Q(C)}function w(C){return C===62?(e.consume(C),Oe):C===45&&a===2?(e.consume(C),w):Q(C)}function Oe(C){return C===null||ae(C)?(e.exit("htmlFlowData"),Xe(C)):(e.consume(C),Oe)}function Xe(C){return e.exit("htmlFlow"),t(C)}}function Ih(e,t,r){const n=this;return a;function a(u){return ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i):r(u)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}function Nh(e,t,r){return n;function n(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(yn,t,r)}}const Dh={name:"htmlText",tokenize:Oh};function Oh(e,t,r){const n=this;let a,i,u;return s;function s(w){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(w),l}function l(w){return w===33?(e.consume(w),c):w===47?(e.consume(w),j):w===63?(e.consume(w),M):Ke(w)?(e.consume(w),re):r(w)}function c(w){return w===45?(e.consume(w),d):w===91?(e.consume(w),i=0,x):Ke(w)?(e.consume(w),N):r(w)}function d(w){return w===45?(e.consume(w),p):r(w)}function f(w){return w===null?r(w):w===45?(e.consume(w),g):ae(w)?(u=f,ke(w)):(e.consume(w),f)}function g(w){return w===45?(e.consume(w),p):f(w)}function p(w){return w===62?me(w):w===45?g(w):f(w)}function x(w){const Oe="CDATA[";return w===Oe.charCodeAt(i++)?(e.consume(w),i===Oe.length?S:x):r(w)}function S(w){return w===null?r(w):w===93?(e.consume(w),D):ae(w)?(u=S,ke(w)):(e.consume(w),S)}function D(w){return w===93?(e.consume(w),_):S(w)}function _(w){return w===62?me(w):w===93?(e.consume(w),_):S(w)}function N(w){return w===null||w===62?me(w):ae(w)?(u=N,ke(w)):(e.consume(w),N)}function M(w){return w===null?r(w):w===63?(e.consume(w),W):ae(w)?(u=M,ke(w)):(e.consume(w),M)}function W(w){return w===62?me(w):M(w)}function j(w){return Ke(w)?(e.consume(w),L):r(w)}function L(w){return w===45||Ge(w)?(e.consume(w),L):ee(w)}function ee(w){return ae(w)?(u=ee,ke(w)):ge(w)?(e.consume(w),ee):me(w)}function re(w){return w===45||Ge(w)?(e.consume(w),re):w===47||w===62||ve(w)?K(w):r(w)}function K(w){return w===47?(e.consume(w),me):w===58||w===95||Ke(w)?(e.consume(w),R):ae(w)?(u=K,ke(w)):ge(w)?(e.consume(w),K):me(w)}function R(w){return w===45||w===46||w===58||w===95||Ge(w)?(e.consume(w),R):J(w)}function J(w){return w===61?(e.consume(w),Q):ae(w)?(u=J,ke(w)):ge(w)?(e.consume(w),J):K(w)}function Q(w){return w===null||w===60||w===61||w===62||w===96?r(w):w===34||w===39?(e.consume(w),a=w,be):ae(w)?(u=Q,ke(w)):ge(w)?(e.consume(w),Q):(e.consume(w),ne)}function be(w){return w===a?(e.consume(w),a=void 0,X):w===null?r(w):ae(w)?(u=be,ke(w)):(e.consume(w),be)}function ne(w){return w===null||w===34||w===39||w===60||w===61||w===96?r(w):w===47||w===62||ve(w)?K(w):(e.consume(w),ne)}function X(w){return w===47||w===62||ve(w)?K(w):r(w)}function me(w){return w===62?(e.consume(w),e.exit("htmlTextData"),e.exit("htmlText"),t):r(w)}function ke(w){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),ze}function ze(w){return ge(w)?fe(e,at,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):at(w)}function at(w){return e.enter("htmlTextData"),u(w)}}const ii={name:"labelEnd",resolveAll:Ph,resolveTo:Bh,tokenize:Fh},Lh={tokenize:Hh},Rh={tokenize:zh},Mh={tokenize:Uh};function Ph(e){let t=-1;const r=[];for(;++t=3&&(c===null||ae(c))?(e.exit("thematicBreak"),t(c)):r(c)}function l(c){return c===a?(e.consume(c),n++,l):(e.exit("thematicBreakSequence"),ge(c)?fe(e,s,"whitespace")(c):s(c))}}const tt={continuation:{tokenize:Kh},exit:Zh,name:"list",tokenize:Qh},Xh={partial:!0,tokenize:ed},$h={partial:!0,tokenize:Jh};function Qh(e,t,r){const n=this,a=n.events[n.events.length-1];let i=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,u=0;return s;function s(p){const x=n.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(x==="listUnordered"?!n.containerState.marker||p===n.containerState.marker:ya(p)){if(n.containerState.type||(n.containerState.type=x,e.enter(x,{_container:!0})),x==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Xn,r,c)(p):c(p);if(!n.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return r(p)}function l(p){return ya(p)&&++u<10?(e.consume(p),l):(!n.interrupt||u<2)&&(n.containerState.marker?p===n.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),c(p)):r(p)}function c(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||p,e.check(yn,n.interrupt?r:d,e.attempt(Xh,g,f))}function d(p){return n.containerState.initialBlankLine=!0,i++,g(p)}function f(p){return ge(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),g):r(p)}function g(p){return n.containerState.size=i+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function Kh(e,t,r){const n=this;return n.containerState._closeFlow=void 0,e.check(yn,a,i);function a(s){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,fe(e,t,"listItemIndent",n.containerState.size+1)(s)}function i(s){return n.containerState.furtherBlankLines||!ge(s)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,u(s)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt($h,t,u)(s))}function u(s){return n.containerState._closeFlow=!0,n.interrupt=void 0,fe(e,e.attempt(tt,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function Jh(e,t,r){const n=this;return fe(e,a,"listItemIndent",n.containerState.size+1);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===n.containerState.size?t(i):r(i)}}function Zh(e){e.exit(this.containerState.type)}function ed(e,t,r){const n=this;return fe(e,a,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(i){const u=n.events[n.events.length-1];return!ge(i)&&u&&u[1].type==="listItemPrefixWhitespace"?t(i):r(i)}}const iu={name:"setextUnderline",resolveTo:td,tokenize:rd};function td(e,t){let r=e.length,n,a,i;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&e.splice(r,1),!i&&e[r][1].type==="definition"&&(i=r);const u={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",i?(e.splice(a,0,["enter",u,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=u,e.push(["exit",u,t]),e}function rd(e,t,r){const n=this;let a;return i;function i(c){let d=n.events.length,f;for(;d--;)if(n.events[d][1].type!=="lineEnding"&&n.events[d][1].type!=="linePrefix"&&n.events[d][1].type!=="content"){f=n.events[d][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||f)?(e.enter("setextHeadingLine"),a=c,u(c)):r(c)}function u(c){return e.enter("setextHeadingLineSequence"),s(c)}function s(c){return c===a?(e.consume(c),s):(e.exit("setextHeadingLineSequence"),ge(c)?fe(e,l,"lineSuffix")(c):l(c))}function l(c){return c===null||ae(c)?(e.exit("setextHeadingLine"),t(c)):r(c)}}const nd={tokenize:ad};function ad(e){const t=this,r=e.attempt(yn,n,e.attempt(this.parser.constructs.flowInitial,a,fe(e,e.attempt(this.parser.constructs.flow,a,e.attempt(oh,a)),"linePrefix")));return r;function n(i){if(i===null){e.consume(i);return}return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function a(i){if(i===null){e.consume(i);return}return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const id={resolveAll:dl()},ud=hl("string"),sd=hl("text");function hl(e){return{resolveAll:dl(e==="text"?ld:void 0),tokenize:t};function t(r){const n=this,a=this.parser.constructs[e],i=r.attempt(a,u,s);return u;function u(d){return c(d)?i(d):s(d)}function s(d){if(d===null){r.consume(d);return}return r.enter("data"),r.consume(d),l}function l(d){return c(d)?(r.exit("data"),i(d)):(r.consume(d),l)}function c(d){if(d===null)return!0;const f=a[d];let g=-1;if(f)for(;++g-1){const s=u[0];typeof s=="string"?u[0]=s.slice(n):u.shift()}i>0&&u.push(e[a].slice(0,i))}return u}function yd(e,t){let r=-1;const n=[];let a;for(;++r0){const Tt=ue.tokenStack[ue.tokenStack.length-1];(Tt[1]||su).call(ue,void 0,Tt[0])}for($.position={start:Vt(B.length>0?B[0][1].start:{line:1,column:1,offset:0}),end:Vt(B.length>0?B[B.length-2][1].end:{line:1,column:1,offset:0})},xe=-1;++xe0&&(n.className=["language-"+a[0]]);let i={type:"element",tagName:"code",properties:n,children:[{type:"text",value:r}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i=e.applyData(t,i),i={type:"element",tagName:"pre",properties:{},children:[i]},e.patch(t,i),i}function Md(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Pd(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Bd(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=String(t.identifier).toUpperCase(),a=Pr(n.toLowerCase()),i=e.footnoteOrder.indexOf(n);let u,s=e.footnoteCounts.get(n);s===void 0?(s=0,e.footnoteOrder.push(n),u=e.footnoteOrder.length):u=i+1,s+=1,e.footnoteCounts.set(n,s);const l={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(t,l);const c={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,c),e.applyData(t,c)}function Fd(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Hd(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function pl(e,t){const r=t.referenceType;let n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+n}];const a=e.all(t),i=a[0];i&&i.type==="text"?i.value="["+i.value:a.unshift({type:"text",value:"["});const u=a[a.length-1];return u&&u.type==="text"?u.value+=n:a.push({type:"text",value:n}),a}function zd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={src:Pr(n.url||""),alt:t.alt};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,i),e.applyData(t,i)}function Ud(e,t){const r={src:Pr(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function qd(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function Yd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={href:Pr(n.url||"")};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function Gd(e,t){const r={href:Pr(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Vd(e,t,r){const n=e.all(t),a=r?jd(r):gl(t),i={},u=[];if(typeof t.checked=="boolean"){const d=n[0];let f;d&&d.type==="element"&&d.tagName==="p"?f=d:(f={type:"element",tagName:"p",properties:{},children:[]},n.unshift(f)),f.children.length>0&&f.children.unshift({type:"text",value:" "}),f.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let s=-1;for(;++s1}function Wd(e,t){const r={},n=e.all(t);let a=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++a0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},s=_t(t.children[1]),l=d0(t.children[t.children.length-1]);s&&l&&(u.position={start:s,end:l}),a.push(u)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(t,i),e.applyData(t,i)}function Jd(e,t,r){const n=r?r.children:void 0,i=(n?n.indexOf(t):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,s=u?u.length:t.children.length;let l=-1;const c=[];for(;++l0,!0),n[0]),a=n.index+n[0].length,n=r.exec(t);return i.push(cu(t.slice(a),a>0,!1)),i.join("")}function cu(e,t,r){let n=0,a=e.length;if(t){let i=e.codePointAt(n);for(;i===lu||i===ou;)n++,i=e.codePointAt(n)}if(r){let i=e.codePointAt(a-1);for(;i===lu||i===ou;)a--,i=e.codePointAt(a-1)}return a>n?e.slice(n,a):""}function tf(e,t){const r={type:"text",value:ef(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function rf(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const nf={blockquote:Od,break:Ld,code:Rd,delete:Md,emphasis:Pd,footnoteReference:Bd,heading:Fd,html:Hd,imageReference:zd,image:Ud,inlineCode:qd,linkReference:Yd,link:Gd,listItem:Vd,list:Wd,paragraph:Xd,root:$d,strong:Qd,table:Kd,tableCell:Zd,tableRow:Jd,text:tf,thematicBreak:rf,toml:Mn,yaml:Mn,definition:Mn,footnoteDefinition:Mn};function Mn(){}const bl=-1,p0=0,un=1,e0=2,ui=3,si=4,li=5,oi=6,El=7,Tl=8,xl=typeof self=="object"?self:globalThis,hu=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new xl[e](t)},af=(e,t)=>{const r=(a,i)=>(e.set(i,a),a),n=a=>{if(e.has(a))return e.get(a);const[i,u]=t[a];switch(i){case p0:case bl:return r(u,a);case un:{const s=r([],a);for(const l of u)s.push(n(l));return s}case e0:{const s=r({},a);for(const[l,c]of u)s[n(l)]=n(c);return s}case ui:return r(new Date(u),a);case si:{const{source:s,flags:l}=u;return r(new RegExp(s,l),a)}case li:{const s=r(new Map,a);for(const[l,c]of u)s.set(n(l),n(c));return s}case oi:{const s=r(new Set,a);for(const l of u)s.add(n(l));return s}case El:{const{name:s,message:l}=u;return r(typeof xl[s]=="function"?hu(s,l):new Error(l),a)}case Tl:return r(BigInt(u),a);case"BigInt":return r(Object(BigInt(u)),a);case"ArrayBuffer":return r(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:s}=new Uint8Array(u);return r(new DataView(s),u)}}return r(hu(i,u),a)};return n},du=e=>af(new Map,e)(0),hr="",{toString:uf}={},{keys:sf}=Object,Jr=e=>{const t=typeof e;if(t!=="object"||!e)return[p0,t];const r=uf.call(e).slice(8,-1);switch(r){case"Array":return[un,hr];case"Object":return[e0,hr];case"Date":return[ui,hr];case"RegExp":return[si,hr];case"Map":return[li,hr];case"Set":return[oi,hr];case"DataView":return[un,r]}return r.includes("Array")?[un,r]:e instanceof Error?[El,e.name||"Error"]:[e0,r]},Pn=([e,t])=>e===p0&&(t==="function"||t==="symbol"),lf=(e,t,r,n)=>{const a=(u,s)=>{const l=n.push(u)-1;return r.set(s,l),l},i=u=>{if(r.has(u))return r.get(u);let[s,l]=Jr(u);switch(s){case p0:{let d=u;switch(l){case"bigint":s=Tl,d=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+l);d=null;break;case"undefined":return a([bl],u)}return a([s,d],u)}case un:{if(l){let g=u;return l==="DataView"?g=new Uint8Array(u.buffer):l==="ArrayBuffer"&&(g=new Uint8Array(u)),a([l,[...g]],u)}const d=[],f=a([s,d],u);for(const g of u)d.push(i(g));return f}case e0:{if(l)switch(l){case"BigInt":return a([l,u.toString()],u);case"Boolean":case"Number":case"String":return a([l,u.valueOf()],u)}if(t&&"toJSON"in u)return i(u.toJSON());const d=[],f=a([s,d],u);for(const g of sf(u))(e||!Pn(Jr(u[g])))&&d.push([i(g),i(u[g])]);return f}case ui:return a([s,isNaN(u.getTime())?hr:u.toISOString()],u);case si:{const{source:d,flags:f}=u;return a([s,{source:d,flags:f}],u)}case li:{const d=[],f=a([s,d],u);for(const[g,p]of u)(e||!(Pn(Jr(g))||Pn(Jr(p))))&&d.push([i(g),i(p)]);return f}case oi:{const d=[],f=a([s,d],u);for(const g of u)(e||!Pn(Jr(g)))&&d.push(i(g));return f}}const{message:c}=u;return a([s,{name:l,message:c}],u)};return i},fu=(e,{json:t,lossy:r}={})=>{const n=[];return lf(!(t||r),!!t,new Map,n)(e),n},Nr=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?du(fu(e,t)):structuredClone(e):(e,t)=>du(fu(e,t));function of(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function cf(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function hf(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||of,n=e.options.footnoteBackLabel||cf,a=e.options.footnoteLabel||"Footnotes",i=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let l=-1;for(;++l0&&x.push({type:"text",value:" "});let N=typeof r=="string"?r:r(l,p);typeof N=="string"&&(N={type:"text",value:N}),x.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof n=="string"?n:n(l,p),className:["data-footnote-backref"]},children:Array.isArray(N)?N:[N]})}const D=d[d.length-1];if(D&&D.type==="element"&&D.tagName==="p"){const N=D.children[D.children.length-1];N&&N.type==="text"?N.value+=" ":D.children.push({type:"text",value:" "}),D.children.push(...x)}else d.push(...x);const _={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(d,!0)};e.patch(c,_),s.push(_)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...Nr(u),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` -`}]}}const vn=(function(e){if(e==null)return pf;if(typeof e=="function")return g0(e);if(typeof e=="object")return Array.isArray(e)?df(e):ff(e);if(typeof e=="string")return mf(e);throw new Error("Expected function, string, or object as test")});function df(e){const t=[];let r=-1;for(;++r":""))+")"})}return g;function g(){let p=yl,x,S,D;if((!t||i(l,c,d[d.length-1]||void 0))&&(p=Ef(r(l,d)),p[0]===Aa))return p;if("children"in l&&l.children){const _=l;if(_.children&&p[0]!==vl)for(S=(n?_.children.length:-1)+u,D=d.concat(_);S>-1&&S<_.children.length;){const N=_.children[S];if(x=s(N,S,D)(),x[0]===Aa)return x;S=typeof x[1]=="number"?x[1]:S+u}}return p}}}function Ef(e){return Array.isArray(e)?e:typeof e=="number"?[bf,e]:e==null?yl:[e]}function b0(e,t,r,n){let a,i,u;typeof t=="function"&&typeof r!="function"?(i=void 0,u=t,a=r):(i=t,u=r,a=n),ci(e,i,s,a);function s(l,c){const d=c[c.length-1],f=d?d.children.indexOf(l):void 0;return u(l,f,d)}}const ka={}.hasOwnProperty,Tf={};function xf(e,t){const r=t||Tf,n=new Map,a=new Map,i=new Map,u={...nf,...r.handlers},s={all:c,applyData:vf,definitionById:n,footnoteById:a,footnoteCounts:i,footnoteOrder:[],handlers:u,one:l,options:r,patch:yf,wrap:kf};return b0(e,function(d){if(d.type==="definition"||d.type==="footnoteDefinition"){const f=d.type==="definition"?n:a,g=String(d.identifier).toUpperCase();f.has(g)||f.set(g,d)}}),s;function l(d,f){const g=d.type,p=s.handlers[g];if(ka.call(s.handlers,g)&&p)return p(s,d,f);if(s.options.passThrough&&s.options.passThrough.includes(g)){if("children"in d){const{children:S,...D}=d,_=Nr(D);return _.children=s.all(d),_}return Nr(d)}return(s.options.unknownHandler||Af)(s,d,f)}function c(d){const f=[];if("children"in d){const g=d.children;let p=-1;for(;++p0&&r.push({type:"text",value:` -`}),r}function mu(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function pu(e,t){const r=xf(e,t),n=r.one(e,void 0),a=hf(r),i=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return a&&i.children.push({type:"text",value:` -`},a),i}function Sf(e,t){return e&&"run"in e?async function(r,n){const a=pu(r,{file:n,...t});await e.run(a,n)}:function(r,n){return pu(r,{file:n,...e||t})}}function gu(e){if(e)throw e}var q0,bu;function wf(){if(bu)return q0;bu=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=function(c){return typeof Array.isArray=="function"?Array.isArray(c):t.call(c)==="[object Array]"},i=function(c){if(!c||t.call(c)!=="[object Object]")return!1;var d=e.call(c,"constructor"),f=c.constructor&&c.constructor.prototype&&e.call(c.constructor.prototype,"isPrototypeOf");if(c.constructor&&!d&&!f)return!1;var g;for(g in c);return typeof g>"u"||e.call(c,g)},u=function(c,d){r&&d.name==="__proto__"?r(c,d.name,{enumerable:!0,configurable:!0,value:d.newValue,writable:!0}):c[d.name]=d.newValue},s=function(c,d){if(d==="__proto__")if(e.call(c,d)){if(n)return n(c,d).value}else return;return c[d]};return q0=function l(){var c,d,f,g,p,x,S=arguments[0],D=1,_=arguments.length,N=!1;for(typeof S=="boolean"&&(N=S,S=arguments[1]||{},D=2),(S==null||typeof S!="object"&&typeof S!="function")&&(S={});D<_;++D)if(c=arguments[D],c!=null)for(d in c)f=s(S,d),g=s(c,d),S!==g&&(N&&g&&(i(g)||(p=a(g)))?(p?(p=!1,x=f&&a(f)?f:[]):x=f&&i(f)?f:{},u(S,{name:d,newValue:l(N,x,g)})):typeof g<"u"&&u(S,{name:d,newValue:g}));return S},q0}var Cf=wf();const Y0=zs(Cf);function Sa(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function _f(){const e=[],t={run:r,use:n};return t;function r(...a){let i=-1;const u=a.pop();if(typeof u!="function")throw new TypeError("Expected function as last argument, not "+u);s(null,...a);function s(l,...c){const d=e[++i];let f=-1;if(l){u(l);return}for(;++fu.length;let l;s&&u.push(a);try{l=e.apply(this,u)}catch(c){const d=c;if(s&&r)throw d;return a(d)}s||(l&&l.then&&typeof l.then=="function"?l.then(i,a):l instanceof Error?a(l):i(l))}function a(u,...s){r||(r=!0,t(u,...s))}function i(u){a(null,u)}}const At={basename:Nf,dirname:Df,extname:Of,join:Lf,sep:"/"};function Nf(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');An(e);let r=0,n=-1,a=e.length,i;if(t===void 0||t.length===0||t.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else n<0&&(i=!0,n=a+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let u=-1,s=t.length-1;for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else u<0&&(i=!0,u=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(n=a):(s=-1,n=u));return r===n?n=u:n<0&&(n=e.length),e.slice(r,n)}function Df(e){if(An(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function Of(e){An(e);let t=e.length,r=-1,n=0,a=-1,i=0,u;for(;t--;){const s=e.codePointAt(t);if(s===47){if(u){n=t+1;break}continue}r<0&&(u=!0,r=t+1),s===46?a<0?a=t:i!==1&&(i=1):a>-1&&(i=-1)}return a<0||r<0||i===0||i===1&&a===r-1&&a===n+1?"":e.slice(a,r)}function Lf(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function Mf(e,t){let r="",n=0,a=-1,i=0,u=-1,s,l;for(;++u<=e.length;){if(u2){if(l=r.lastIndexOf("/"),l!==r.length-1){l<0?(r="",n=0):(r=r.slice(0,l),n=r.length-1-r.lastIndexOf("/")),a=u,i=0;continue}}else if(r.length>0){r="",n=0,a=u,i=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(a+1,u):r=e.slice(a+1,u),n=u-a-1;a=u,i=0}else s===46&&i>-1?i++:i=-1}return r}function An(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Pf={cwd:Bf};function Bf(){return"/"}function wa(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function Ff(e){if(typeof e=="string")e=new URL(e);else if(!wa(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return Hf(e)}function Hf(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r0){let[p,...x]=d;const S=n[g][1];Sa(S)&&Sa(p)&&(p=Y0(!0,S,p)),n[g]=[c,p,...x]}}}}const Yf=new hi().freeze();function W0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function X0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function $0(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Tu(e){if(!Sa(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function xu(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Bn(e){return Gf(e)?e:new Al(e)}function Gf(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function Vf(e){return typeof e=="string"||jf(e)}function jf(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Wf="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",yu=[],vu={allowDangerousHtml:!0},Xf=/^(https?|ircs?|mailto|xmpp)$/i,$f=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Qf(e){const t=Kf(e),r=Jf(e);return Zf(t.runSync(t.parse(r),r),e)}function Kf(e){const t=e.rehypePlugins||yu,r=e.remarkPlugins||yu,n=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...vu}:vu;return Yf().use(Dd).use(r).use(Sf,n).use(t)}function Jf(e){const t=e.children||"",r=new Al;return typeof t=="string"&&(r.value=t),r}function Zf(e,t){const r=t.allowedElements,n=t.allowElement,a=t.components,i=t.disallowedElements,u=t.skipHtml,s=t.unwrapDisallowed,l=t.urlTransform||em;for(const d of $f)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+Wf+d.id,void 0);return b0(e,c),m1(e,{Fragment:pe.Fragment,components:a,ignoreInvalidStyle:!0,jsx:pe.jsx,jsxs:pe.jsxs,passKeys:!0,passNode:!0});function c(d,f,g){if(d.type==="raw"&&g&&typeof f=="number")return u?g.children.splice(f,1):g.children[f]={type:"text",value:d.value},f;if(d.type==="element"){let p;for(p in H0)if(Object.hasOwn(H0,p)&&Object.hasOwn(d.properties,p)){const x=d.properties[p],S=H0[p];(S===null||S.includes(d.tagName))&&(d.properties[p]=l(String(x||""),p,d))}}if(d.type==="element"){let p=r?!r.includes(d.tagName):i?i.includes(d.tagName):!1;if(!p&&n&&typeof f=="number"&&(p=!n(d,f,g)),p&&g&&typeof f=="number")return s&&d.children?g.children.splice(f,1,...d.children):g.children.splice(f,1),f}}}function em(e){const t=e.indexOf(":"),r=e.indexOf("?"),n=e.indexOf("#"),a=e.indexOf("/");return t===-1||a!==-1&&t>a||r!==-1&&t>r||n!==-1&&t>n||Xf.test(e.slice(0,t))?e:""}function Au(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let n=0,a=r.indexOf(t);for(;a!==-1;)n++,a=r.indexOf(t,a+t.length);return n}function tm(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function rm(e,t,r){const a=vn((r||{}).ignore||[]),i=nm(t);let u=-1;for(;++u0?{type:"text",value:L}:void 0),L===!1?g.lastIndex=W+1:(x!==W&&N.push({type:"text",value:c.value.slice(x,W)}),Array.isArray(L)?N.push(...L):L&&N.push(L),x=W+M[0].length,_=!0),!g.global)break;M=g.exec(c.value)}return _?(x?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],n=r.indexOf(")");const a=Au(e,"(");let i=Au(e,")");for(;n!==-1&&a>i;)e+=r.slice(0,n+1),r=r.slice(n+1),n=r.indexOf(")"),i++;return[e,r]}function kl(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||pr(r)||f0(r))&&(!t||r!==47)}Sl.peek=wm;function Em(){this.buffer()}function Tm(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function xm(){this.buffer()}function ym(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function vm(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Am(e){this.exit(e)}function km(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Sm(e){this.exit(e)}function wm(){return"["}function Sl(e,t,r,n){const a=r.createTracker(n);let i=a.move("[^");const u=r.enter("footnoteReference"),s=r.enter("reference");return i+=a.move(r.safe(r.associationId(e),{after:"]",before:i})),s(),u(),i+=a.move("]"),i}function Cm(){return{enter:{gfmFootnoteCallString:Em,gfmFootnoteCall:Tm,gfmFootnoteDefinitionLabelString:xm,gfmFootnoteDefinition:ym},exit:{gfmFootnoteCallString:vm,gfmFootnoteCall:Am,gfmFootnoteDefinitionLabelString:km,gfmFootnoteDefinition:Sm}}}function _m(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:Sl},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(n,a,i,u){const s=i.createTracker(u);let l=s.move("[^");const c=i.enter("footnoteDefinition"),d=i.enter("label");return l+=s.move(i.safe(i.associationId(n),{before:l,after:"]"})),d(),l+=s.move("]:"),n.children&&n.children.length>0&&(s.shift(4),l+=s.move((t?` -`:" ")+i.indentLines(i.containerFlow(n,s.current()),t?wl:Im))),c(),l}}function Im(e,t,r){return t===0?e:wl(e,t,r)}function wl(e,t,r){return(r?"":" ")+e}const Nm=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Cl.peek=Mm;function Dm(){return{canContainEols:["delete"],enter:{strikethrough:Lm},exit:{strikethrough:Rm}}}function Om(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Nm}],handlers:{delete:Cl}}}function Lm(e){this.enter({type:"delete",children:[]},e)}function Rm(e){this.exit(e)}function Cl(e,t,r,n){const a=r.createTracker(n),i=r.enter("strikethrough");let u=a.move("~~");return u+=r.containerPhrasing(e,{...a.current(),before:u,after:"~"}),u+=a.move("~~"),i(),u}function Mm(){return"~"}function Pm(e){return e.length}function Bm(e,t){const r=t||{},n=(r.align||[]).concat(),a=r.stringLength||Pm,i=[],u=[],s=[],l=[];let c=0,d=-1;for(;++dc&&(c=e[d].length);++_l[_])&&(l[_]=M)}S.push(N)}u[d]=S,s[d]=D}let f=-1;if(typeof n=="object"&&"length"in n)for(;++fl[f]&&(l[f]=N),p[f]=N),g[f]=M}u.splice(1,0,g),s.splice(1,0,p),d=-1;const x=[];for(;++d "),i.shift(2);const u=r.indentLines(r.containerFlow(e,i.current()),zm);return a(),u}function zm(e,t,r){return">"+(r?"":" ")+e}function Um(e,t){return wu(e,t.inConstruct,!0)&&!wu(e,t.notInConstruct,!1)}function wu(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let n=-1;for(;++nu&&(u=i):i=1,a=n+t.length,n=r.indexOf(t,a);return u}function qm(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Ym(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function Gm(e,t,r,n){const a=Ym(r),i=e.value||"",u=a==="`"?"GraveAccent":"Tilde";if(qm(e,r)){const f=r.enter("codeIndented"),g=r.indentLines(i,Vm);return f(),g}const s=r.createTracker(n),l=a.repeat(Math.max(Il(i,a)+1,3)),c=r.enter("codeFenced");let d=s.move(l);if(e.lang){const f=r.enter(`codeFencedLang${u}`);d+=s.move(r.safe(e.lang,{before:d,after:" ",encode:["`"],...s.current()})),f()}if(e.lang&&e.meta){const f=r.enter(`codeFencedMeta${u}`);d+=s.move(" "),d+=s.move(r.safe(e.meta,{before:d,after:` -`,encode:["`"],...s.current()})),f()}return d+=s.move(` -`),i&&(d+=s.move(i+` -`)),d+=s.move(l),c(),d}function Vm(e,t,r){return(r?"":" ")+e}function di(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function jm(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("definition");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("[");return c+=l.move(r.safe(r.associationId(e),{before:c,after:"]",...l.current()})),c+=l.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":` -`,...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),u(),c}function Wm(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function pn(e){return"&#x"+e.toString(16).toUpperCase()+";"}function t0(e,t,r){const n=Ir(e),a=Ir(t);return n===void 0?a===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:n===1?a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Nl.peek=Xm;function Nl(e,t,r,n){const a=Wm(r),i=r.enter("emphasis"),u=r.createTracker(n),s=u.move(a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function Xm(e,t,r){return r.options.emphasis||"*"}function $m(e,t){let r=!1;return b0(e,function(n){if("value"in n&&/\r?\n|\r/.test(n.value)||n.type==="break")return r=!0,Aa}),!!((!e.depth||e.depth<3)&&ni(e)&&(t.options.setext||r))}function Qm(e,t,r,n){const a=Math.max(Math.min(6,e.depth||1),1),i=r.createTracker(n);if($m(e,r)){const d=r.enter("headingSetext"),f=r.enter("phrasing"),g=r.containerPhrasing(e,{...i.current(),before:` -`,after:` -`});return f(),d(),g+` -`+(a===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` -`))+1))}const u="#".repeat(a),s=r.enter("headingAtx"),l=r.enter("phrasing");i.move(u+" ");let c=r.containerPhrasing(e,{before:"# ",after:` -`,...i.current()});return/^[\t ]/.test(c)&&(c=pn(c.charCodeAt(0))+c.slice(1)),c=c?u+" "+c:u,r.options.closeAtx&&(c+=" "+u),l(),s(),c}Dl.peek=Km;function Dl(e){return e.value||""}function Km(){return"<"}Ol.peek=Jm;function Ol(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("image");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("![");return c+=l.move(r.safe(e.alt,{before:c,after:"]",...l.current()})),c+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),c+=l.move(")"),u(),c}function Jm(){return"!"}Ll.peek=Zm;function Ll(e,t,r,n){const a=e.referenceType,i=r.enter("imageReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("![");const c=r.safe(e.alt,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function Zm(){return"!"}Rl.peek=e2;function Rl(e,t,r){let n=e.value||"",a="`",i=-1;for(;new RegExp("(^|[^`])"+a+"([^`]|$)").test(n);)a+="`";for(/[^ \r\n]/.test(n)&&(/^[ \r\n]/.test(n)&&/[ \r\n]$/.test(n)||/^`|`$/.test(n))&&(n=" "+n+" ");++i\u007F]/.test(e.url))}Pl.peek=t2;function Pl(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.createTracker(n);let s,l;if(Ml(e,r)){const d=r.stack;r.stack=[],s=r.enter("autolink");let f=u.move("<");return f+=u.move(r.containerPhrasing(e,{before:f,after:">",...u.current()})),f+=u.move(">"),s(),r.stack=d,f}s=r.enter("link"),l=r.enter("label");let c=u.move("[");return c+=u.move(r.containerPhrasing(e,{before:c,after:"](",...u.current()})),c+=u.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=r.enter("destinationLiteral"),c+=u.move("<"),c+=u.move(r.safe(e.url,{before:c,after:">",...u.current()})),c+=u.move(">")):(l=r.enter("destinationRaw"),c+=u.move(r.safe(e.url,{before:c,after:e.title?" ":")",...u.current()}))),l(),e.title&&(l=r.enter(`title${i}`),c+=u.move(" "+a),c+=u.move(r.safe(e.title,{before:c,after:a,...u.current()})),c+=u.move(a),l()),c+=u.move(")"),s(),c}function t2(e,t,r){return Ml(e,r)?"<":"["}Bl.peek=r2;function Bl(e,t,r,n){const a=e.referenceType,i=r.enter("linkReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("[");const c=r.containerPhrasing(e,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function r2(){return"["}function fi(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function n2(e){const t=fi(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function a2(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Fl(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function i2(e,t,r,n){const a=r.enter("list"),i=r.bulletCurrent;let u=e.ordered?a2(r):fi(r);const s=e.ordered?u==="."?")":".":n2(r);let l=t&&r.bulletLastUsed?u===r.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((u==="*"||u==="-")&&d&&(!d.children||!d.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(l=!0),Fl(r)===u&&d){let f=-1;for(;++f-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+i);let u=i.length+1;(a==="tab"||a==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(u=Math.ceil(u/4)*4);const s=r.createTracker(n);s.move(i+" ".repeat(u-i.length)),s.shift(u);const l=r.enter("listItem"),c=r.indentLines(r.containerFlow(e,s.current()),d);return l(),c;function d(f,g,p){return g?(p?"":" ".repeat(u))+f:(p?i:i+" ".repeat(u-i.length))+f}}function l2(e,t,r,n){const a=r.enter("paragraph"),i=r.enter("phrasing"),u=r.containerPhrasing(e,n);return i(),a(),u}const o2=vn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function c2(e,t,r,n){return(e.children.some(function(u){return o2(u)})?r.containerPhrasing:r.containerFlow).call(r,e,n)}function h2(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}Hl.peek=d2;function Hl(e,t,r,n){const a=h2(r),i=r.enter("strong"),u=r.createTracker(n),s=u.move(a+a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a+a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function d2(e,t,r){return r.options.strong||"*"}function f2(e,t,r,n){return r.safe(e.value,n)}function m2(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function p2(e,t,r){const n=(Fl(r)+(r.options.ruleSpaces?" ":"")).repeat(m2(r));return r.options.ruleSpaces?n.slice(0,-1):n}const zl={blockquote:Hm,break:Cu,code:Gm,definition:jm,emphasis:Nl,hardBreak:Cu,heading:Qm,html:Dl,image:Ol,imageReference:Ll,inlineCode:Rl,link:Pl,linkReference:Bl,list:i2,listItem:s2,paragraph:l2,root:c2,strong:Hl,text:f2,thematicBreak:p2};function g2(){return{enter:{table:b2,tableData:_u,tableHeader:_u,tableRow:T2},exit:{codeText:x2,table:E2,tableData:Z0,tableHeader:Z0,tableRow:Z0}}}function b2(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function E2(e){this.exit(e),this.data.inTable=void 0}function T2(e){this.enter({type:"tableRow",children:[]},e)}function Z0(e){this.exit(e)}function _u(e){this.enter({type:"tableCell",children:[]},e)}function x2(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,y2));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function y2(e,t){return t==="|"?t:e}function v2(e){const t=e||{},r=t.tableCellPadding,n=t.tablePipeAlign,a=t.stringLength,i=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:u,tableCell:l,tableRow:s}};function u(p,x,S,D){return c(d(p,S,D),p.align)}function s(p,x,S,D){const _=f(p,S,D),N=c([_]);return N.slice(0,N.indexOf(` -`))}function l(p,x,S,D){const _=S.enter("tableCell"),N=S.enter("phrasing"),M=S.containerPhrasing(p,{...D,before:i,after:i});return N(),_(),M}function c(p,x){return Bm(p,{align:x,alignDelimiters:n,padding:r,stringLength:a})}function d(p,x,S){const D=p.children;let _=-1;const N=[],M=x.enter("table");for(;++_0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const z2={tokenize:X2,partial:!0};function U2(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:V2,continuation:{tokenize:j2},exit:W2}},text:{91:{name:"gfmFootnoteCall",tokenize:G2},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:q2,resolveTo:Y2}}}}function q2(e,t,r){const n=this;let a=n.events.length;const i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let u;for(;a--;){const l=n.events[a][1];if(l.type==="labelImage"){u=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!u||!u._balanced)return r(l);const c=xt(n.sliceSerialize({start:u.end,end:n.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?r(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),t(l))}}function Y2(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const n={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},s=[e[r+1],e[r+2],["enter",n,t],e[r+3],e[r+4],["enter",a,t],["exit",a,t],["enter",i,t],["enter",u,t],["exit",u,t],["exit",i,t],e[e.length-2],e[e.length-1],["exit",n,t]];return e.splice(r,e.length-r+1,...s),e}function G2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i=0,u;return s;function s(f){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),l}function l(f){return f!==94?r(f):(e.enter("gfmFootnoteCallMarker"),e.consume(f),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(f){if(i>999||f===93&&!u||f===null||f===91||ve(f))return r(f);if(f===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return a.includes(xt(n.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(f)}return ve(f)||(u=!0),i++,e.consume(f),f===92?d:c}function d(f){return f===91||f===92||f===93?(e.consume(f),i++,c):c(f)}}function V2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i,u=0,s;return l;function l(x){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(x){return x===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):r(x)}function d(x){if(u>999||x===93&&!s||x===null||x===91||ve(x))return r(x);if(x===93){e.exit("chunkString");const S=e.exit("gfmFootnoteDefinitionLabelString");return i=xt(n.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return ve(x)||(s=!0),u++,e.consume(x),x===92?f:d}function f(x){return x===91||x===92||x===93?(e.consume(x),u++,d):d(x)}function g(x){return x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),a.includes(i)||a.push(i),fe(e,p,"gfmFootnoteDefinitionWhitespace")):r(x)}function p(x){return t(x)}}function j2(e,t,r){return e.check(yn,t,e.attempt(z2,t,r))}function W2(e){e.exit("gfmFootnoteDefinition")}function X2(e,t,r){const n=this;return fe(e,a,"gfmFootnoteDefinitionIndent",5);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="gfmFootnoteDefinitionIndent"&&u[2].sliceSerialize(u[1],!0).length===4?t(i):r(i)}}function $2(e){let r=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:i,resolveAll:a};return r==null&&(r=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function a(u,s){let l=-1;for(;++l1?l(x):(u.consume(x),f++,p);if(f<2&&!r)return l(x);const D=u.exit("strikethroughSequenceTemporary"),_=Ir(x);return D._open=!_||_===2&&!!S,D._close=!S||S===2&&!!_,s(x)}}}class Q2{constructor(){this.map=[]}add(t,r,n){K2(this,t,r,n)}consume(t){if(this.map.sort(function(i,u){return i[0]-u[0]}),this.map.length===0)return;let r=this.map.length;const n=[];for(;r>0;)r-=1,n.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];n.push(t.slice()),t.length=0;let a=n.pop();for(;a;){for(const i of a)t.push(i);a=n.pop()}this.map.length=0}}function K2(e,t,r,n){let a=0;if(!(r===0&&n.length===0)){for(;a-1;){const ne=n.events[J][1].type;if(ne==="lineEnding"||ne==="linePrefix")J--;else break}const Q=J>-1?n.events[J][1].type:null,be=Q==="tableHead"||Q==="tableRow"?L:l;return be===L&&n.parser.lazy[n.now().line]?r(R):be(R)}function l(R){return e.enter("tableHead"),e.enter("tableRow"),c(R)}function c(R){return R===124||(u=!0,i+=1),d(R)}function d(R){return R===null?r(R):ae(R)?i>1?(i=0,n.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),p):r(R):ge(R)?fe(e,d,"whitespace")(R):(i+=1,u&&(u=!1,a+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),u=!0,d):(e.enter("data"),f(R)))}function f(R){return R===null||R===124||ve(R)?(e.exit("data"),d(R)):(e.consume(R),R===92?g:f)}function g(R){return R===92||R===124?(e.consume(R),f):f(R)}function p(R){return n.interrupt=!1,n.parser.lazy[n.now().line]?r(R):(e.enter("tableDelimiterRow"),u=!1,ge(R)?fe(e,x,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):x(R))}function x(R){return R===45||R===58?D(R):R===124?(u=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),S):j(R)}function S(R){return ge(R)?fe(e,D,"whitespace")(R):D(R)}function D(R){return R===58?(i+=1,u=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),_):R===45?(i+=1,_(R)):R===null||ae(R)?W(R):j(R)}function _(R){return R===45?(e.enter("tableDelimiterFiller"),N(R)):j(R)}function N(R){return R===45?(e.consume(R),N):R===58?(u=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),M):(e.exit("tableDelimiterFiller"),M(R))}function M(R){return ge(R)?fe(e,W,"whitespace")(R):W(R)}function W(R){return R===124?x(R):R===null||ae(R)?!u||a!==i?j(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):j(R)}function j(R){return r(R)}function L(R){return e.enter("tableRow"),ee(R)}function ee(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),ee):R===null||ae(R)?(e.exit("tableRow"),t(R)):ge(R)?fe(e,ee,"whitespace")(R):(e.enter("data"),re(R))}function re(R){return R===null||R===124||ve(R)?(e.exit("data"),ee(R)):(e.consume(R),R===92?K:re)}function K(R){return R===92||R===124?(e.consume(R),re):re(R)}}function t4(e,t){let r=-1,n=!0,a=0,i=[0,0,0,0],u=[0,0,0,0],s=!1,l=0,c,d,f;const g=new Q2;for(;++rr[2]+1){const x=r[2]+1,S=r[3]-r[2]-1;e.add(x,S,[])}}e.add(r[3]+1,0,[["exit",f,t]])}return a!==void 0&&(i.end=Object.assign({},wr(t.events,a)),e.add(a,0,[["exit",i,t]]),i=void 0),i}function Nu(e,t,r,n,a){const i=[],u=wr(t.events,r);a&&(a.end=Object.assign({},u),i.push(["exit",a,t])),n.end=Object.assign({},u),i.push(["exit",n,t]),e.add(r+1,0,i)}function wr(e,t){const r=e[t],n=r[0]==="enter"?"start":"end";return r[1][n]}const r4={name:"tasklistCheck",tokenize:a4};function n4(){return{text:{91:r4}}}function a4(e,t,r){const n=this;return a;function a(l){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?r(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),i)}function i(l){return ve(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),u):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),u):r(l)}function u(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):r(l)}function s(l){return ae(l)?t(l):ge(l)?e.check({tokenize:i4},t,r)(l):r(l)}}function i4(e,t,r){return fe(e,n,"whitespace");function n(a){return a===null?r(a):t(a)}}function u4(e){return rl([D2(),U2(),$2(e),Z2(),n4()])}const s4={};function l4(e){const t=this,r=e||s4,n=t.data(),a=n.micromarkExtensions||(n.micromarkExtensions=[]),i=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),u=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);a.push(u4(r)),i.push(C2()),u.push(_2(r))}function o4(){return{enter:{mathFlow:e,mathFlowFenceMeta:t,mathText:i},exit:{mathFlow:a,mathFlowFence:n,mathFlowFenceMeta:r,mathFlowValue:s,mathText:u,mathTextData:s}};function e(l){const c={type:"element",tagName:"code",properties:{className:["language-math","math-display"]},children:[]};this.enter({type:"math",meta:null,value:"",data:{hName:"pre",hChildren:[c]}},l)}function t(){this.buffer()}function r(){const l=this.resume(),c=this.stack[this.stack.length-1];c.type,c.meta=l}function n(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function a(l){const c=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c;const f=d.data.hChildren[0];f.type,f.tagName,f.children.push({type:"text",value:c}),this.data.mathFlowInside=void 0}function i(l){this.enter({type:"inlineMath",value:"",data:{hName:"code",hProperties:{className:["language-math","math-inline"]},hChildren:[]}},l),this.buffer()}function u(l){const c=this.resume(),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c,d.data.hChildren.push({type:"text",value:c})}function s(l){this.config.enter.data.call(this,l),this.config.exit.data.call(this,l)}}function c4(e){let t=(e||{}).singleDollarTextMath;return t==null&&(t=!0),n.peek=a,{unsafe:[{character:"\r",inConstruct:"mathFlowMeta"},{character:` -`,inConstruct:"mathFlowMeta"},{character:"$",after:t?void 0:"\\$",inConstruct:"phrasing"},{character:"$",inConstruct:"mathFlowMeta"},{atBreak:!0,character:"$",after:"\\$"}],handlers:{math:r,inlineMath:n}};function r(i,u,s,l){const c=i.value||"",d=s.createTracker(l),f="$".repeat(Math.max(Il(c,"$")+1,2)),g=s.enter("mathFlow");let p=d.move(f);if(i.meta){const x=s.enter("mathFlowMeta");p+=d.move(s.safe(i.meta,{after:` -`,before:p,encode:["$"],...d.current()})),x()}return p+=d.move(` -`),c&&(p+=d.move(c+` -`)),p+=d.move(f),g(),p}function n(i,u,s){let l=i.value||"",c=1;for(t||c++;new RegExp("(^|[^$])"+"\\$".repeat(c)+"([^$]|$)").test(l);)c++;const d="$".repeat(c);/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^\$|\$$/.test(l))&&(l=" "+l+" ");let f=-1;for(;++f15?c="…"+s.slice(a-15,a):c=s.slice(0,a);var d;i+15e.replace(E4,"-$1").toLowerCase(),x4={"&":"&",">":">","<":"<",'"':""","'":"'"},y4=/[&><"']/g,Ve=e=>String(e).replace(y4,t=>x4[t]),$n=e=>e.type==="ordgroup"||e.type==="color"?e.body.length===1?$n(e.body[0]):e:e.type==="font"?$n(e.body):e,v4=new Set(["mathord","textord","atom"]),qt=e=>v4.has($n(e).type),A4=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},_a={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function k4(e){if(typeof e!="string")return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}function S4(e){if(e.default!==void 0)return e.default;var t=Array.isArray(e.type)?e.type[0]:e.type;return k4(t)}function w4(e,t,r,n){var a=r[t];e[t]=a!==void 0?n.processor?n.processor(a):a:S4(n)}class pi{constructor(t){t===void 0&&(t={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,t=t||{};for(var r of Object.keys(_a)){var n=_a[r];n&&w4(this,r,t,n)}}reportNonstrict(t,r,n){var a=this.strict;if(typeof a=="function"&&(a=a(t,r,n)),!(!a||a==="ignore")){if(a===!0||a==="error")throw new Y("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+t+"]"),n);a==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]"))}}useStrictBehavior(t,r,n){var a=this.strict;if(typeof a=="function")try{a=a(t,r,n)}catch{a="error"}return!a||a==="ignore"?!1:a===!0||a==="error"?!0:a==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]")),!1)}isTrusted(t){if("url"in t&&t.url&&!t.protocol){var r=A4(t.url);if(r==null)return!1;t.protocol=r}var n=typeof this.trust=="function"?this.trust(t):this.trust;return!!n}}class jt{constructor(t,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=n}sup(){return kt[C4[this.id]]}sub(){return kt[_4[this.id]]}fracNum(){return kt[I4[this.id]]}fracDen(){return kt[N4[this.id]]}cramp(){return kt[D4[this.id]]}text(){return kt[O4[this.id]]}isTight(){return this.size>=2}}var gi=0,r0=1,_r=2,Ht=3,gn=4,gt=5,Dr=6,Je=7,kt=[new jt(gi,0,!1),new jt(r0,0,!0),new jt(_r,1,!1),new jt(Ht,1,!0),new jt(gn,2,!1),new jt(gt,2,!0),new jt(Dr,3,!1),new jt(Je,3,!0)],C4=[gn,gt,gn,gt,Dr,Je,Dr,Je],_4=[gt,gt,gt,gt,Je,Je,Je,Je],I4=[_r,Ht,gn,gt,Dr,Je,Dr,Je],N4=[Ht,Ht,gt,gt,Je,Je,Je,Je],D4=[r0,r0,Ht,Ht,gt,gt,Je,Je],O4=[gi,r0,_r,Ht,_r,Ht,_r,Ht],oe={DISPLAY:kt[gi],TEXT:kt[_r],SCRIPT:kt[gn],SCRIPTSCRIPT:kt[Dr]},Ia=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function L4(e){for(var t=0;t=a[0]&&e<=a[1])return r.name}return null}var Qn=[];Ia.forEach(e=>e.blocks.forEach(t=>Qn.push(...t)));function $l(e){for(var t=0;t=Qn[t]&&e<=Qn[t+1])return!0;return!1}var Fe=e=>e+" "+e,kr=80,R4=function(t,r){return"M95,"+(622+t+r)+` -c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 -c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 -c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 -s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 -c69,-144,104.5,-217.7,106.5,-221 -l`+t/2.075+" -"+t+` -c5.3,-9.3,12,-14,20,-14 -H400000v`+(40+t)+`H845.2724 -s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 -c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},M4=function(t,r){return"M263,"+(601+t+r)+`c0.7,0,18,39.7,52,119 -c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 -c340,-704.7,510.7,-1060.3,512,-1067 -l`+t/2.084+" -"+t+` -c4.7,-7.3,11,-11,19,-11 -H40000v`+(40+t)+`H1012.3 -s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 -c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 -s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 -c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},P4=function(t,r){return"M983 "+(10+t+r)+` -l`+t/3.13+" -"+t+` -c4,-6.7,10,-10,18,-10 H400000v`+(40+t)+` -H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 -s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 -c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 -c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 -c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 -c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},B4=function(t,r){return"M424,"+(2398+t+r)+` -c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 -c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 -s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 -s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 -l`+t/4.223+" -"+t+`c4,-6.7,10,-10,18,-10 H400000 -v`+(40+t)+`H1014.6 -s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 -c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2z M`+(1001+t)+" "+r+` -h400000v`+(40+t)+"h-400000z"},F4=function(t,r){return"M473,"+(2713+t+r)+` -c339.3,-1799.3,509.3,-2700,510,-2702 l`+t/5.298+" -"+t+` -c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+t)+`H1017.7 -s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 -c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 -s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+t)+" "+r+"h400000v"+(40+t)+"H1017.7z"},H4=function(t){var r=t/2;return"M400000 "+t+" H0 L"+r+" 0 l65 45 L145 "+(t-80)+" H400000z"},z4=function(t,r,n){var a=n-54-r-t;return"M702 "+(t+r)+"H400000"+(40+t)+` -H742v`+a+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 -h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 -c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+r+"H400000v"+(40+t)+"H742z"},U4=function(t,r,n){r=1e3*r;var a="";switch(t){case"sqrtMain":a=R4(r,kr);break;case"sqrtSize1":a=M4(r,kr);break;case"sqrtSize2":a=P4(r,kr);break;case"sqrtSize3":a=B4(r,kr);break;case"sqrtSize4":a=F4(r,kr);break;case"sqrtTall":a=z4(r,kr,n)}return a},q4=function(t,r){switch(t){case"⎜":return Fe("M291 0 H417 V"+r+" H291z");case"∣":return Fe("M145 0 H188 V"+r+" H145z");case"∥":return Fe("M145 0 H188 V"+r+" H145z")+Fe("M367 0 H410 V"+r+" H367z");case"⎟":return Fe("M457 0 H583 V"+r+" H457z");case"⎢":return Fe("M319 0 H403 V"+r+" H319z");case"⎥":return Fe("M263 0 H347 V"+r+" H263z");case"⎪":return Fe("M384 0 H504 V"+r+" H384z");case"⏐":return Fe("M312 0 H355 V"+r+" H312z");case"‖":return Fe("M257 0 H300 V"+r+" H257z")+Fe("M478 0 H521 V"+r+" H478z");default:return""}},Ou={doubleleftarrow:`M262 157 -l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 - 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 - 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 -c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 - 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 --86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 --2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z -m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l --10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 - 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 --33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 --17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 --13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 -c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 --107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 - 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 --5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 -c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 - 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 - 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 - l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 --45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 - 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 - 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 - 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 --331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 -H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 - 435 0h399565z`,leftgroupunder:`M400000 262 -H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 - 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 --3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 --18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 --196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 - 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 --4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 --10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z -m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 - 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 - 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 --152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 - 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 --2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 -v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 --83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 --68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 - 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:Fe("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),leftbracketunder:Fe("M0 0 h120 V290 H399995 v120 H0z"),leftbracketover:Fe("M0 440 h120 V150 H399995 v-120 H0z"),leftmapsto:Fe("M40 281 V448H0V74H40V241H400000v40z"),leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 --.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 -c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 - 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:Fe("M0 50 h400000 v40H0z m0 194h40000v40H0z"),midbrace:`M200428 334 -c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 --53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 - 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 - 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 -c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 - 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 - 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 --5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 --320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z -m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 -60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 --451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z -m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 -c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 --480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z -m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 -85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 --707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z -m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 -c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 --16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 - 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 - 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 --40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 - 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l --6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 -s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 -c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 - 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 --174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 - 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 - 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 --3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 --10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 - 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 --18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 - 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z -m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 - 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 --7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 --27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 - 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 - 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 --64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z -m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 - 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 --13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 - 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:Fe("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),rightbracketunder:Fe("M399995 0 h-120 V290 H0 v120 H400000z"),rightbracketover:Fe("M399995 440 h-120 V150 H0 v-120 H399995z"),rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 - 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 --52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 --167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 - 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 --70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 --40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 --37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 - 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 -c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 - 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 - 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 --19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 - 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 --2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 - 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 - 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 --68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 --8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 - 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 -c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 - 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 --11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 - 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 - 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 - -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 --11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 - 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 - 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 - -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 -3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 -10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 --1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 --7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 -H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 -c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 -c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, --5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 -c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 -c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 -s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 -121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 -s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 -c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z -M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 --27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 -13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 --84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 --119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 -151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 -c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 -c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 -c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z -M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, -1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, --152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z -M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Y4=function(t,r){switch(t){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 v84 h347 v-84 -H403z M403 1759 V0 H319 V1759 v`+r+" v1759 v84 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z -M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z -M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z -M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z -M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 -c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, --36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, -949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 -c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, --544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 -l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, --210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, -63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 -c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` -c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 -c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 -c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 -c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 -l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};function G4(e){return"toText"in e}class Br{constructor(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(t){return this.classes.includes(t)}toNode(){for(var t=document.createDocumentFragment(),r=0;r{if(G4(t))return t.toText();throw new Error("Expected MathDomNode with toText, got "+t.constructor.name)}).join("")}}var Na={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},V4={ex:!0,em:!0,mu:!0},Ql=function(t){return typeof t!="string"&&(t=t.unit),t in Na||t in V4||t==="ex"},Ie=function(t,r){var n;if(t.unit in Na)n=Na[t.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(t.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var a;if(r.style.isTight()?a=r.havingStyle(r.style.text()):a=r,t.unit==="ex")n=a.fontMetrics().xHeight;else if(t.unit==="em")n=a.fontMetrics().quad;else throw new Y("Invalid unit: '"+t.unit+"'");a!==r&&(n*=a.sizeMultiplier/r.sizeMultiplier)}return Math.min(t.number*n,r.maxSize)},V=function(t){return+t.toFixed(4)+"em"},Jt=function(t){return t.filter(r=>r).join(" ")},bi=function(t){var r="";for(var n of Object.keys(t)){var a=t[n];a!==void 0&&(r+=T4(n)+":"+a+";")}return r},Kl=function(t,r,n){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var a=r.getColor();a&&(this.style.color=a)}},Jl=function(t){var r=document.createElement(t);r.className=Jt(this.classes),Object.assign(r.style,this.style);for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,Zl=function(t){var r="<"+t;this.classes.length&&(r+=' class="'+Ve(Jt(this.classes))+'"');var n=bi(this.style);n&&(r+=' style="'+Ve(n)+'"');for(var a of Object.keys(this.attributes)){if(j4.test(a))throw new Y("Invalid attribute name '"+a+"'");r+=" "+a+'="'+Ve(this.attributes[a])+'"'}r+=">";for(var i=0;i",r};class Fr{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,this.italic=void 0,Kl.call(this,t,n,a),this.children=r||[]}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"span")}toMarkup(){return Zl.call(this,"span")}}class E0{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Kl.call(this,r,a),this.children=n||[],this.setAttribute("href",t)}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"a")}toMarkup(){return Zl.call(this,"a")}}class W4{constructor(t,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=t,this.classes=["mord"],this.height=0,this.depth=0,this.maxFontSize=0,this.style=n}hasClass(t){return this.classes.includes(t)}toNode(){var t=document.createElement("img");return t.src=this.src,t.alt=this.alt,t.className="mord",Object.assign(t.style,this.style),t}toMarkup(){var t=''+Ve(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=V(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=Jt(this.classes)),Object.keys(this.style).length>0&&(r=r||document.createElement("span"),Object.assign(r.style,this.style)),r?(r.appendChild(t),r):t}toMarkup(){var t=!1,r="0&&(n+="margin-right:"+V(this.italic)+";"),n+=bi(this.style),n&&(t=!0,r+=' style="'+Ve(n)+'"');var a=Ve(this.text);return t?(r+=">",r+=a,r+="",r):a}}class zt{constructor(t,r){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=r||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"svg");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a':''}}class Da{constructor(t){this.attributes=void 0,this.attributes=t||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"line");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var t=" but got "+String(e)+".")}var K4=e=>e instanceof Fr||e instanceof E0||e instanceof Br,wt={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Hn={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Lu={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function J4(e,t){wt[e]=t}function Ei(e,t,r){if(!wt[t])throw new Error("Font metrics not found for font: "+t+".");var n=e.charCodeAt(0),a=wt[t][n];if(!a&&e[0]in Lu&&(n=Lu[e[0]].charCodeAt(0),a=wt[t][n]),!a&&r==="text"&&$l(n)&&(a=wt[t][77]),a)return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}var ea={};function Z4(e){var t;if(e>=5?t=0:e>=3?t=1:t=2,!ea[t]){var r=ea[t]={cssEmPerMu:Hn.quad[t]/18};for(var n in Hn)Hn.hasOwnProperty(n)&&(r[n]=Hn[n][t])}return ea[t]}var we={math:{},text:{}};function h(e,t,r,n,a,i){we[e][a]={font:t,group:r,replace:n},i&&n&&(we[e][n]=we[e][a])}var m="math",F="text",b="main",v="ams",Ce="accent-token",te="bin",Ze="close",Hr="inner",ie="mathord",Pe="op-token",ht="open",kn="punct",A="rel",Yt="spacing",I="textord";h(m,b,A,"≡","\\equiv",!0);h(m,b,A,"≺","\\prec",!0);h(m,b,A,"≻","\\succ",!0);h(m,b,A,"∼","\\sim",!0);h(m,b,A,"⊥","\\perp");h(m,b,A,"⪯","\\preceq",!0);h(m,b,A,"⪰","\\succeq",!0);h(m,b,A,"≃","\\simeq",!0);h(m,b,A,"∣","\\mid",!0);h(m,b,A,"≪","\\ll",!0);h(m,b,A,"≫","\\gg",!0);h(m,b,A,"≍","\\asymp",!0);h(m,b,A,"∥","\\parallel");h(m,b,A,"⋈","\\bowtie",!0);h(m,b,A,"⌣","\\smile",!0);h(m,b,A,"⊑","\\sqsubseteq",!0);h(m,b,A,"⊒","\\sqsupseteq",!0);h(m,b,A,"≐","\\doteq",!0);h(m,b,A,"⌢","\\frown",!0);h(m,b,A,"∋","\\ni",!0);h(m,b,A,"∝","\\propto",!0);h(m,b,A,"⊢","\\vdash",!0);h(m,b,A,"⊣","\\dashv",!0);h(m,b,A,"∋","\\owns");h(m,b,kn,".","\\ldotp");h(m,b,kn,"⋅","\\cdotp");h(m,b,kn,"⋅","·");h(F,b,I,"⋅","·");h(m,b,I,"#","\\#");h(F,b,I,"#","\\#");h(m,b,I,"&","\\&");h(F,b,I,"&","\\&");h(m,b,I,"ℵ","\\aleph",!0);h(m,b,I,"∀","\\forall",!0);h(m,b,I,"ℏ","\\hbar",!0);h(m,b,I,"∃","\\exists",!0);h(m,b,I,"∇","\\nabla",!0);h(m,b,I,"♭","\\flat",!0);h(m,b,I,"ℓ","\\ell",!0);h(m,b,I,"♮","\\natural",!0);h(m,b,I,"♣","\\clubsuit",!0);h(m,b,I,"℘","\\wp",!0);h(m,b,I,"♯","\\sharp",!0);h(m,b,I,"♢","\\diamondsuit",!0);h(m,b,I,"ℜ","\\Re",!0);h(m,b,I,"♡","\\heartsuit",!0);h(m,b,I,"ℑ","\\Im",!0);h(m,b,I,"♠","\\spadesuit",!0);h(m,b,I,"§","\\S",!0);h(F,b,I,"§","\\S");h(m,b,I,"¶","\\P",!0);h(F,b,I,"¶","\\P");h(m,b,I,"†","\\dag");h(F,b,I,"†","\\dag");h(F,b,I,"†","\\textdagger");h(m,b,I,"‡","\\ddag");h(F,b,I,"‡","\\ddag");h(F,b,I,"‡","\\textdaggerdbl");h(m,b,Ze,"⎱","\\rmoustache",!0);h(m,b,ht,"⎰","\\lmoustache",!0);h(m,b,Ze,"⟯","\\rgroup",!0);h(m,b,ht,"⟮","\\lgroup",!0);h(m,b,te,"∓","\\mp",!0);h(m,b,te,"⊖","\\ominus",!0);h(m,b,te,"⊎","\\uplus",!0);h(m,b,te,"⊓","\\sqcap",!0);h(m,b,te,"∗","\\ast");h(m,b,te,"⊔","\\sqcup",!0);h(m,b,te,"◯","\\bigcirc",!0);h(m,b,te,"∙","\\bullet",!0);h(m,b,te,"‡","\\ddagger");h(m,b,te,"≀","\\wr",!0);h(m,b,te,"⨿","\\amalg");h(m,b,te,"&","\\And");h(m,b,A,"⟵","\\longleftarrow",!0);h(m,b,A,"⇐","\\Leftarrow",!0);h(m,b,A,"⟸","\\Longleftarrow",!0);h(m,b,A,"⟶","\\longrightarrow",!0);h(m,b,A,"⇒","\\Rightarrow",!0);h(m,b,A,"⟹","\\Longrightarrow",!0);h(m,b,A,"↔","\\leftrightarrow",!0);h(m,b,A,"⟷","\\longleftrightarrow",!0);h(m,b,A,"⇔","\\Leftrightarrow",!0);h(m,b,A,"⟺","\\Longleftrightarrow",!0);h(m,b,A,"↦","\\mapsto",!0);h(m,b,A,"⟼","\\longmapsto",!0);h(m,b,A,"↗","\\nearrow",!0);h(m,b,A,"↩","\\hookleftarrow",!0);h(m,b,A,"↪","\\hookrightarrow",!0);h(m,b,A,"↘","\\searrow",!0);h(m,b,A,"↼","\\leftharpoonup",!0);h(m,b,A,"⇀","\\rightharpoonup",!0);h(m,b,A,"↙","\\swarrow",!0);h(m,b,A,"↽","\\leftharpoondown",!0);h(m,b,A,"⇁","\\rightharpoondown",!0);h(m,b,A,"↖","\\nwarrow",!0);h(m,b,A,"⇌","\\rightleftharpoons",!0);h(m,v,A,"≮","\\nless",!0);h(m,v,A,"","\\@nleqslant");h(m,v,A,"","\\@nleqq");h(m,v,A,"⪇","\\lneq",!0);h(m,v,A,"≨","\\lneqq",!0);h(m,v,A,"","\\@lvertneqq");h(m,v,A,"⋦","\\lnsim",!0);h(m,v,A,"⪉","\\lnapprox",!0);h(m,v,A,"⊀","\\nprec",!0);h(m,v,A,"⋠","\\npreceq",!0);h(m,v,A,"⋨","\\precnsim",!0);h(m,v,A,"⪹","\\precnapprox",!0);h(m,v,A,"≁","\\nsim",!0);h(m,v,A,"","\\@nshortmid");h(m,v,A,"∤","\\nmid",!0);h(m,v,A,"⊬","\\nvdash",!0);h(m,v,A,"⊭","\\nvDash",!0);h(m,v,A,"⋪","\\ntriangleleft");h(m,v,A,"⋬","\\ntrianglelefteq",!0);h(m,v,A,"⊊","\\subsetneq",!0);h(m,v,A,"","\\@varsubsetneq");h(m,v,A,"⫋","\\subsetneqq",!0);h(m,v,A,"","\\@varsubsetneqq");h(m,v,A,"≯","\\ngtr",!0);h(m,v,A,"","\\@ngeqslant");h(m,v,A,"","\\@ngeqq");h(m,v,A,"⪈","\\gneq",!0);h(m,v,A,"≩","\\gneqq",!0);h(m,v,A,"","\\@gvertneqq");h(m,v,A,"⋧","\\gnsim",!0);h(m,v,A,"⪊","\\gnapprox",!0);h(m,v,A,"⊁","\\nsucc",!0);h(m,v,A,"⋡","\\nsucceq",!0);h(m,v,A,"⋩","\\succnsim",!0);h(m,v,A,"⪺","\\succnapprox",!0);h(m,v,A,"≆","\\ncong",!0);h(m,v,A,"","\\@nshortparallel");h(m,v,A,"∦","\\nparallel",!0);h(m,v,A,"⊯","\\nVDash",!0);h(m,v,A,"⋫","\\ntriangleright");h(m,v,A,"⋭","\\ntrianglerighteq",!0);h(m,v,A,"","\\@nsupseteqq");h(m,v,A,"⊋","\\supsetneq",!0);h(m,v,A,"","\\@varsupsetneq");h(m,v,A,"⫌","\\supsetneqq",!0);h(m,v,A,"","\\@varsupsetneqq");h(m,v,A,"⊮","\\nVdash",!0);h(m,v,A,"⪵","\\precneqq",!0);h(m,v,A,"⪶","\\succneqq",!0);h(m,v,A,"","\\@nsubseteqq");h(m,v,te,"⊴","\\unlhd");h(m,v,te,"⊵","\\unrhd");h(m,v,A,"↚","\\nleftarrow",!0);h(m,v,A,"↛","\\nrightarrow",!0);h(m,v,A,"⇍","\\nLeftarrow",!0);h(m,v,A,"⇏","\\nRightarrow",!0);h(m,v,A,"↮","\\nleftrightarrow",!0);h(m,v,A,"⇎","\\nLeftrightarrow",!0);h(m,v,A,"△","\\vartriangle");h(m,v,I,"ℏ","\\hslash");h(m,v,I,"▽","\\triangledown");h(m,v,I,"◊","\\lozenge");h(m,v,I,"Ⓢ","\\circledS");h(m,v,I,"®","\\circledR");h(F,v,I,"®","\\circledR");h(m,v,I,"∡","\\measuredangle",!0);h(m,v,I,"∄","\\nexists");h(m,v,I,"℧","\\mho");h(m,v,I,"Ⅎ","\\Finv",!0);h(m,v,I,"⅁","\\Game",!0);h(m,v,I,"‵","\\backprime");h(m,v,I,"▲","\\blacktriangle");h(m,v,I,"▼","\\blacktriangledown");h(m,v,I,"■","\\blacksquare");h(m,v,I,"⧫","\\blacklozenge");h(m,v,I,"★","\\bigstar");h(m,v,I,"∢","\\sphericalangle",!0);h(m,v,I,"∁","\\complement",!0);h(m,v,I,"ð","\\eth",!0);h(F,b,I,"ð","ð");h(m,v,I,"╱","\\diagup");h(m,v,I,"╲","\\diagdown");h(m,v,I,"□","\\square");h(m,v,I,"□","\\Box");h(m,v,I,"◊","\\Diamond");h(m,v,I,"¥","\\yen",!0);h(F,v,I,"¥","\\yen",!0);h(m,v,I,"✓","\\checkmark",!0);h(F,v,I,"✓","\\checkmark");h(m,v,I,"ℶ","\\beth",!0);h(m,v,I,"ℸ","\\daleth",!0);h(m,v,I,"ℷ","\\gimel",!0);h(m,v,I,"ϝ","\\digamma",!0);h(m,v,I,"ϰ","\\varkappa");h(m,v,ht,"┌","\\@ulcorner",!0);h(m,v,Ze,"┐","\\@urcorner",!0);h(m,v,ht,"└","\\@llcorner",!0);h(m,v,Ze,"┘","\\@lrcorner",!0);h(m,v,A,"≦","\\leqq",!0);h(m,v,A,"⩽","\\leqslant",!0);h(m,v,A,"⪕","\\eqslantless",!0);h(m,v,A,"≲","\\lesssim",!0);h(m,v,A,"⪅","\\lessapprox",!0);h(m,v,A,"≊","\\approxeq",!0);h(m,v,te,"⋖","\\lessdot");h(m,v,A,"⋘","\\lll",!0);h(m,v,A,"≶","\\lessgtr",!0);h(m,v,A,"⋚","\\lesseqgtr",!0);h(m,v,A,"⪋","\\lesseqqgtr",!0);h(m,v,A,"≑","\\doteqdot");h(m,v,A,"≓","\\risingdotseq",!0);h(m,v,A,"≒","\\fallingdotseq",!0);h(m,v,A,"∽","\\backsim",!0);h(m,v,A,"⋍","\\backsimeq",!0);h(m,v,A,"⫅","\\subseteqq",!0);h(m,v,A,"⋐","\\Subset",!0);h(m,v,A,"⊏","\\sqsubset",!0);h(m,v,A,"≼","\\preccurlyeq",!0);h(m,v,A,"⋞","\\curlyeqprec",!0);h(m,v,A,"≾","\\precsim",!0);h(m,v,A,"⪷","\\precapprox",!0);h(m,v,A,"⊲","\\vartriangleleft");h(m,v,A,"⊴","\\trianglelefteq");h(m,v,A,"⊨","\\vDash",!0);h(m,v,A,"⊪","\\Vvdash",!0);h(m,v,A,"⌣","\\smallsmile");h(m,v,A,"⌢","\\smallfrown");h(m,v,A,"≏","\\bumpeq",!0);h(m,v,A,"≎","\\Bumpeq",!0);h(m,v,A,"≧","\\geqq",!0);h(m,v,A,"⩾","\\geqslant",!0);h(m,v,A,"⪖","\\eqslantgtr",!0);h(m,v,A,"≳","\\gtrsim",!0);h(m,v,A,"⪆","\\gtrapprox",!0);h(m,v,te,"⋗","\\gtrdot");h(m,v,A,"⋙","\\ggg",!0);h(m,v,A,"≷","\\gtrless",!0);h(m,v,A,"⋛","\\gtreqless",!0);h(m,v,A,"⪌","\\gtreqqless",!0);h(m,v,A,"≖","\\eqcirc",!0);h(m,v,A,"≗","\\circeq",!0);h(m,v,A,"≜","\\triangleq",!0);h(m,v,A,"∼","\\thicksim");h(m,v,A,"≈","\\thickapprox");h(m,v,A,"⫆","\\supseteqq",!0);h(m,v,A,"⋑","\\Supset",!0);h(m,v,A,"⊐","\\sqsupset",!0);h(m,v,A,"≽","\\succcurlyeq",!0);h(m,v,A,"⋟","\\curlyeqsucc",!0);h(m,v,A,"≿","\\succsim",!0);h(m,v,A,"⪸","\\succapprox",!0);h(m,v,A,"⊳","\\vartriangleright");h(m,v,A,"⊵","\\trianglerighteq");h(m,v,A,"⊩","\\Vdash",!0);h(m,v,A,"∣","\\shortmid");h(m,v,A,"∥","\\shortparallel");h(m,v,A,"≬","\\between",!0);h(m,v,A,"⋔","\\pitchfork",!0);h(m,v,A,"∝","\\varpropto");h(m,v,A,"◀","\\blacktriangleleft");h(m,v,A,"∴","\\therefore",!0);h(m,v,A,"∍","\\backepsilon");h(m,v,A,"▶","\\blacktriangleright");h(m,v,A,"∵","\\because",!0);h(m,v,A,"⋘","\\llless");h(m,v,A,"⋙","\\gggtr");h(m,v,te,"⊲","\\lhd");h(m,v,te,"⊳","\\rhd");h(m,v,A,"≂","\\eqsim",!0);h(m,b,A,"⋈","\\Join");h(m,v,A,"≑","\\Doteq",!0);h(m,v,te,"∔","\\dotplus",!0);h(m,v,te,"∖","\\smallsetminus");h(m,v,te,"⋒","\\Cap",!0);h(m,v,te,"⋓","\\Cup",!0);h(m,v,te,"⩞","\\doublebarwedge",!0);h(m,v,te,"⊟","\\boxminus",!0);h(m,v,te,"⊞","\\boxplus",!0);h(m,v,te,"⋇","\\divideontimes",!0);h(m,v,te,"⋉","\\ltimes",!0);h(m,v,te,"⋊","\\rtimes",!0);h(m,v,te,"⋋","\\leftthreetimes",!0);h(m,v,te,"⋌","\\rightthreetimes",!0);h(m,v,te,"⋏","\\curlywedge",!0);h(m,v,te,"⋎","\\curlyvee",!0);h(m,v,te,"⊝","\\circleddash",!0);h(m,v,te,"⊛","\\circledast",!0);h(m,v,te,"⋅","\\centerdot");h(m,v,te,"⊺","\\intercal",!0);h(m,v,te,"⋒","\\doublecap");h(m,v,te,"⋓","\\doublecup");h(m,v,te,"⊠","\\boxtimes",!0);h(m,v,A,"⇢","\\dashrightarrow",!0);h(m,v,A,"⇠","\\dashleftarrow",!0);h(m,v,A,"⇇","\\leftleftarrows",!0);h(m,v,A,"⇆","\\leftrightarrows",!0);h(m,v,A,"⇚","\\Lleftarrow",!0);h(m,v,A,"↞","\\twoheadleftarrow",!0);h(m,v,A,"↢","\\leftarrowtail",!0);h(m,v,A,"↫","\\looparrowleft",!0);h(m,v,A,"⇋","\\leftrightharpoons",!0);h(m,v,A,"↶","\\curvearrowleft",!0);h(m,v,A,"↺","\\circlearrowleft",!0);h(m,v,A,"↰","\\Lsh",!0);h(m,v,A,"⇈","\\upuparrows",!0);h(m,v,A,"↿","\\upharpoonleft",!0);h(m,v,A,"⇃","\\downharpoonleft",!0);h(m,b,A,"⊶","\\origof",!0);h(m,b,A,"⊷","\\imageof",!0);h(m,v,A,"⊸","\\multimap",!0);h(m,v,A,"↭","\\leftrightsquigarrow",!0);h(m,v,A,"⇉","\\rightrightarrows",!0);h(m,v,A,"⇄","\\rightleftarrows",!0);h(m,v,A,"↠","\\twoheadrightarrow",!0);h(m,v,A,"↣","\\rightarrowtail",!0);h(m,v,A,"↬","\\looparrowright",!0);h(m,v,A,"↷","\\curvearrowright",!0);h(m,v,A,"↻","\\circlearrowright",!0);h(m,v,A,"↱","\\Rsh",!0);h(m,v,A,"⇊","\\downdownarrows",!0);h(m,v,A,"↾","\\upharpoonright",!0);h(m,v,A,"⇂","\\downharpoonright",!0);h(m,v,A,"⇝","\\rightsquigarrow",!0);h(m,v,A,"⇝","\\leadsto");h(m,v,A,"⇛","\\Rrightarrow",!0);h(m,v,A,"↾","\\restriction");h(m,b,I,"‘","`");h(m,b,I,"$","\\$");h(F,b,I,"$","\\$");h(F,b,I,"$","\\textdollar");h(m,b,I,"%","\\%");h(F,b,I,"%","\\%");h(m,b,I,"_","\\_");h(F,b,I,"_","\\_");h(F,b,I,"_","\\textunderscore");h(m,b,I,"∠","\\angle",!0);h(m,b,I,"∞","\\infty",!0);h(m,b,I,"′","\\prime");h(m,b,I,"△","\\triangle");h(m,b,I,"Γ","\\Gamma",!0);h(m,b,I,"Δ","\\Delta",!0);h(m,b,I,"Θ","\\Theta",!0);h(m,b,I,"Λ","\\Lambda",!0);h(m,b,I,"Ξ","\\Xi",!0);h(m,b,I,"Π","\\Pi",!0);h(m,b,I,"Σ","\\Sigma",!0);h(m,b,I,"Υ","\\Upsilon",!0);h(m,b,I,"Φ","\\Phi",!0);h(m,b,I,"Ψ","\\Psi",!0);h(m,b,I,"Ω","\\Omega",!0);h(m,b,I,"A","Α");h(m,b,I,"B","Β");h(m,b,I,"E","Ε");h(m,b,I,"Z","Ζ");h(m,b,I,"H","Η");h(m,b,I,"I","Ι");h(m,b,I,"K","Κ");h(m,b,I,"M","Μ");h(m,b,I,"N","Ν");h(m,b,I,"O","Ο");h(m,b,I,"P","Ρ");h(m,b,I,"T","Τ");h(m,b,I,"X","Χ");h(m,b,I,"¬","\\neg",!0);h(m,b,I,"¬","\\lnot");h(m,b,I,"⊤","\\top");h(m,b,I,"⊥","\\bot");h(m,b,I,"∅","\\emptyset");h(m,v,I,"∅","\\varnothing");h(m,b,ie,"α","\\alpha",!0);h(m,b,ie,"β","\\beta",!0);h(m,b,ie,"γ","\\gamma",!0);h(m,b,ie,"δ","\\delta",!0);h(m,b,ie,"ϵ","\\epsilon",!0);h(m,b,ie,"ζ","\\zeta",!0);h(m,b,ie,"η","\\eta",!0);h(m,b,ie,"θ","\\theta",!0);h(m,b,ie,"ι","\\iota",!0);h(m,b,ie,"κ","\\kappa",!0);h(m,b,ie,"λ","\\lambda",!0);h(m,b,ie,"μ","\\mu",!0);h(m,b,ie,"ν","\\nu",!0);h(m,b,ie,"ξ","\\xi",!0);h(m,b,ie,"ο","\\omicron",!0);h(m,b,ie,"π","\\pi",!0);h(m,b,ie,"ρ","\\rho",!0);h(m,b,ie,"σ","\\sigma",!0);h(m,b,ie,"τ","\\tau",!0);h(m,b,ie,"υ","\\upsilon",!0);h(m,b,ie,"ϕ","\\phi",!0);h(m,b,ie,"χ","\\chi",!0);h(m,b,ie,"ψ","\\psi",!0);h(m,b,ie,"ω","\\omega",!0);h(m,b,ie,"ε","\\varepsilon",!0);h(m,b,ie,"ϑ","\\vartheta",!0);h(m,b,ie,"ϖ","\\varpi",!0);h(m,b,ie,"ϱ","\\varrho",!0);h(m,b,ie,"ς","\\varsigma",!0);h(m,b,ie,"φ","\\varphi",!0);h(m,b,te,"∗","*",!0);h(m,b,te,"+","+");h(m,b,te,"−","-",!0);h(m,b,te,"⋅","\\cdot",!0);h(m,b,te,"∘","\\circ",!0);h(m,b,te,"÷","\\div",!0);h(m,b,te,"±","\\pm",!0);h(m,b,te,"×","\\times",!0);h(m,b,te,"∩","\\cap",!0);h(m,b,te,"∪","\\cup",!0);h(m,b,te,"∖","\\setminus",!0);h(m,b,te,"∧","\\land");h(m,b,te,"∨","\\lor");h(m,b,te,"∧","\\wedge",!0);h(m,b,te,"∨","\\vee",!0);h(m,b,I,"√","\\surd");h(m,b,ht,"⟨","\\langle",!0);h(m,b,ht,"∣","\\lvert");h(m,b,ht,"∥","\\lVert");h(m,b,Ze,"?","?");h(m,b,Ze,"!","!");h(m,b,Ze,"⟩","\\rangle",!0);h(m,b,Ze,"∣","\\rvert");h(m,b,Ze,"∥","\\rVert");h(m,b,A,"=","=");h(m,b,A,":",":");h(m,b,A,"≈","\\approx",!0);h(m,b,A,"≅","\\cong",!0);h(m,b,A,"≥","\\ge");h(m,b,A,"≥","\\geq",!0);h(m,b,A,"←","\\gets");h(m,b,A,">","\\gt",!0);h(m,b,A,"∈","\\in",!0);h(m,b,A,"","\\@not");h(m,b,A,"⊂","\\subset",!0);h(m,b,A,"⊃","\\supset",!0);h(m,b,A,"⊆","\\subseteq",!0);h(m,b,A,"⊇","\\supseteq",!0);h(m,v,A,"⊈","\\nsubseteq",!0);h(m,v,A,"⊉","\\nsupseteq",!0);h(m,b,A,"⊨","\\models");h(m,b,A,"←","\\leftarrow",!0);h(m,b,A,"≤","\\le");h(m,b,A,"≤","\\leq",!0);h(m,b,A,"<","\\lt",!0);h(m,b,A,"→","\\rightarrow",!0);h(m,b,A,"→","\\to");h(m,v,A,"≱","\\ngeq",!0);h(m,v,A,"≰","\\nleq",!0);h(m,b,Yt," ","\\ ");h(m,b,Yt," ","\\space");h(m,b,Yt," ","\\nobreakspace");h(F,b,Yt," ","\\ ");h(F,b,Yt," "," ");h(F,b,Yt," ","\\space");h(F,b,Yt," ","\\nobreakspace");h(m,b,Yt,"","\\nobreak");h(m,b,Yt,"","\\allowbreak");h(m,b,kn,",",",");h(m,b,kn,";",";");h(m,v,te,"⊼","\\barwedge",!0);h(m,v,te,"⊻","\\veebar",!0);h(m,b,te,"⊙","\\odot",!0);h(m,b,te,"⊕","\\oplus",!0);h(m,b,te,"⊗","\\otimes",!0);h(m,b,I,"∂","\\partial",!0);h(m,b,te,"⊘","\\oslash",!0);h(m,v,te,"⊚","\\circledcirc",!0);h(m,v,te,"⊡","\\boxdot",!0);h(m,b,te,"△","\\bigtriangleup");h(m,b,te,"▽","\\bigtriangledown");h(m,b,te,"†","\\dagger");h(m,b,te,"⋄","\\diamond");h(m,b,te,"⋆","\\star");h(m,b,te,"◃","\\triangleleft");h(m,b,te,"▹","\\triangleright");h(m,b,ht,"{","\\{");h(F,b,I,"{","\\{");h(F,b,I,"{","\\textbraceleft");h(m,b,Ze,"}","\\}");h(F,b,I,"}","\\}");h(F,b,I,"}","\\textbraceright");h(m,b,ht,"{","\\lbrace");h(m,b,Ze,"}","\\rbrace");h(m,b,ht,"[","\\lbrack",!0);h(F,b,I,"[","\\lbrack",!0);h(m,b,Ze,"]","\\rbrack",!0);h(F,b,I,"]","\\rbrack",!0);h(m,b,ht,"(","\\lparen",!0);h(m,b,Ze,")","\\rparen",!0);h(F,b,I,"<","\\textless",!0);h(F,b,I,">","\\textgreater",!0);h(m,b,ht,"⌊","\\lfloor",!0);h(m,b,Ze,"⌋","\\rfloor",!0);h(m,b,ht,"⌈","\\lceil",!0);h(m,b,Ze,"⌉","\\rceil",!0);h(m,b,I,"\\","\\backslash");h(m,b,I,"∣","|");h(m,b,I,"∣","\\vert");h(F,b,I,"|","\\textbar",!0);h(m,b,I,"∥","\\|");h(m,b,I,"∥","\\Vert");h(F,b,I,"∥","\\textbardbl");h(F,b,I,"~","\\textasciitilde");h(F,b,I,"\\","\\textbackslash");h(F,b,I,"^","\\textasciicircum");h(m,b,A,"↑","\\uparrow",!0);h(m,b,A,"⇑","\\Uparrow",!0);h(m,b,A,"↓","\\downarrow",!0);h(m,b,A,"⇓","\\Downarrow",!0);h(m,b,A,"↕","\\updownarrow",!0);h(m,b,A,"⇕","\\Updownarrow",!0);h(m,b,Pe,"∐","\\coprod");h(m,b,Pe,"⋁","\\bigvee");h(m,b,Pe,"⋀","\\bigwedge");h(m,b,Pe,"⨄","\\biguplus");h(m,b,Pe,"⋂","\\bigcap");h(m,b,Pe,"⋃","\\bigcup");h(m,b,Pe,"∫","\\int");h(m,b,Pe,"∫","\\intop");h(m,b,Pe,"∬","\\iint");h(m,b,Pe,"∭","\\iiint");h(m,b,Pe,"∏","\\prod");h(m,b,Pe,"∑","\\sum");h(m,b,Pe,"⨂","\\bigotimes");h(m,b,Pe,"⨁","\\bigoplus");h(m,b,Pe,"⨀","\\bigodot");h(m,b,Pe,"∮","\\oint");h(m,b,Pe,"∯","\\oiint");h(m,b,Pe,"∰","\\oiiint");h(m,b,Pe,"⨆","\\bigsqcup");h(m,b,Pe,"∫","\\smallint");h(F,b,Hr,"…","\\textellipsis");h(m,b,Hr,"…","\\mathellipsis");h(F,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"⋯","\\@cdots",!0);h(m,b,Hr,"⋱","\\ddots",!0);h(m,b,I,"⋮","\\varvdots");h(F,b,I,"⋮","\\varvdots");h(m,b,Ce,"ˊ","\\acute");h(m,b,Ce,"ˋ","\\grave");h(m,b,Ce,"¨","\\ddot");h(m,b,Ce,"~","\\tilde");h(m,b,Ce,"ˉ","\\bar");h(m,b,Ce,"˘","\\breve");h(m,b,Ce,"ˇ","\\check");h(m,b,Ce,"^","\\hat");h(m,b,Ce,"⃗","\\vec");h(m,b,Ce,"˙","\\dot");h(m,b,Ce,"˚","\\mathring");h(m,b,ie,"","\\@imath");h(m,b,ie,"","\\@jmath");h(m,b,I,"ı","ı");h(m,b,I,"ȷ","ȷ");h(F,b,I,"ı","\\i",!0);h(F,b,I,"ȷ","\\j",!0);h(F,b,I,"ß","\\ss",!0);h(F,b,I,"æ","\\ae",!0);h(F,b,I,"œ","\\oe",!0);h(F,b,I,"ø","\\o",!0);h(F,b,I,"Æ","\\AE",!0);h(F,b,I,"Œ","\\OE",!0);h(F,b,I,"Ø","\\O",!0);h(F,b,Ce,"ˊ","\\'");h(F,b,Ce,"ˋ","\\`");h(F,b,Ce,"ˆ","\\^");h(F,b,Ce,"˜","\\~");h(F,b,Ce,"ˉ","\\=");h(F,b,Ce,"˘","\\u");h(F,b,Ce,"˙","\\.");h(F,b,Ce,"¸","\\c");h(F,b,Ce,"˚","\\r");h(F,b,Ce,"ˇ","\\v");h(F,b,Ce,"¨",'\\"');h(F,b,Ce,"˝","\\H");h(F,b,Ce,"◯","\\textcircled");var eo={"--":!0,"---":!0,"``":!0,"''":!0};h(F,b,I,"–","--",!0);h(F,b,I,"–","\\textendash");h(F,b,I,"—","---",!0);h(F,b,I,"—","\\textemdash");h(F,b,I,"‘","`",!0);h(F,b,I,"‘","\\textquoteleft");h(F,b,I,"’","'",!0);h(F,b,I,"’","\\textquoteright");h(F,b,I,"“","``",!0);h(F,b,I,"“","\\textquotedblleft");h(F,b,I,"”","''",!0);h(F,b,I,"”","\\textquotedblright");h(m,b,I,"°","\\degree",!0);h(F,b,I,"°","\\degree");h(F,b,I,"°","\\textdegree",!0);h(m,b,I,"£","\\pounds");h(m,b,I,"£","\\mathsterling",!0);h(F,b,I,"£","\\pounds");h(F,b,I,"£","\\textsterling",!0);h(m,v,I,"✠","\\maltese");h(F,v,I,"✠","\\maltese");var Ru='0123456789/@."';for(var ta=0;ta{var t=e.charCodeAt(0),r=e.charCodeAt(1),n=(t-55296)*1024+(r-56320)+65536;if(119808<=n&&n<120484){var a=Math.floor((n-119808)/26);return Gu[a]}else if(120782<=n&&n<=120831){var i=Math.floor((n-120782)/10);return t3[i]}else{if(n===120485||n===120486)return Gu[0];if(120486{if(Jt(e.classes)!==Jt(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize||e.italic!==0&&e.hasClass("mathnormal"))return!1;if(e.classes.length===1){var r=e.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n of Object.keys(e.style))if(e.style[n]!==t.style[n])return!1;for(var a of Object.keys(t.style))if(e.style[a]!==t.style[a])return!1;return!0},to=e=>{for(var t=0;tr&&(r=u.height),u.depth>n&&(n=u.depth),u.maxFontSize>a&&(a=u.maxFontSize)}t.height=r,t.depth=n,t.maxFontSize=a},z=function(t,r,n,a){var i=new Fr(t,r,n,a);return xi(i),i},er=(e,t,r,n)=>new Fr(e,t,r,n),Or=function(t,r,n){var a=z([t],[],r);return a.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),a.style.borderBottomWidth=V(a.height),a.maxFontSize=1,a},i3=function(t,r,n,a){var i=new E0(t,r,n,a);return xi(i),i},Gt=function(t){var r=new Br(t);return xi(r),r},Lr=function(t,r){return t instanceof Br?z([],[t],r):t},u3=function(t){if(t.positionType==="individualShift"){for(var r=t.children,n=[r[0]],a=-r[0].shift-r[0].elem.depth,i=a,u=1;u{var r=z(["mspace"],[],t),n=Ie(e,t);return r.style.marginRight=V(n),r},qn=(e,t,r)=>{var n,a;switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return t==="textbf"&&r==="textit"?a="BoldItalic":t==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},Ba={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},no={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},ao=function(t,r){var[n,a,i]=no[t],u=new Zt(n),s=new zt([u],{width:V(a),height:V(i),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),l=er(["overlay"],[s],r);return l.height=i,l.style.height=V(i),l.style.width=V(a),l},_e={number:3,unit:"mu"},cr={number:4,unit:"mu"},Pt={number:5,unit:"mu"},s3={mord:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mop:{mord:_e,mop:_e,mrel:Pt,minner:_e},mbin:{mord:cr,mop:cr,mopen:cr,minner:cr},mrel:{mord:Pt,mop:Pt,mopen:Pt,minner:Pt},mopen:{},mclose:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mpunct:{mord:_e,mop:_e,mrel:Pt,mopen:_e,mclose:_e,mpunct:_e,minner:_e},minner:{mord:_e,mop:_e,mbin:cr,mrel:Pt,mopen:_e,mpunct:_e,minner:_e}},l3={mord:{mop:_e},mop:{mord:_e,mop:_e},mbin:{},mrel:{},mopen:{},mclose:{mop:_e},mpunct:{},minner:{mop:_e}},io={},a0={},i0={};function Z(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:a},l=0;l{var D=S.classes[0],_=x.classes[0];D==="mbin"&&c3.has(_)?S.classes[0]="mord":_==="mbin"&&o3.has(D)&&(x.classes[0]="mord")},{node:f},g,p),Fa(i,(x,S)=>{var D,_,N=za(S),M=za(x),W=N&&M?x.hasClass("mtight")?(D=l3[N])==null?void 0:D[M]:(_=s3[N])==null?void 0:_[M]:null;if(W)return ro(W,c)},{node:f},g,p),i},Fa=function(t,r,n,a,i){a&&t.push(a);for(var u=0;ug=>{t.splice(f+1,0,g),u++})(u)}a&&t.pop()},uo=function(t){return t instanceof Br||t instanceof E0||t instanceof Fr&&t.hasClass("enclosing")?t:null},Ha=function(t,r){var n=uo(t);if(n){var a=n.children;if(a.length){if(r==="right")return Ha(a[a.length-1],"right");if(r==="left")return Ha(a[0],"left")}}return t},za=function(t,r){if(!t)return null;r&&(t=Ha(t,r));var n=t.classes[0];return d3[n]||null},bn=function(t,r){var n=["nulldelimiter"].concat(t.baseSizingClasses());return z(r.concat(n))},Te=function(t,r,n){if(!t)return z();if(a0[t.type]){var a=a0[t.type](t,r);if(n&&r.size!==n.size){a=z(r.sizingClasses(n),[a],r);var i=r.sizeMultiplier/n.sizeMultiplier;a.height*=i,a.depth*=i}return a}else throw new Y("Got group of unknown type: '"+t.type+"'")};function Yn(e,t){var r=z(["base"],e,t),n=z(["strut"]);return n.style.height=V(r.height+r.depth),r.depth&&(n.style.verticalAlign=V(-r.depth)),r.children.unshift(n),r}function Ua(e,t){var r=null;e.length===1&&e[0].type==="tag"&&(r=e[0].tag,e=e[0].body);var n=He(e,t,"root"),a;n.length===2&&n[1].hasClass("tag")&&(a=n.pop());for(var i=[],u=[],s=0;s0&&(i.push(Yn(u,t)),u=[]),i.push(n[s]));u.length>0&&i.push(Yn(u,t));var c;r?(c=Yn(He(r,t,!0),t),c.classes=["tag"],i.push(c)):a&&i.push(a);var d=z(["katex-html"],i);if(d.setAttribute("aria-hidden","true"),c){var f=c.children[0];f.style.height=V(d.height+d.depth),d.depth&&(f.style.verticalAlign=V(-d.depth))}return d}function so(e){return new Br(e)}class G{constructor(t,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=t,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(t,r){this.attributes[t]=r}getAttribute(t){return this.attributes[t]}toNode(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);this.classes.length>0&&(t.className=Jt(this.classes));for(var n=0;n0&&(t+=' class ="'+Ve(Jt(this.classes))+'"'),t+=">";for(var n=0;n",t}toText(){return this.children.map(t=>t.toText()).join("")}}class Me{constructor(t){this.text=void 0,this.text=t}toNode(){return document.createTextNode(this.text)}toMarkup(){return Ve(this.toText())}toText(){return this.text}}class lo{constructor(t){this.width=void 0,this.character=void 0,this.width=t,t>=.05555&&t<=.05556?this.character=" ":t>=.1666&&t<=.1667?this.character=" ":t>=.2222&&t<=.2223?this.character=" ":t>=.2777&&t<=.2778?this.character="  ":t>=-.05556&&t<=-.05555?this.character=" ⁣":t>=-.1667&&t<=-.1666?this.character=" ⁣":t>=-.2223&&t<=-.2222?this.character=" ⁣":t>=-.2778&&t<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",V(this.width)),t}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var f3=new Set(["\\imath","\\jmath"]),m3=new Set(["mrow","mtable"]),bt=function(t,r,n){return we[r][t]&&we[r][t].replace&&t.charCodeAt(0)!==55349&&!(eo.hasOwnProperty(t)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(t=we[r][t].replace),new Me(t)},yi=function(t){return t.length===1?t[0]:new G("mrow",t)},p3={mathit:"italic",boldsymbol:e=>e.type==="textord"?"bold":"bold-italic",mathbf:"bold",mathbb:"double-struck",mathsfit:"sans-serif-italic",mathfrak:"fraktur",mathscr:"script",mathcal:"script",mathsf:"sans-serif",mathtt:"monospace"},vi=(e,t)=>{if(e.mode==="text"){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold"}var r=t.font;if(!r||r==="mathnormal")return null;var n=e.mode,a=p3[r];if(a)return typeof a=="function"?a(e):a;var i=e.text;if(f3.has(i))return null;if(we[n][i]){var u=we[n][i].replace;u&&(i=u)}var s=Ba[r].fontName;return Ei(i,s,n)?Ba[r].variant:null};function ia(e){if(!e)return!1;if(e.type==="mi"&&e.children.length===1){var t=e.children[0];return t instanceof Me&&t.text==="."}else if(e.type==="mo"&&e.children.length===1&&e.getAttribute("separator")==="true"&&e.getAttribute("lspace")==="0em"&&e.getAttribute("rspace")==="0em"){var r=e.children[0];return r instanceof Me&&r.text===","}else return!1}var dt=function(t,r,n){if(t.length===1){var a=Ae(t[0],r);return n&&a instanceof G&&a.type==="mo"&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var i=[],u,s=0;s=1&&(u.type==="mn"||ia(u))){var c=l.children[0];c instanceof G&&c.type==="mn"&&(c.children=[...u.children,...c.children],i.pop())}else if(u.type==="mi"&&u.children.length===1){var d=u.children[0];if(d instanceof Me&&d.text==="̸"&&(l.type==="mo"||l.type==="mi"||l.type==="mn")){var f=l.children[0];f instanceof Me&&f.text.length>0&&(f.text=f.text.slice(0,1)+"̸"+f.text.slice(1),i.pop())}}}i.push(l),u=l}return i},tr=function(t,r,n){return yi(dt(t,r,n))},Ae=function(t,r){if(!t)return new G("mrow");if(i0[t.type])return i0[t.type](t,r);throw new Y("Got group of unknown type: '"+t.type+"'")};function Vu(e,t,r,n,a){var i=dt(e,r),u;i.length===1&&i[0]instanceof G&&m3.has(i[0].type)?u=i[0]:u=new G("mrow",i);var s=new G("annotation",[new Me(t)]);s.setAttribute("encoding","application/x-tex");var l=new G("semantics",[u,s]),c=new G("math",[l]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var d=a?"katex":"katex-mathml";return z([d],[c])}var g3=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],ju=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Wu=function(t,r){return r.size<2?t:g3[t-1][r.size-1]};class Bt{constructor(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||Bt.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=ju[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}extend(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};return Object.assign(r,t),new Bt(r)}havingStyle(t){return this.style===t?this:this.extend({style:t,size:Wu(this.textSize,t)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:ju[t-1]})}havingBaseStyle(t){t=t||this.style.text();var r=Wu(Bt.BASESIZE,t);return this.size===r&&this.textSize===Bt.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}havingBaseSizing(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})}withColor(t){return this.extend({color:t})}withPhantom(){return this.extend({phantom:!0})}withFont(t){return this.extend({font:t})}withTextFontFamily(t){return this.extend({fontFamily:t,font:""})}withTextFontWeight(t){return this.extend({fontWeight:t,font:""})}withTextFontShape(t){return this.extend({fontShape:t,font:""})}sizingClasses(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==Bt.BASESIZE?["sizing","reset-size"+this.size,"size"+Bt.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Z4(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}Bt.BASESIZE=6;var oo=function(t){return new Bt({style:t.displayMode?oe.DISPLAY:oe.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},co=function(t,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),t=z(n,[t])}return t},b3=function(t,r,n){var a=oo(n),i;if(n.output==="mathml")return Vu(t,r,a,n.displayMode,!0);if(n.output==="html"){var u=Ua(t,a);i=z(["katex"],[u])}else{var s=Vu(t,r,a,n.displayMode,!1),l=Ua(t,a);i=z(["katex"],[s,l])}return co(i,n)},E3=function(t,r,n){var a=oo(n),i=Ua(t,a),u=z(["katex"],[i]);return co(u,n)},T3={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",underbracket:"⎵",overbracket:"⎴",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},y0=function(t){var r=new G("mo",[new Me(T3[t.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},x3={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overbracket:[["leftbracketover","rightbracketover"],1.6,440],underbracket:[["leftbracketunder","rightbracketunder"],1.6,410],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},y3=new Set(["widehat","widecheck","widetilde","utilde"]),v0=function(t,r){function n(){var s=4e5,l=t.label.slice(1);if(y3.has(l)&&"base"in t){var c=t.base.type==="ordgroup"?t.base.body.length:1,d,f,g;if(c>5)l==="widehat"||l==="widecheck"?(d=420,s=2364,g=.42,f=l+"4"):(d=312,s=2340,g=.34,f="tilde4");else{var p=[1,1,2,2,3,3][c];l==="widehat"||l==="widecheck"?(s=[0,1062,2364,2364,2364][p],d=[0,239,300,360,420][p],g=[0,.24,.3,.3,.36,.42][p],f=l+p):(s=[0,600,1033,2339,2340][p],d=[0,260,286,306,312][p],g=[0,.26,.286,.3,.306,.34][p],f="tilde"+p)}var x=new Zt(f),S=new zt([x],{width:"100%",height:V(g),viewBox:"0 0 "+s+" "+d,preserveAspectRatio:"none"});return{span:er([],[S],r),minWidth:0,height:g}}else{var D=[],_=x3[l];if(!_)throw new Error('No SVG data for "'+l+'".');var[N,M,W]=_,j=W/1e3,L=N.length,ee,re;if(L===1){if(_.length!==4)throw new Error('Expected 4-tuple for single-path SVG data "'+l+'".');ee=["hide-tail"],re=[_[3]]}else if(L===2)ee=["halfarrow-left","halfarrow-right"],re=["xMinYMin","xMaxYMin"];else if(L===3)ee=["brace-left","brace-center","brace-right"],re=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+L+" children.");for(var K=0;K0&&(a.style.minWidth=V(i)),a},v3=function(t,r,n,a,i){var u,s=t.height+t.depth+n+a;if(/fbox|color|angl/.test(r)){if(u=z(["stretchy",r],[],i),r==="fbox"){var l=i.color&&i.getColor();l&&(u.style.borderColor=l)}}else{var c=[];/^[bx]cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var d=new zt(c,{width:"100%",height:V(s)});u=er([],[d],i)}return u.height=s,u.style.height=V(s),u},A3={bin:1,close:1,inner:1,open:1,punct:1,rel:1},k3={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1};function S3(e){return e in A3}function ce(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function A0(e){var t=k0(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function k0(e){return e&&(e.type==="atom"||k3.hasOwnProperty(e.type))?e:null}var ho=e=>{if(e instanceof ct)return e;if(K4(e)&&e.children.length===1)return ho(e.children[0])},Ai=(e,t)=>{var r,n,a;e&&e.type==="supsub"?(n=ce(e.base,"accent"),r=n.base,e.base=r,a=Q4(Te(e,t)),e.base=n):(n=ce(e,"accent"),r=n.base);var i=Te(r,t.havingCrampedStyle()),u=n.isShifty&&qt(r),s=0;if(u){var l,c;s=(l=(c=ho(i))==null?void 0:c.skew)!=null?l:0}var d=n.label==="\\c",f=d?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight),g;if(n.isStretchy)g=v0(n,t),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:g,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+V(2*s)+")",marginLeft:V(2*s)}:void 0}]});else{var p,x;n.label==="\\vec"?(p=ao("vec",t),x=no.vec[1]):(p=x0({mode:n.mode,text:n.label},t,"textord"),p=$4(p),p.italic=0,x=p.width,d&&(f+=p.depth)),g=z(["accent-body"],[p]);var S=n.label==="\\textcircled";S&&(g.classes.push("accent-full"),f=i.height);var D=s;S||(D-=x/2),g.style.left=V(D),n.label==="\\textcircled"&&(g.style.top=".2em"),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-f},{type:"elem",elem:g}]})}var _=z(["mord","accent"],[g],t);return a?(a.children[0]=_,a.height=Math.max(_.height,a.height),a.classes[0]="mord",a):_},fo=(e,t)=>{var r=e.isStretchy?y0(e.label):new G("mo",[bt(e.label,e.mode)]),n=new G("mover",[Ae(e.base,t),r]);return n.setAttribute("accent","true"),n},w3=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));Z({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=u0(t[0]),n=!w3.test(e.funcName),a=!n||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],n=e.parser.mode;return n==="math"&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:(e,t)=>{var r=Te(e.base,t),n=v0(e,t),a=e.label==="\\utilde"?.12:0,i=Ee({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]});return z(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=y0(e.label),n=new G("munder",[Ae(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Gn=e=>{var t=new G("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};Z({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n,funcName:a}=e;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder(e,t){var r=t.style,n=t.havingStyle(r.sup()),a=Lr(Te(e.body,n,t),t),i=e.label.slice(0,2)==="\\x"?"x":"cd";a.classes.push(i+"-arrow-pad");var u;e.below&&(n=t.havingStyle(r.sub()),u=Lr(Te(e.below,n,t),t),u.classes.push(i+"-arrow-pad"));var s=v0(e,t),l=-t.fontMetrics().axisHeight+.5*s.height,c=-t.fontMetrics().axisHeight-.5*s.height-.111;(a.depth>.25||e.label==="\\xleftequilibrium")&&(c-=a.depth);var d;if(u){var f=-t.fontMetrics().axisHeight+u.height+.5*s.height+.111;d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]},{type:"elem",elem:u,shift:f}]})}else d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]}]});return z(["mrel","x-arrow"],[d],t)},mathmlBuilder(e,t){var r=y0(e.label);r.setAttribute("minsize",e.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(e.body){var a=Gn(Ae(e.body,t));if(e.below){var i=Gn(Ae(e.below,t));n=new G("munderover",[r,i,a])}else n=new G("mover",[r,a])}else if(e.below){var u=Gn(Ae(e.below,t));n=new G("munder",[r,u])}else n=Gn(),n=new G("mover",[r,n]);return n}});function mo(e,t){var r=He(e.body,t,!0);return z([e.mclass],r,t)}function po(e,t){var r,n=dt(e.body,t);return e.mclass==="minner"?r=new G("mpadded",n):e.mclass==="mord"?e.isCharacterBox?(r=n[0],r.type="mi"):r=new G("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new G("mo",n),e.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):e.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):e.mclass==="mopen"||e.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):e.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}Z({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Re(a),isCharacterBox:qt(a)}},htmlBuilder:mo,mathmlBuilder:po});var S0=e=>{var t=e.type==="ordgroup"&&e.body.length?e.body[0]:e;return t.type==="atom"&&(t.family==="bin"||t.family==="rel")?"m"+t.family:"mord"};Z({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:S0(t[0]),body:Re(t[1]),isCharacterBox:qt(t[1])}}});Z({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:n}=e,a=t[1],i=t[0],u;n!=="\\stackrel"?u=S0(a):u="mrel";var s={type:"op",mode:a.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:Re(a)},l={type:"supsub",mode:i.mode,base:s,sup:n==="\\underset"?null:i,sub:n==="\\underset"?i:null};return{type:"mclass",mode:r.mode,mclass:u,body:[l],isCharacterBox:qt(l)}},htmlBuilder:mo,mathmlBuilder:po});Z({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:S0(t[0]),body:Re(t[0])}},htmlBuilder(e,t){var r=He(e.body,t,!0),n=z([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){var r=dt(e.body,t),n=new G("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var C3={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xu=()=>({type:"styling",body:[],mode:"math",style:"display",resetFont:!0}),$u=e=>e.type==="textord"&&e.text==="@",_3=(e,t)=>(e.type==="mathord"||e.type==="atom")&&e.text===t;function I3(e,t,r){var n=C3[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{var a=r.callFunction("\\\\cdleft",[t[0]],[]),i={type:"atom",text:n,mode:"math",family:"rel"},u=r.callFunction("\\Big",[i],[]),s=r.callFunction("\\\\cdright",[t[1]],[]),l={type:"ordgroup",mode:"math",body:[a,u,s]};return r.callFunction("\\\\cdparent",[l],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var c={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[c],[])}default:return{type:"textord",text:" ",mode:"math"}}}function N3(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if(r==="&"||r==="\\\\")e.consume();else if(r==="\\end"){t[t.length-1].length===0&&t.pop();break}else throw new Y("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var n=[],a=[n],i=0;iAV".includes(c))for(var f=0;f<2;f++){for(var g=!0,p=l+1;pAV=|." after @',u[l]);var x=I3(c,d,e),S={type:"styling",body:[x],mode:"math",style:"display",resetFont:!0};n.push(S),s=Xu()}i%2===0?n.push(s):n.shift(),n=[],a.push(n)}e.gullet.endGroup(),e.gullet.endGroup();var D=new Array(a[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:a,arraystretch:1,addJot:!0,rowGaps:[null],cols:D,colSeparationType:"CD",hLinesBeforeRow:new Array(a.length+1).fill([])}}Z({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),n=Lr(Te(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){var r=new G("mrow",[Ae(e.label,t)]);return r=new G("mpadded",[r]),r.setAttribute("width","0"),e.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new G("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Z({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Lr(Te(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new G("mrow",[Ae(e.fragment,t)])}});Z({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,n=ce(t[0],"ordgroup"),a=n.body,i="",u=0;u=1114111)throw new Y("\\@char with invalid code point "+i);return l<=65535?c=String.fromCharCode(l):(l-=65536,c=String.fromCharCode((l>>10)+55296,(l&1023)+56320)),{type:"textord",mode:r.mode,text:c}}});var go=(e,t)=>{var r=He(e.body,t.withColor(e.color),!1);return Gt(r)},bo=(e,t)=>{var r=dt(e.body,t.withColor(e.color)),n=new G("mstyle",r);return n.setAttribute("mathcolor",e.color),n};Z({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,n=ce(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:Re(a)}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:n}=e,a=ce(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:n}=e,a=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&ce(a,"size").value}},htmlBuilder(e,t){var r=z(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(Ie(e.size,t)))),r},mathmlBuilder(e,t){var r=new G("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(Ie(e.size,t)))),r}});var qa={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Eo=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new Y("Expected a control sequence",e);return t},D3=e=>{var t=e.gullet.popToken();return t.text==="="&&(t=e.gullet.popToken(),t.text===" "&&(t=e.gullet.popToken())),t},To=(e,t,r,n)=>{var a=e.gullet.macros.get(r.text);a==null&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};Z({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var n=t.fetch();if(qa[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=qa[n.text]),ce(t.parseFunction(),"internal");throw new Y("Invalid token after macro prefix",n)}});Z({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=t.gullet.popToken(),a=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(a))throw new Y("Expected a control sequence",n);for(var i=0,u,s=[[]];t.gullet.future().text!=="{";)if(n=t.gullet.popToken(),n.text==="#"){if(t.gullet.future().text==="{"){u=t.gullet.future(),s[i].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new Y('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==i+1)throw new Y('Argument number "'+n.text+'" out of order');i++,s.push([])}else{if(n.text==="EOF")throw new Y("Expected a macro definition");s[i].push(n.text)}var{tokens:l}=t.gullet.consumeArg();return u&&l.unshift(u),(r==="\\edef"||r==="\\xdef")&&(l=t.gullet.expandTokens(l),l.reverse()),t.gullet.macros.set(a,{tokens:l,numArgs:i,delimiters:s},r===qa[r]),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken());t.gullet.consumeSpaces();var a=D3(t);return To(t,n,a,r==="\\\\globallet"),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return To(t,n,i,r==="\\\\globalfuture"),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var tn=function(t,r,n){var a=we.math[t]&&we.math[t].replace,i=Ei(a||t,r,n);if(!i)throw new Error("Unsupported symbol "+t+" and font size "+r+".");return i},ki=function(t,r,n,a){var i=n.havingBaseStyle(r),u=z(a.concat(i.sizingClasses(n)),[t],n),s=i.sizeMultiplier/n.sizeMultiplier;return u.height*=s,u.depth*=s,u.maxFontSize=i.sizeMultiplier,u},xo=function(t,r,n){var a=r.havingBaseStyle(n),i=(1-r.sizeMultiplier/a.sizeMultiplier)*r.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=V(i),t.height-=i,t.depth+=i},O3=function(t,r,n,a,i,u){var s=Qe(t,"Main-Regular",i,a),l=ki(s,r,a,u);return xo(l,a,r),l},L3=function(t,r,n,a){return Qe(t,"Size"+r+"-Regular",n,a)},yo=function(t,r,n,a,i,u){var s=L3(t,r,i,a),l=ki(z(["delimsizing","size"+r],[s],a),oe.TEXT,a,u);return n&&xo(l,a,oe.TEXT),l},ua=function(t,r,n){var a;r==="Size1-Regular"?a="delim-size1":a="delim-size4";var i=z(["delimsizinginner",a],[z([],[Qe(t,r,n)])]);return{type:"elem",elem:i}},sa=function(t,r,n){var a=wt["Size4-Regular"][t.charCodeAt(0)]?wt["Size4-Regular"][t.charCodeAt(0)][4]:wt["Size1-Regular"][t.charCodeAt(0)][4],i=new Zt("inner",q4(t,Math.round(1e3*r))),u=new zt([i],{width:V(a),height:V(r),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),s=er([],[u],n);return s.height=r,s.style.height=V(r),s.style.width=V(a),{type:"elem",elem:s}},Ya=.008,Vn={type:"kern",size:-1*Ya},R3=new Set(["|","\\lvert","\\rvert","\\vert"]),M3=new Set(["\\|","\\lVert","\\rVert","\\Vert"]),vo=function(t,r,n,a,i,u){var s,l,c,d,f="",g=0;s=c=d=t,l=null;var p="Size1-Regular";t==="\\uparrow"?c=d="⏐":t==="\\Uparrow"?c=d="‖":t==="\\downarrow"?s=c="⏐":t==="\\Downarrow"?s=c="‖":t==="\\updownarrow"?(s="\\uparrow",c="⏐",d="\\downarrow"):t==="\\Updownarrow"?(s="\\Uparrow",c="‖",d="\\Downarrow"):R3.has(t)?(c="∣",f="vert",g=333):M3.has(t)?(c="∥",f="doublevert",g=556):t==="["||t==="\\lbrack"?(s="⎡",c="⎢",d="⎣",p="Size4-Regular",f="lbrack",g=667):t==="]"||t==="\\rbrack"?(s="⎤",c="⎥",d="⎦",p="Size4-Regular",f="rbrack",g=667):t==="\\lfloor"||t==="⌊"?(c=s="⎢",d="⎣",p="Size4-Regular",f="lfloor",g=667):t==="\\lceil"||t==="⌈"?(s="⎡",c=d="⎢",p="Size4-Regular",f="lceil",g=667):t==="\\rfloor"||t==="⌋"?(c=s="⎥",d="⎦",p="Size4-Regular",f="rfloor",g=667):t==="\\rceil"||t==="⌉"?(s="⎤",c=d="⎥",p="Size4-Regular",f="rceil",g=667):t==="("||t==="\\lparen"?(s="⎛",c="⎜",d="⎝",p="Size4-Regular",f="lparen",g=875):t===")"||t==="\\rparen"?(s="⎞",c="⎟",d="⎠",p="Size4-Regular",f="rparen",g=875):t==="\\{"||t==="\\lbrace"?(s="⎧",l="⎨",d="⎩",c="⎪",p="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(s="⎫",l="⎬",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lgroup"||t==="⟮"?(s="⎧",d="⎩",c="⎪",p="Size4-Regular"):t==="\\rgroup"||t==="⟯"?(s="⎫",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lmoustache"||t==="⎰"?(s="⎧",d="⎭",c="⎪",p="Size4-Regular"):(t==="\\rmoustache"||t==="⎱")&&(s="⎫",d="⎩",c="⎪",p="Size4-Regular");var x=tn(s,p,i),S=x.height+x.depth,D=tn(c,p,i),_=D.height+D.depth,N=tn(d,p,i),M=N.height+N.depth,W=0,j=1;if(l!==null){var L=tn(l,p,i);W=L.height+L.depth,j=2}var ee=S+M+W,re=Math.max(0,Math.ceil((r-ee)/(j*_))),K=ee+re*j*_,R=a.fontMetrics().axisHeight;n&&(R*=a.sizeMultiplier);var J=K/2-R,Q=[];if(f.length>0){var be=K-S-M,ne=Math.round(K*1e3),X=Y4(f,Math.round(be*1e3)),me=new Zt(f,X),ke=V(g/1e3),ze=V(ne/1e3),at=new zt([me],{width:ke,height:ze,viewBox:"0 0 "+g+" "+ne}),w=er([],[at],a);w.height=ne/1e3,w.style.width=ke,w.style.height=ze,Q.push({type:"elem",elem:w})}else{if(Q.push(ua(d,p,i)),Q.push(Vn),l===null){var Oe=K-S-M+2*Ya;Q.push(sa(c,Oe,a))}else{var Xe=(K-S-M-W)/2+2*Ya;Q.push(sa(c,Xe,a)),Q.push(Vn),Q.push(ua(l,p,i)),Q.push(Vn),Q.push(sa(c,Xe,a))}Q.push(Vn),Q.push(ua(s,p,i))}var C=a.havingBaseStyle(oe.TEXT),Ye=Ee({positionType:"bottom",positionData:J,children:Q});return ki(z(["delimsizing","mult"],[Ye],C),oe.TEXT,a,u)},la=80,oa=.08,ca=function(t,r,n,a,i){var u=U4(t,a,n),s=new Zt(t,u),l=new zt([s],{width:"400em",height:V(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return er(["hide-tail"],[l],i)},P3=function(t,r){var n=r.havingBaseSizing(),a=Co("\\surd",t*n.sizeMultiplier,wo,n),i=n.sizeMultiplier,u=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),s,l,c,d,f;return a.type==="small"?(d=1e3+1e3*u+la,t<1?i=1:t<1.4&&(i=.7),l=(1+u+oa)/i,c=(1+u)/i,s=ca("sqrtMain",l,d,u,r),s.style.minWidth="0.853em",f=.833/i):a.type==="large"?(d=(1e3+la)*sn[a.size],c=(sn[a.size]+u)/i,l=(sn[a.size]+u+oa)/i,s=ca("sqrtSize"+a.size,l,d,u,r),s.style.minWidth="1.02em",f=1/i):(l=t+u+oa,c=t+u,d=Math.floor(1e3*t+u)+la,s=ca("sqrtTall",l,d,u,r),s.style.minWidth="0.742em",f=1.056),s.height=c,s.style.height=V(l),{span:s,advanceWidth:f,ruleWidth:(r.fontMetrics().sqrtRuleThickness+u)*i}},Ao=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"]),B3=new Set(["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"]),ko=new Set(["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),sn=[0,1.2,1.8,2.4,3],So=function(t,r,n,a,i){if(t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle"),Ao.has(t)||ko.has(t))return yo(t,r,!1,n,a,i);if(B3.has(t))return vo(t,sn[r],!1,n,a,i);throw new Y("Illegal delimiter: '"+t+"'")},F3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],H3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"stack"}],wo=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],z3=function(t){if(t.type==="small")return"Main-Regular";if(t.type==="large")return"Size"+t.size+"-Regular";if(t.type==="stack")return"Size4-Regular";var r=t.type;throw new Error("Add support for delim type '"+r+"' here.")},Co=function(t,r,n,a){for(var i=Math.min(2,3-a.style.size),u=i;ur)return s}return n[n.length-1]},Ga=function(t,r,n,a,i,u){t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle");var s;ko.has(t)?s=F3:Ao.has(t)?s=wo:s=H3;var l=Co(t,r,s,a);return l.type==="small"?O3(t,l.style,n,a,i,u):l.type==="large"?yo(t,l.size,n,a,i,u):vo(t,r,n,a,i,u)},ha=function(t,r,n,a,i,u){var s=a.fontMetrics().axisHeight*a.sizeMultiplier,l=901,c=5/a.fontMetrics().ptPerEm,d=Math.max(r-s,n+s),f=Math.max(d/500*l,2*d-c);return Ga(t,f,!0,a,i,u)},Qu={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},U3=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."]);function Ku(e){return"isMiddle"in e}function w0(e,t){var r=k0(e);if(r&&U3.has(r.text))return r;throw r?new Y("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e):new Y("Invalid delimiter type '"+e.type+"'",e)}Z({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=w0(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Qu[e.funcName].size,mclass:Qu[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>e.delim==="."?z([e.mclass]):So(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];e.delim!=="."&&t.push(bt(e.delim,e.mode));var r=new G("mo",t);e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(sn[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}});function Ju(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Z({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new Y("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:w0(t[0],e).text,color:r}}});Z({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=ce(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Ju(e);for(var r=He(e.body,t,!0,["mopen","mclose"]),n=0,a=0,i=!1,u=0;u{Ju(e);var r=dt(e.body,t);if(e.left!=="."){var n=new G("mo",[bt(e.left,e.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(e.right!=="."){var a=new G("mo",[bt(e.right,e.mode)]);a.setAttribute("fence","true"),e.rightColor&&a.setAttribute("mathcolor",e.rightColor),r.push(a)}return yi(r)}});Z({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e);if(!e.parser.leftrightDepth)throw new Y("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;return e.delim==="."?r=bn(t,[]):(r=So(e.delim,1,t,e.mode,[]),r.isMiddle={delim:e.delim,options:t}),r},mathmlBuilder:(e,t)=>{var r=e.delim==="\\vert"||e.delim==="|"?bt("|","text"):bt(e.delim,e.mode),n=new G("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});var C0=(e,t)=>{var r=Lr(Te(e.body,t),t),n=e.label.slice(1),a=t.sizeMultiplier,i,u,s=qt(e.body);if(n==="sout")i=z(["stretchy","sout"]),i.height=t.fontMetrics().defaultRuleThickness/a,u=-.5*t.fontMetrics().xHeight;else if(n==="phase"){var l=Ie({number:.6,unit:"pt"},t),c=Ie({number:.35,unit:"ex"},t),d=t.havingBaseSizing();a=a/d.sizeMultiplier;var f=r.height+r.depth+l+c;r.style.paddingLeft=V(f/2+l);var g=Math.floor(1e3*f*a),p=H4(g),x=new zt([new Zt("phase",p)],{width:"400em",height:V(g/1e3),viewBox:"0 0 400000 "+g,preserveAspectRatio:"xMinYMin slice"});i=er(["hide-tail"],[x],t),i.style.height=V(f),u=r.depth+l+c}else{/cancel/.test(n)?s||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var S,D,_=0;/box/.test(n)?(_=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),S=t.fontMetrics().fboxsep+(n==="colorbox"?0:_),D=S):n==="angl"?(_=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),S=4*_,D=Math.max(0,.25-r.depth)):(S=s?.2:0,D=S),i=v3(r,n,S,D,t),/fbox|boxed|fcolorbox/.test(n)?(i.style.borderStyle="solid",i.style.borderWidth=V(_)):n==="angl"&&_!==.049&&(i.style.borderTopWidth=V(_),i.style.borderRightWidth=V(_)),u=r.depth+D,e.backgroundColor&&(i.style.backgroundColor=e.backgroundColor,e.borderColor&&(i.style.borderColor=e.borderColor))}var N;if(e.backgroundColor)N=Ee({positionType:"individualShift",children:[{type:"elem",elem:i,shift:u},{type:"elem",elem:r,shift:0}]});else{var M=/cancel|phase/.test(n)?["svg-align"]:[];N=Ee({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:i,shift:u,wrapperClasses:M}]})}return/cancel/.test(n)&&(N.height=r.height,N.depth=r.depth),/cancel/.test(n)&&!s?z(["mord","cancel-lap"],[N],t):z(["mord"],[N],t)},_0=(e,t)=>{var r,n=new G(e.label.includes("colorbox")?"mpadded":"menclose",[Ae(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+V(a)+" solid "+e.borderColor)}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};Z({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:u}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=ce(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:u,borderColor:i,body:s}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}});Z({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\sout"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e;r.mode==="math"&&r.settings.reportNonstrict("mathVsSout","LaTeX's \\sout works only in text mode");var a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var _o={};function Nt(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l{var t=e.parser.settings;if(!t.displayMode)throw new Y("{"+e.envName+"} can be used only in display mode.")},q3=new Set(["gather","gather*"]);function Si(e){if(!e.includes("ed"))return!e.includes("*")}function ar(e,t,r){var{hskipBeforeAndAfter:n,addJot:a,cols:i,arraystretch:u,colSeparationType:s,autoTag:l,singleRow:c,emptySingleRow:d,maxNumCols:f,leqno:g}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!u){var p=e.gullet.expandMacroAsText("\\arraystretch");if(p==null)u=1;else if(u=parseFloat(p),!u||u<0)throw new Y("Invalid \\arraystretch: "+p)}e.gullet.beginGroup();var x=[],S=[x],D=[],_=[],N=l!=null?[]:void 0;function M(){l&&e.gullet.macros.set("\\@eqnsw","1",!0)}function W(){N&&(e.gullet.macros.get("\\df@tag")?(N.push(e.subparse([new ot("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):N.push(!!l&&e.gullet.macros.get("\\@eqnsw")==="1"))}for(M(),_.push(Zu(e));;){var j=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup();var L={type:"ordgroup",mode:e.mode,body:j};r&&(L={type:"styling",mode:e.mode,style:r,resetFont:!0,body:[L]}),x.push(L);var ee=e.fetch().text;if(ee==="&"){if(f&&x.length===f){if(c||s)throw new Y("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else if(ee==="\\end"){W(),x.length===1&&L.type==="styling"&&L.body.length===1&&L.body[0].type==="ordgroup"&&L.body[0].body.length===0&&(S.length>1||!d)&&S.pop(),_.length0&&(M+=.25),c.push({pos:M,isDashed:ue[he]})}for(W(u[0]),n=0;n0&&(J+=N,eeue))for(n=0;n=s)){var it=void 0;if(a>0||t.hskipBeforeAndAfter){var Lt,ir;it=(Lt=(ir=C)==null?void 0:ir.pregap)!=null?Lt:g,it!==0&&(X=z(["arraycolsep"],[]),X.style.width=V(it),ne.push(X))}var _n=[];for(n=0;n0){for(var R0=Or("hline",r,d),M0=Or("hdashline",r,d),Vr=[{type:"elem",elem:ur,shift:0}];c.length>0;){var Ln=c.pop(),Rn=Ln.pos-Q;Ln.isDashed?Vr.push({type:"elem",elem:M0,shift:Rn}):Vr.push({type:"elem",elem:R0,shift:Rn})}ur=Ee({positionType:"individualShift",children:Vr})}if(ke.length===0)return z(["mord"],[ur],r);var B=Ee({positionType:"individualShift",children:ke}),$=z(["tag"],[B],r);return Gt([ur,$])},Y3={c:"center ",l:"left ",r:"right "},Ot=function(t,r){for(var n=[],a=new G("mtd",[],["mtr-glue"]),i=new G("mtd",[],["mml-eqn-num"]),u=0;u0){var x=t.cols,S="",D=!1,_=0,N=x.length;x[0].type==="separator"&&(g+="top ",_=1),x[x.length-1].type==="separator"&&(g+="bottom ",N-=1);for(var M=_;M0?"left ":"",g+=K[K.length-1].length>0?"right ":"";for(var R=1;R0&&p&&(D=1),n[x]={type:"align",align:S,pregap:D,postgap:0}}return u.colSeparationType=p?"align":"alignat",u};Nt({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(u){var s=A0(u),l=s.text;if("lcr".includes(l))return{type:"align",align:l};if(l==="|")return{type:"separator",separator:"|"};if(l===":")return{type:"separator",separator:":"};throw new Y("Unknown column alignment: "+l,u)}),i={cols:a,hskipBeforeAndAfter:!0,maxNumCols:a.length};return ar(e.parser,i,wi(e.envName))},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(e.envName.charAt(e.envName.length-1)==="*"){var a=e.parser;if(a.consumeSpaces(),a.fetch().text==="["){if(a.consume(),a.consumeSpaces(),r=a.fetch().text,!"lcr".includes(r))throw new Y("Expected l or c or r",a.nextToken);a.consume(),a.consumeSpaces(),a.expect("]"),a.consume(),n.cols=[{type:"align",align:r}]}}var i=ar(e.parser,n,wi(e.envName)),u=Math.max(0,...i.body.map(s=>s.length));return i.cols=new Array(u).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[i],left:t[0],right:t[1],rightColor:void 0}:i},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t={arraystretch:.5},r=ar(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(s){var l=A0(s),c=l.text;if("lc".includes(c))return{type:"align",align:c};throw new Y("Unknown column alignment: "+c,s)});if(a.length>1)throw new Y("{subarray} can contain only one column");var i={cols:a,hskipBeforeAndAfter:!1,arraystretch:.5},u=ar(e.parser,i,"script");if(u.body.length>0&&u.body[0].length>1)throw new Y("{subarray} can contain only one column");return u},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ar(e.parser,t,wi(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:e.envName.includes("r")?".":"\\{",right:e.envName.includes("r")?"\\}":".",rightColor:void 0}},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){q3.has(e.envName)&&I0(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Si(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){I0(e);var t={autoTag:Si(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["CD"],props:{numArgs:0},handler(e){return I0(e),N3(e.parser)},htmlBuilder:Dt,mathmlBuilder:Ot});E("\\nonumber","\\gdef\\@eqnsw{0}");E("\\notag","\\nonumber");Z({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new Y(e.funcName+" valid only within array environment")}});var es=_o;Z({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];if(a.type!=="ordgroup")throw new Y("Invalid environment name",a);for(var i="",u=0;u{var r=e.font,n=t.withFont(r);return Te(e.body,n)},Oo=(e,t)=>{var r=e.font,n=t.withFont(r);return Ae(e.body,n)},ts={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};Z({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=u0(t[0]),i=n;return i in ts&&(i=ts[i]),{type:"font",mode:r.mode,font:i.slice(1),body:a}},htmlBuilder:Do,mathmlBuilder:Oo});Z({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:S0(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:qt(n)}}});Z({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n,breakOnTokenText:a}=e,{mode:i}=r,u=r.parseExpression(!0,a);return{type:"font",mode:i,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:u}}},htmlBuilder:Do,mathmlBuilder:Oo});var G3=(e,t)=>{var r=t.style,n=r.fracNum(),a=r.fracDen(),i;i=t.havingStyle(n);var u=Te(e.numer,i,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;u.height=u.height0?x=3*g:x=7*g,S=t.fontMetrics().denom1):(f>0?(p=t.fontMetrics().num2,x=g):(p=t.fontMetrics().num3,x=3*g),S=t.fontMetrics().denom2);var D;if(d){var N=t.fontMetrics().axisHeight;p-u.depth-(N+.5*f){var r=new G("mfrac",[Ae(e.numer,t),Ae(e.denom,t)]);if(!e.hasBarLine)r.setAttribute("linethickness","0px");else if(e.barSize){var n=Ie(e.barSize,t);r.setAttribute("linethickness",V(n))}if(e.leftDelim!=null||e.rightDelim!=null){var a=[];if(e.leftDelim!=null){var i=new G("mo",[new Me(e.leftDelim.replace("\\",""))]);i.setAttribute("fence","true"),a.push(i)}if(a.push(r),e.rightDelim!=null){var u=new G("mo",[new Me(e.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),a.push(u)}return yi(a)}return r},Lo=(e,t)=>{if(!t)return e;var r={type:"styling",mode:e.mode,style:t,body:[e]};return r};Z({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=t[1],u,s=null,l=null;switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":u=!0;break;case"\\\\atopfrac":u=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":u=!1,s="(",l=")";break;case"\\\\bracefrac":u=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":u=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}var c=n==="\\cfrac",d=null;return c||n.startsWith("\\d")?d="display":n.startsWith("\\t")&&(d="text"),Lo({type:"genfrac",mode:r.mode,numer:a,denom:i,continued:c,hasBarLine:u,leftDelim:s,rightDelim:l,barSize:null},d)},htmlBuilder:G3,mathmlBuilder:V3});Z({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var{parser:t,funcName:r,token:n}=e,a;switch(r){case"\\over":a="\\frac";break;case"\\choose":a="\\binom";break;case"\\atop":a="\\\\atopfrac";break;case"\\brace":a="\\\\bracefrac";break;case"\\brack":a="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:t.mode,replaceWith:a,token:n}}});var rs=["display","text","script","scriptscript"],ns=function(t){var r=null;return t.length>0&&(r=t,r=r==="."?null:r),r};Z({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var{parser:r}=e,n=t[4],a=t[5],i=u0(t[0]),u=i.type==="atom"&&i.family==="open"?ns(i.text):null,s=u0(t[1]),l=s.type==="atom"&&s.family==="close"?ns(s.text):null,c=ce(t[2],"size"),d,f=null;c.isBlank?d=!0:(f=c.value,d=f.number>0);var g=null,p=t[3];if(p.type==="ordgroup"){if(p.body.length>0){var x=ce(p.body[0],"textord");g=rs[Number(x.text)]}}else p=ce(p,"textord"),g=rs[Number(p.text)];return Lo({type:"genfrac",mode:r.mode,numer:n,denom:a,continued:!1,hasBarLine:d,barSize:f,leftDelim:u,rightDelim:l},g)}});Z({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:n,token:a}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:ce(t[0],"size").value,token:a}}});Z({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=ce(t[1],"infix").size;if(!i)throw new Error("\\\\abovefrac expected size, but got "+String(i));var u=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:u,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null}}});var Ro=(e,t)=>{var r=t.style,n,a;e.type==="supsub"?(n=e.sup?Te(e.sup,t.havingStyle(r.sup()),t):Te(e.sub,t.havingStyle(r.sub()),t),a=ce(e.base,"horizBrace")):a=ce(e,"horizBrace");var i=Te(a.base,t.havingBaseStyle(oe.DISPLAY)),u=v0(a,t),s;if(a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:u,wrapperClasses:["svg-align"]}]}):s=Ee({positionType:"bottom",positionData:i.depth+.1+u.height,children:[{type:"elem",elem:u,wrapperClasses:["svg-align"]},{type:"kern",size:.1},{type:"elem",elem:i}]}),n){var l=z(["minner",a.isOver?"mover":"munder"],[s],t);a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:n}]}):s=Ee({positionType:"bottom",positionData:l.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:l}]})}return z(["minner",a.isOver?"mover":"munder"],[s],t)},j3=(e,t)=>{var r=y0(e.label);return new G(e.isOver?"mover":"munder",[Ae(e.base,t),r])};Z({type:"horizBrace",names:["\\overbrace","\\underbrace","\\overbracket","\\underbracket"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:n.includes("\\over"),base:t[0]}},htmlBuilder:Ro,mathmlBuilder:j3});Z({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[1],a=ce(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:Re(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=He(e.body,t,!1);return i3(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=tr(e.body,t);return r instanceof G||(r=new G("mrow",[r])),r.setAttribute("href",e.href),r}});Z({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=ce(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i{var{parser:r,funcName:n,token:a}=e,i=ce(t[0],"raw").string,u=t[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var s,l={};switch(n){case"\\htmlClass":l.class=i,s={command:"\\htmlClass",class:i};break;case"\\htmlId":l.id=i,s={command:"\\htmlId",id:i};break;case"\\htmlStyle":l.style=i,s={command:"\\htmlStyle",style:i};break;case"\\htmlData":{for(var c=i.split(","),d=0;d{var r=He(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));var a=z(n,r,t);for(var i in e.attributes)i!=="class"&&e.attributes.hasOwnProperty(i)&&a.setAttribute(i,e.attributes[i]);return a},mathmlBuilder:(e,t)=>tr(e.body,t)});Z({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInArgument:!0,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Re(t[0]),mathml:Re(t[1])}},htmlBuilder:(e,t)=>{var r=He(e.html,t,!1);return Gt(r)},mathmlBuilder:(e,t)=>tr(e.mathml,t)});var da=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new Y("Invalid size: '"+t+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!Ql(n))throw new Y("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n};Z({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:n}=e,a={number:0,unit:"em"},i={number:.9,unit:"em"},u={number:0,unit:"em"},s="";if(r[0])for(var l=ce(r[0],"raw").string,c=l.split(","),d=0;d{var r=Ie(e.height,t),n=0;e.totalheight.number>0&&(n=Ie(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=Ie(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var u=new W4(e.src,e.alt,i);return u.height=r,u.depth=n,u},mathmlBuilder:(e,t)=>{var r=new G("mglyph",[]);r.setAttribute("alt",e.alt);var n=Ie(e.height,t),a=0;if(e.totalheight.number>0&&(a=Ie(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=Ie(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}});Z({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=ce(t[0],"size");if(r.settings.strict){var i=n[1]==="m",u=a.value.unit==="mu";i?(u||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+a.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):u&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder(e,t){return ro(e.dimension,t)},mathmlBuilder(e,t){var r=Ie(e.dimension,t);return new lo(r)}});Z({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:(e,t)=>{var r;e.alignment==="clap"?(r=z([],[Te(e.body,t)]),r=z(["inner"],[r],t)):r=z(["inner"],[Te(e.body,t)]);var n=z(["fix"],[]),a=z([e.alignment],[r,n],t),i=z(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=z(["thinbox"],[a],t),z(["mord","vbox"],[a],t)},mathmlBuilder:(e,t)=>{var r=new G("mpadded",[Ae(e.body,t)]);if(e.alignment!=="rlap"){var n=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}});Z({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:n}=e,a=n.mode;n.switchMode("math");var i=r==="\\("?"\\)":"$",u=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",resetFont:!0,body:u}}});Z({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new Y("Mismatched "+e.funcName)}});var as=(e,t)=>{switch(t.style.size){case oe.DISPLAY.size:return e.display;case oe.TEXT.size:return e.text;case oe.SCRIPT.size:return e.script;case oe.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};Z({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Re(t[0]),text:Re(t[1]),script:Re(t[2]),scriptscript:Re(t[3])}},htmlBuilder:(e,t)=>{var r=as(e,t),n=He(r,t,!1);return Gt(n)},mathmlBuilder:(e,t)=>{var r=as(e,t);return tr(r,t)}});var Mo=(e,t,r,n,a,i,u)=>{e=z([],[e]);var s=r&&qt(r),l,c;if(t){var d=Te(t,n.havingStyle(a.sup()),n);c={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-d.depth)}}if(r){var f=Te(r,n.havingStyle(a.sub()),n);l={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-f.height)}}var g;if(c&&l){var p=n.fontMetrics().bigOpSpacing5+l.elem.height+l.elem.depth+l.kern+e.depth+u;g=Ee({positionType:"bottom",positionData:p,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else if(l){var x=e.height-u;g=Ee({positionType:"top",positionData:x,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e}]})}else if(c){var S=e.depth+u;g=Ee({positionType:"bottom",positionData:S,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else return e;var D=[g];if(l&&i!==0&&!s){var _=z(["mspace"],[],n);_.style.marginRight=V(i),D.unshift(_)}return z(["mop","op-limits"],D,n)},Po=new Set(["\\smallint"]),zr=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"op"),a=!0):i=ce(e,"op");var u=t.style,s=!1;u.size===oe.DISPLAY.size&&i.symbol&&!Po.has(i.name)&&(s=!0);var l,c;if(i.symbol){var d=s?"Size2-Regular":"Size1-Regular",f="";if((i.name==="\\oiint"||i.name==="\\oiiint")&&(f=i.name.slice(1),i.name=f==="oiint"?"\\iint":"\\iiint"),l=Qe(i.name,d,"math",t,["mop","op-symbol",s?"large-op":"small-op"]),c=l.italic,f.length>0){var g=ao(f+"Size"+(s?"2":"1"),t);l=Ee({positionType:"individualShift",children:[{type:"elem",elem:l,shift:0},{type:"elem",elem:g,shift:s?.08:0}]}),i.name="\\"+f,l.classes.unshift("mop"),l.italic=c}}else if(i.body){var p=He(i.body,t,!0);p.length===1&&p[0]instanceof ct?(l=p[0],l.classes[0]="mop"):l=z(["mop"],p,t)}else{for(var x=[],S=1;S{var r;if(e.symbol)r=new G("mo",[bt(e.name,e.mode)]),Po.has(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new G("mo",dt(e.body,t));else{r=new G("mi",[new Me(e.name.slice(1))]);var n=new G("mo",[bt("⁡","text")]);e.parentIsSupSub?r=new G("mrow",[r,n]):r=so([r,n])}return r},W3={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Z({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=n;return a.length===1&&(a=W3[a]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Re(n)}},htmlBuilder:zr,mathmlBuilder:Sn});var X3={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Z({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0,allowedInArgument:!0},handler(e){var{parser:t,funcName:r}=e,n=r;return n.length===1&&(n=X3[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:zr,mathmlBuilder:Sn});var Bo=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"operatorname"),a=!0):i=ce(e,"operatorname");var u;if(i.body.length>0){for(var s=i.body.map(f=>{var g="text"in f?f.text:void 0;return typeof g=="string"?{type:"textord",mode:f.mode,text:g}:f}),l=He(s,t.withFont("mathrm"),!0),c=0;c{for(var r=dt(e.body,t.withFont("mathrm")),n=!0,a=0;ad.toText()).join("");r=[new Me(s)]}var l=new G("mi",r);l.setAttribute("mathvariant","normal");var c=new G("mo",[bt("⁡","text")]);return e.parentIsSupSub?new G("mrow",[l,c]):so([l,c])};Z({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"operatorname",mode:r.mode,body:Re(a),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:Bo,mathmlBuilder:$3});E("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");br({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Gt(He(e.body,t,!1)):z(["mord"],He(e.body,t,!0),t)},mathmlBuilder(e,t){return tr(e.body,t,!0)}});Z({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle()),n=Or("overline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*a},{type:"elem",elem:n},{type:"kern",size:a}]});return z(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("mover",[Ae(e.body,t),r]);return n.setAttribute("accent","true"),n}});Z({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"phantom",mode:r.mode,body:Re(n)}},htmlBuilder:(e,t)=>{var r=He(e.body,t.withPhantom(),!1);return Gt(r)},mathmlBuilder:(e,t)=>{var r=dt(e.body,t);return new G("mphantom",r)}});E("\\hphantom","\\smash{\\phantom{#1}}");Z({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{var r=z(["inner"],[Te(e.body,t.withPhantom())]),n=z(["fix"],[]);return z(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{var r=dt(Re(e.body),t),n=new G("mphantom",r),a=new G("mpadded",[n]);return a.setAttribute("width","0px"),a}});Z({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,n=ce(t[0],"size").value,a=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:a}},htmlBuilder(e,t){var r=Te(e.body,t),n=Ie(e.dy,t);return Ee({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}});Z({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}});Z({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){var{parser:n}=e,a=r[0],i=ce(t[0],"size"),u=ce(t[1],"size");return{type:"rule",mode:n.mode,shift:a&&ce(a,"size").value,width:i.value,height:u.value}},htmlBuilder(e,t){var r=z(["mord","rule"],[],t),n=Ie(e.width,t),a=Ie(e.height,t),i=e.shift?Ie(e.shift,t):0;return r.style.borderRightWidth=V(n),r.style.borderTopWidth=V(a),r.style.bottom=V(i),r.width=n,r.height=a+i,r.depth=-i,r.maxFontSize=a*1.125*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=Ie(e.width,t),n=Ie(e.height,t),a=e.shift?Ie(e.shift,t):0,i=t.color&&t.getColor()||"black",u=new G("mspace");u.setAttribute("mathbackground",i),u.setAttribute("width",V(r)),u.setAttribute("height",V(n));var s=new G("mpadded",[u]);return a>=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});function Fo(e,t,r){for(var n=He(e,t,!1),a=t.sizeMultiplier/r.sizeMultiplier,i=0;i{var r=t.havingSize(e.size);return Fo(e.body,r,t)};Z({type:"sizing",names:is,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:is.indexOf(n)+1,body:i}},htmlBuilder:Q3,mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),n=dt(e.body,r),a=new G("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}});Z({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:n}=e,a=!1,i=!1,u=r[0]&&ce(r[0],"ordgroup");if(u)for(var s,l=0;l{var r=z([],[Te(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0),e.smashDepth&&(r.depth=0),e.smashHeight&&e.smashDepth)return z(["mord","smash"],[r],t);if(r.children)for(var n=0;n{var r=new G("mpadded",[Ae(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}});Z({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n}=e,a=r[0],i=t[0];return{type:"sqrt",mode:n.mode,body:i,index:a}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle());r.height===0&&(r.height=t.fontMetrics().xHeight),r=Lr(r,t);var n=t.fontMetrics(),a=n.defaultRuleThickness,i=a;t.style.idr.height+r.depth+u&&(u=(u+f-r.height-r.depth)/2);var g=l.height-r.height-u-c;r.style.paddingLeft=V(d);var p=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+g)},{type:"elem",elem:l},{type:"kern",size:c}]});if(e.index){var x=t.havingStyle(oe.SCRIPTSCRIPT),S=Te(e.index,x,t),D=.6*(p.height-p.depth),_=Ee({positionType:"shift",positionData:-D,children:[{type:"elem",elem:S}]}),N=z(["root"],[_]);return z(["mord","sqrt"],[N,p],t)}else return z(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:n}=e;return n?new G("mroot",[Ae(r,t),Ae(n,t)]):new G("msqrt",[Ae(r,t)])}});var Va={display:oe.DISPLAY,text:oe.TEXT,script:oe.SCRIPT,scriptscript:oe.SCRIPTSCRIPT};function K3(e){return e in Va}Z({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!0,r),u=n.slice(1,n.length-5);if(!K3(u))throw new Error("Unknown style: "+u);return{type:"styling",mode:a.mode,style:u,body:i}},htmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);return e.resetFont&&(n=n.withFont("")),Fo(e.body,n,t)},mathmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);e.resetFont&&(n=n.withFont(""));var a=dt(e.body,n),i=new G("mstyle",a),u={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},s=u[e.style];return i.setAttribute("scriptlevel",s[0]),i.setAttribute("displaystyle",s[1]),i}});var J3=function(t,r){var n=t.base;if(n)if(n.type==="op"){var a=n.limits&&(r.style.size===oe.DISPLAY.size||n.alwaysHandleSupSub);return a?zr:null}else if(n.type==="operatorname"){var i=n.alwaysHandleSupSub&&(r.style.size===oe.DISPLAY.size||n.limits);return i?Bo:null}else{if(n.type==="accent")return qt(n.base)?Ai:null;if(n.type==="horizBrace"){var u=!t.sub;return u===n.isOver?Ro:null}else return null}else return null};br({type:"supsub",htmlBuilder(e,t){var r=J3(e,t);if(r)return r(e,t);var{base:n,sup:a,sub:i}=e,u=Te(n,t),s,l,c=t.fontMetrics(),d=0,f=0,g=n&&qt(n);if(a){var p=t.havingStyle(t.style.sup());s=Te(a,p,t),g||(d=u.height-p.fontMetrics().supDrop*p.sizeMultiplier/t.sizeMultiplier)}if(i){var x=t.havingStyle(t.style.sub());l=Te(i,x,t),g||(f=u.depth+x.fontMetrics().subDrop*x.sizeMultiplier/t.sizeMultiplier)}var S;t.style===oe.DISPLAY?S=c.sup1:t.style.cramped?S=c.sup3:S=c.sup2;var D=t.sizeMultiplier,_=V(.5/c.ptPerEm/D),N=null;if(l){var M=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");if(u instanceof ct||M){var W;N=V(-((W=u.italic)!=null?W:0))}}var j;if(s&&l){d=Math.max(d,S,s.depth+.25*c.xHeight),f=Math.max(f,c.sub2);var L=c.defaultRuleThickness,ee=4*L;if(d-s.depth-(l.height-f)0&&(d+=re,f-=re)}var K=[{type:"elem",elem:l,shift:f,marginRight:_,marginLeft:N},{type:"elem",elem:s,shift:-d,marginRight:_}];j=Ee({positionType:"individualShift",children:K})}else if(l){f=Math.max(f,c.sub1,l.height-.8*c.xHeight);var R=[{type:"elem",elem:l,marginLeft:N,marginRight:_}];j=Ee({positionType:"shift",positionData:f,children:R})}else if(s)d=Math.max(d,S,s.depth+.25*c.xHeight),j=Ee({positionType:"shift",positionData:-d,children:[{type:"elem",elem:s,marginRight:_}]});else throw new Error("supsub must have either sup or sub.");var J=za(u,"right")||"mord";return z([J],[u,z(["msupsub"],[j])],t)},mathmlBuilder(e,t){var r=!1,n,a;e.base&&e.base.type==="horizBrace"&&(a=!!e.sup,a===e.base.isOver&&(r=!0,n=e.base.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var i=[Ae(e.base,t)];e.sub&&i.push(Ae(e.sub,t)),e.sup&&i.push(Ae(e.sup,t));var u;if(r)u=n?"mover":"munder";else if(e.sub)if(e.sup){var c=e.base;c&&c.type==="op"&&c.limits&&t.style===oe.DISPLAY||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(t.style===oe.DISPLAY||c.limits)?u="munderover":u="msubsup"}else{var l=e.base;l&&l.type==="op"&&l.limits&&(t.style===oe.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||t.style===oe.DISPLAY)?u="munder":u="msub"}else{var s=e.base;s&&s.type==="op"&&s.limits&&(t.style===oe.DISPLAY||s.alwaysHandleSupSub)||s&&s.type==="operatorname"&&s.alwaysHandleSupSub&&(s.limits||t.style===oe.DISPLAY)?u="mover":u="msup"}return new G(u,i)}});br({type:"atom",htmlBuilder(e,t){return Ti(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){var r=new G("mo",[bt(e.text,e.mode)]);if(e.family==="bin"){var n=vi(e,t);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});var Ho={mi:"italic",mn:"normal",mtext:"normal"};br({type:"mathord",htmlBuilder(e,t){return x0(e,t,"mathord")},mathmlBuilder(e,t){var r=new G("mi",[bt(e.text,e.mode,t)]),n=vi(e,t)||"italic";return n!==Ho[r.type]&&r.setAttribute("mathvariant",n),r}});br({type:"textord",htmlBuilder(e,t){return x0(e,t,"textord")},mathmlBuilder(e,t){var r=bt(e.text,e.mode,t),n=vi(e,t)||"normal",a;return e.mode==="text"?a=new G("mtext",[r]):/[0-9]/.test(e.text)?a=new G("mn",[r]):e.text==="\\prime"?a=new G("mo",[r]):a=new G("mi",[r]),n!==Ho[a.type]&&a.setAttribute("mathvariant",n),a}});var fa={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ma={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};br({type:"spacing",htmlBuilder(e,t){if(ma.hasOwnProperty(e.text)){var r=ma[e.text].className||"";if(e.mode==="text"){var n=x0(e,t,"textord");return n.classes.push(r),n}else return z(["mspace",r],[Ti(e.text,e.mode,t)],t)}else{if(fa.hasOwnProperty(e.text))return z(["mspace",fa[e.text]],[],t);throw new Y('Unknown type of space "'+e.text+'"')}},mathmlBuilder(e,t){var r;if(ma.hasOwnProperty(e.text))r=new G("mtext",[new Me(" ")]);else{if(fa.hasOwnProperty(e.text))return new G("mspace");throw new Y('Unknown type of space "'+e.text+'"')}return r}});var us=()=>{var e=new G("mtd",[]);return e.setAttribute("width","50%"),e};br({type:"tag",mathmlBuilder(e,t){var r=new G("mtable",[new G("mtr",[us(),new G("mtd",[tr(e.body,t)]),us(),new G("mtd",[tr(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var ss={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ls={"\\textbf":"textbf","\\textmd":"textmd"},Z3={"\\textit":"textit","\\textup":"textup"},os=(e,t)=>{var r=e.font;if(r){if(ss[r])return t.withTextFontFamily(ss[r]);if(ls[r])return t.withTextFontWeight(ls[r]);if(r==="\\emph")return t.fontShape==="textit"?t.withTextFontShape("textup"):t.withTextFontShape("textit")}else return t;return t.withTextFontShape(Z3[r])};Z({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"text",mode:r.mode,body:Re(a),font:n}},htmlBuilder(e,t){var r=os(e,t),n=He(e.body,r,!0);return z(["mord","text"],n,r)},mathmlBuilder(e,t){var r=os(e,t);return tr(e.body,r)}});Z({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=Or("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]});return z(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("munder",[Ae(e.body,t),r]);return n.setAttribute("accentunder","true"),n}});Z({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ee({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)],["vcenter"]);return new G("mrow",[r])}});Z({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new Y("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=cs(e),n=[],a=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"␣":" "),Qt=io,zo=`[ \r - ]`,e6="\\\\[a-zA-Z@]+",t6="\\\\[^\uD800-\uDFFF]",r6="("+e6+")"+zo+"*",n6=`\\\\( -|[ \r ]+ -?)[ \r ]*`,ja="[̀-ͯ]",a6=new RegExp(ja+"+$"),i6="("+zo+"+)|"+(n6+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(ja+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(ja+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+r6)+("|"+t6+")");class hs{constructor(t,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=r,this.tokenRegex=new RegExp(i6,"g"),this.catcodes={"%":14,"~":13}}setCatcode(t,r){this.catcodes[t]=r}lex(){var t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new ot("EOF",new rt(this,r,r));var n=this.tokenRegex.exec(t);if(n===null||n.index!==r)throw new Y("Unexpected character: '"+t[r]+"'",new ot(t[r],new rt(this,r,r+1)));var a=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[a]===14){var i=t.indexOf(` -`,this.tokenRegex.lastIndex);return i===-1?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=i+1,this.lex()}return new ot(a,new rt(this,r,this.tokenRegex.lastIndex))}}class u6{constructor(t,r){t===void 0&&(t={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=t,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Y("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var r in t)t.hasOwnProperty(r)&&(t[r]==null?delete this.current[r]:this.current[r]=t[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,r,n){if(n===void 0&&(n=!1),n){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][t]=r)}else{var i=this.undefStack[this.undefStack.length-1];i&&!i.hasOwnProperty(t)&&(i[t]=this.current[t])}r==null?delete this.current[t]:this.current[t]=r}}var s6=Io;E("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});E("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});E("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});E("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});E("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return t[0].length===1&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});E("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");E("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});var ds={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};E("\\char",function(e){var t=e.popToken(),r,n=0;if(t.text==="'")r=8,t=e.popToken();else if(t.text==='"')r=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")n=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new Y("\\char` missing argument");n=t.text.charCodeAt(0)}else r=10;if(r){if(n=ds[t.text],n==null||n>=r)throw new Y("Invalid base-"+r+" digit "+t.text);for(var a;(a=ds[e.future().text])!=null&&a{var a=e.consumeArg().tokens;if(a.length!==1)throw new Y("\\newcommand's first argument must be a macro name");var i=a[0].text,u=e.isDefined(i);if(u&&!t)throw new Y("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!u&&!r)throw new Y("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(a=e.consumeArg().tokens,a.length===1&&a[0].text==="["){for(var l="",c=e.expandNextToken();c.text!=="]"&&c.text!=="EOF";)l+=c.text,c=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new Y("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return u&&n||e.macros.set(i,{tokens:a,numArgs:s}),""};E("\\newcommand",e=>Ci(e,!1,!0,!1));E("\\renewcommand",e=>Ci(e,!0,!1,!1));E("\\providecommand",e=>Ci(e,!0,!0,!0));E("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(r=>r.text).join("")),""});E("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(r=>r.text).join("")),""});E("\\show",e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Qt[r],we.math[r],we.text[r]),""});E("\\bgroup","{");E("\\egroup","}");E("~","\\nobreakspace");E("\\lq","`");E("\\rq","'");E("\\aa","\\r a");E("\\AA","\\r A");E("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");E("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");E("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");E("ℬ","\\mathscr{B}");E("ℰ","\\mathscr{E}");E("ℱ","\\mathscr{F}");E("ℋ","\\mathscr{H}");E("ℐ","\\mathscr{I}");E("ℒ","\\mathscr{L}");E("ℳ","\\mathscr{M}");E("ℛ","\\mathscr{R}");E("ℭ","\\mathfrak{C}");E("ℌ","\\mathfrak{H}");E("ℨ","\\mathfrak{Z}");E("\\Bbbk","\\Bbb{k}");E("\\llap","\\mathllap{\\textrm{#1}}");E("\\rlap","\\mathrlap{\\textrm{#1}}");E("\\clap","\\mathclap{\\textrm{#1}}");E("\\mathstrut","\\vphantom{(}");E("\\underbar","\\underline{\\text{#1}}");E("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');E("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");E("\\ne","\\neq");E("≠","\\neq");E("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");E("∉","\\notin");E("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");E("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");E("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");E("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");E("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");E("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");E("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");E("⟂","\\perp");E("‼","\\mathclose{!\\mkern-0.8mu!}");E("∌","\\notni");E("⌜","\\ulcorner");E("⌝","\\urcorner");E("⌞","\\llcorner");E("⌟","\\lrcorner");E("©","\\copyright");E("®","\\textregistered");E("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');E("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');E("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');E("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');E("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");E("⋮","\\vdots");E("\\varGamma","\\mathit{\\Gamma}");E("\\varDelta","\\mathit{\\Delta}");E("\\varTheta","\\mathit{\\Theta}");E("\\varLambda","\\mathit{\\Lambda}");E("\\varXi","\\mathit{\\Xi}");E("\\varPi","\\mathit{\\Pi}");E("\\varSigma","\\mathit{\\Sigma}");E("\\varUpsilon","\\mathit{\\Upsilon}");E("\\varPhi","\\mathit{\\Phi}");E("\\varPsi","\\mathit{\\Psi}");E("\\varOmega","\\mathit{\\Omega}");E("\\substack","\\begin{subarray}{c}#1\\end{subarray}");E("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");E("\\boxed","\\fbox{$\\displaystyle{#1}$}");E("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");E("\\implies","\\DOTSB\\;\\Longrightarrow\\;");E("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");E("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");E("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var fs={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},l6=new Set(["bin","rel"]);E("\\dots",function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in fs?t=fs[r]:(r.slice(0,4)==="\\not"||r in we.math&&l6.has(we.math[r].group))&&(t="\\dotsb"),t});var _i={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};E("\\dotso",function(e){var t=e.future().text;return t in _i?"\\ldots\\,":"\\ldots"});E("\\dotsc",function(e){var t=e.future().text;return t in _i&&t!==","?"\\ldots\\,":"\\ldots"});E("\\cdots",function(e){var t=e.future().text;return t in _i?"\\@cdots\\,":"\\@cdots"});E("\\dotsb","\\cdots");E("\\dotsm","\\cdots");E("\\dotsi","\\!\\cdots");E("\\dotsx","\\ldots\\,");E("\\DOTSI","\\relax");E("\\DOTSB","\\relax");E("\\DOTSX","\\relax");E("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");E("\\,","\\tmspace+{3mu}{.1667em}");E("\\thinspace","\\,");E("\\>","\\mskip{4mu}");E("\\:","\\tmspace+{4mu}{.2222em}");E("\\medspace","\\:");E("\\;","\\tmspace+{5mu}{.2777em}");E("\\thickspace","\\;");E("\\!","\\tmspace-{3mu}{.1667em}");E("\\negthinspace","\\!");E("\\negmedspace","\\tmspace-{4mu}{.2222em}");E("\\negthickspace","\\tmspace-{5mu}{.277em}");E("\\enspace","\\kern.5em ");E("\\enskip","\\hskip.5em\\relax");E("\\quad","\\hskip1em\\relax");E("\\qquad","\\hskip2em\\relax");E("\\tag","\\@ifstar\\tag@literal\\tag@paren");E("\\tag@paren","\\tag@literal{({#1})}");E("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new Y("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});E("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");E("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");E("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");E("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");E("\\newline","\\\\\\relax");E("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Uo=V(wt["Main-Regular"][84][1]-.7*wt["Main-Regular"][65][1]);E("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");E("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");E("\\hspace","\\@ifstar\\@hspacer\\@hspace");E("\\@hspace","\\hskip #1\\relax");E("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");E("\\ordinarycolon",":");E("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");E("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');E("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');E("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');E("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');E("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');E("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');E("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');E("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');E("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');E("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');E("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');E("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');E("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');E("∷","\\dblcolon");E("∹","\\eqcolon");E("≔","\\coloneqq");E("≕","\\eqqcolon");E("⩴","\\Coloneqq");E("\\ratio","\\vcentcolon");E("\\coloncolon","\\dblcolon");E("\\colonequals","\\coloneqq");E("\\coloncolonequals","\\Coloneqq");E("\\equalscolon","\\eqqcolon");E("\\equalscoloncolon","\\Eqqcolon");E("\\colonminus","\\coloneq");E("\\coloncolonminus","\\Coloneq");E("\\minuscolon","\\eqcolon");E("\\minuscoloncolon","\\Eqcolon");E("\\coloncolonapprox","\\Colonapprox");E("\\coloncolonsim","\\Colonsim");E("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");E("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");E("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");E("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");E("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");E("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");E("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");E("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");E("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");E("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");E("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");E("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");E("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");E("\\nleqq","\\html@mathml{\\@nleqq}{≰}");E("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");E("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");E("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");E("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");E("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");E("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");E("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");E("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");E("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");E("\\imath","\\html@mathml{\\@imath}{ı}");E("\\jmath","\\html@mathml{\\@jmath}{ȷ}");E("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");E("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");E("⟦","\\llbracket");E("⟧","\\rrbracket");E("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");E("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");E("⦃","\\lBrace");E("⦄","\\rBrace");E("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");E("⦵","\\minuso");E("\\darr","\\downarrow");E("\\dArr","\\Downarrow");E("\\Darr","\\Downarrow");E("\\lang","\\langle");E("\\rang","\\rangle");E("\\uarr","\\uparrow");E("\\uArr","\\Uparrow");E("\\Uarr","\\Uparrow");E("\\N","\\mathbb{N}");E("\\R","\\mathbb{R}");E("\\Z","\\mathbb{Z}");E("\\alef","\\aleph");E("\\alefsym","\\aleph");E("\\Alpha","\\mathrm{A}");E("\\Beta","\\mathrm{B}");E("\\bull","\\bullet");E("\\Chi","\\mathrm{X}");E("\\clubs","\\clubsuit");E("\\cnums","\\mathbb{C}");E("\\Complex","\\mathbb{C}");E("\\Dagger","\\ddagger");E("\\diamonds","\\diamondsuit");E("\\empty","\\emptyset");E("\\Epsilon","\\mathrm{E}");E("\\Eta","\\mathrm{H}");E("\\exist","\\exists");E("\\harr","\\leftrightarrow");E("\\hArr","\\Leftrightarrow");E("\\Harr","\\Leftrightarrow");E("\\hearts","\\heartsuit");E("\\image","\\Im");E("\\infin","\\infty");E("\\Iota","\\mathrm{I}");E("\\isin","\\in");E("\\Kappa","\\mathrm{K}");E("\\larr","\\leftarrow");E("\\lArr","\\Leftarrow");E("\\Larr","\\Leftarrow");E("\\lrarr","\\leftrightarrow");E("\\lrArr","\\Leftrightarrow");E("\\Lrarr","\\Leftrightarrow");E("\\Mu","\\mathrm{M}");E("\\natnums","\\mathbb{N}");E("\\Nu","\\mathrm{N}");E("\\Omicron","\\mathrm{O}");E("\\plusmn","\\pm");E("\\rarr","\\rightarrow");E("\\rArr","\\Rightarrow");E("\\Rarr","\\Rightarrow");E("\\real","\\Re");E("\\reals","\\mathbb{R}");E("\\Reals","\\mathbb{R}");E("\\Rho","\\mathrm{P}");E("\\sdot","\\cdot");E("\\sect","\\S");E("\\spades","\\spadesuit");E("\\sub","\\subset");E("\\sube","\\subseteq");E("\\supe","\\supseteq");E("\\Tau","\\mathrm{T}");E("\\thetasym","\\vartheta");E("\\weierp","\\wp");E("\\Zeta","\\mathrm{Z}");E("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");E("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");E("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");E("\\bra","\\mathinner{\\langle{#1}|}");E("\\ket","\\mathinner{|{#1}\\rangle}");E("\\braket","\\mathinner{\\langle{#1}\\rangle}");E("\\Bra","\\left\\langle#1\\right|");E("\\Ket","\\left|#1\\right\\rangle");var qo=e=>t=>{var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,u=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=f=>g=>{e&&(g.macros.set("|",u),a.length&&g.macros.set("\\|",s));var p=f;if(!f&&a.length){var x=g.future();x.text==="|"&&(g.popToken(),p=!0)}return{tokens:p?a:n,numArgs:0}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var c=t.consumeArg().tokens,d=t.expandTokens([...i,...c,...r]);return t.macros.endGroup(),{tokens:d.reverse(),numArgs:0}};E("\\bra@ket",qo(!1));E("\\bra@set",qo(!0));E("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");E("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");E("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");E("\\angln","{\\angl n}");E("\\blue","\\textcolor{##6495ed}{#1}");E("\\orange","\\textcolor{##ffa500}{#1}");E("\\pink","\\textcolor{##ff00af}{#1}");E("\\red","\\textcolor{##df0030}{#1}");E("\\green","\\textcolor{##28ae7b}{#1}");E("\\gray","\\textcolor{gray}{#1}");E("\\purple","\\textcolor{##9d38bd}{#1}");E("\\blueA","\\textcolor{##ccfaff}{#1}");E("\\blueB","\\textcolor{##80f6ff}{#1}");E("\\blueC","\\textcolor{##63d9ea}{#1}");E("\\blueD","\\textcolor{##11accd}{#1}");E("\\blueE","\\textcolor{##0c7f99}{#1}");E("\\tealA","\\textcolor{##94fff5}{#1}");E("\\tealB","\\textcolor{##26edd5}{#1}");E("\\tealC","\\textcolor{##01d1c1}{#1}");E("\\tealD","\\textcolor{##01a995}{#1}");E("\\tealE","\\textcolor{##208170}{#1}");E("\\greenA","\\textcolor{##b6ffb0}{#1}");E("\\greenB","\\textcolor{##8af281}{#1}");E("\\greenC","\\textcolor{##74cf70}{#1}");E("\\greenD","\\textcolor{##1fab54}{#1}");E("\\greenE","\\textcolor{##0d923f}{#1}");E("\\goldA","\\textcolor{##ffd0a9}{#1}");E("\\goldB","\\textcolor{##ffbb71}{#1}");E("\\goldC","\\textcolor{##ff9c39}{#1}");E("\\goldD","\\textcolor{##e07d10}{#1}");E("\\goldE","\\textcolor{##a75a05}{#1}");E("\\redA","\\textcolor{##fca9a9}{#1}");E("\\redB","\\textcolor{##ff8482}{#1}");E("\\redC","\\textcolor{##f9685d}{#1}");E("\\redD","\\textcolor{##e84d39}{#1}");E("\\redE","\\textcolor{##bc2612}{#1}");E("\\maroonA","\\textcolor{##ffbde0}{#1}");E("\\maroonB","\\textcolor{##ff92c6}{#1}");E("\\maroonC","\\textcolor{##ed5fa6}{#1}");E("\\maroonD","\\textcolor{##ca337c}{#1}");E("\\maroonE","\\textcolor{##9e034e}{#1}");E("\\purpleA","\\textcolor{##ddd7ff}{#1}");E("\\purpleB","\\textcolor{##c6b9fc}{#1}");E("\\purpleC","\\textcolor{##aa87ff}{#1}");E("\\purpleD","\\textcolor{##7854ab}{#1}");E("\\purpleE","\\textcolor{##543b78}{#1}");E("\\mintA","\\textcolor{##f5f9e8}{#1}");E("\\mintB","\\textcolor{##edf2df}{#1}");E("\\mintC","\\textcolor{##e0e5cc}{#1}");E("\\grayA","\\textcolor{##f6f7f7}{#1}");E("\\grayB","\\textcolor{##f0f1f2}{#1}");E("\\grayC","\\textcolor{##e3e5e6}{#1}");E("\\grayD","\\textcolor{##d6d8da}{#1}");E("\\grayE","\\textcolor{##babec2}{#1}");E("\\grayF","\\textcolor{##888d93}{#1}");E("\\grayG","\\textcolor{##626569}{#1}");E("\\grayH","\\textcolor{##3b3e40}{#1}");E("\\grayI","\\textcolor{##21242c}{#1}");E("\\kaBlue","\\textcolor{##314453}{#1}");E("\\kaGreen","\\textcolor{##71B307}{#1}");var Yo={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class o6{constructor(t,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new u6(s6,r.macros),this.mode=n,this.stack=[]}feed(t){this.lexer=new hs(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var r,n,a;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:a,end:n}=this.consumeArg(["]"])}else({tokens:a,start:r,end:n}=this.consumeArg());return this.pushToken(new ot("EOF",n.loc)),this.pushTokens(a),new ot("",rt.range(r,n))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var r=[],n=t&&t.length>0;n||this.consumeSpaces();var a=this.future(),i,u=0,s=0;do{if(i=this.popToken(),r.push(i),i.text==="{")++u;else if(i.text==="}"){if(--u,u===-1)throw new Y("Extra }",i)}else if(i.text==="EOF")throw new Y("Unexpected end of input in a macro argument, expected '"+(t&&n?t[s]:"}")+"'",i);if(t&&n)if((u===0||u===1&&t[s]==="{")&&i.text===t[s]){if(++s,s===t.length){r.splice(-s,s);break}}else s=0}while(u!==0||n);return a.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:a,end:i}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new Y("The length of delimiters doesn't match the number of args!");for(var n=r[0],a=0;athis.settings.maxExpand)throw new Y("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var r=this.popToken(),n=r.text,a=r.noexpand?null:this._getExpansion(n);if(a==null||t&&a.unexpandable){if(t&&a==null&&n[0]==="\\"&&!this.isDefined(n))throw new Y("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var i=a.tokens,u=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs){i=i.slice();for(var s=i.length-1;s>=0;--s){var l=i[s];if(l.text==="#"){if(s===0)throw new Y("Incomplete placeholder at end of macro body",l);if(l=i[--s],l.text==="#")i.splice(s+1,1);else if(/^[1-9]$/.test(l.text))i.splice(s,2,...u[+l.text-1]);else throw new Y("Not a valid argument number",l)}}}return this.pushTokens(i),i.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}}expandMacro(t){return this.macros.has(t)?this.expandTokens([new ot(t)]):void 0}expandTokens(t){var r=[],n=this.stack.length;for(this.pushTokens(t);this.stack.length>n;)if(this.expandOnce(!0)===!1){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),r.push(a)}return this.countExpansion(r.length),r}expandMacroAsText(t){var r=this.expandMacro(t);return r&&r.map(n=>n.text).join("")}_getExpansion(t){var r=this.macros.get(t);if(r==null)return r;if(t.length===1){var n=this.lexer.catcodes[t];if(n!=null&&n!==13)return}var a=typeof r=="function"?r(this):r;if(typeof a=="string"){var i=0;if(a.includes("#"))for(var u=a.replace(/##/g,"");u.includes("#"+(i+1));)++i;for(var s=new hs(a,this.settings),l=[],c=s.lex();c.text!=="EOF";)l.push(c),c=s.lex();l.reverse();var d={tokens:l,numArgs:i};return d}return a}isDefined(t){return this.macros.has(t)||Qt.hasOwnProperty(t)||we.math.hasOwnProperty(t)||we.text.hasOwnProperty(t)||Yo.hasOwnProperty(t)}isExpandable(t){var r=this.macros.get(t);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Qt.hasOwnProperty(t)&&!Qt[t].primitive}}var ms=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,jn=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),pa={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ps={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};let Go=class Vo{constructor(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new o6(t,r,this.mode),this.settings=r,this.leftrightDepth=0,this.nextToken=null}expect(t,r){if(r===void 0&&(r=!0),this.fetch().text!==t)throw new Y("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var r=this.nextToken;this.consume(),this.gullet.pushToken(new ot("}")),this.gullet.pushTokens(t);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(t,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var a=this.fetch();if(Vo.endOfExpression.has(a.text)||r&&a.text===r||t&&Qt[a.text]&&Qt[a.text].infix)break;var i=this.parseAtom(r);if(i){if(i.type==="internal")continue}else break;n.push(i)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){for(var r=-1,n,a=0;a=128)this.settings.strict&&($l(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),t)),u={type:"textord",mode:"text",loc:rt.range(t),text:r};else return null;if(this.consume(),i)for(var d=0;dc&&(c=d):d&&(c!==void 0&&c>-1&&l.push(` -`.repeat(c)||" "),c=-1,l.push(d))}return l.join("")}function ec(e,t,r){return e.type==="element"?F6(e,t,r):e.type==="text"?r.whitespace==="normal"?tc(e,r):H6(e):[]}function F6(e,t,r){const n=rc(e,r),a=e.children||[];let i=-1,u=[];if(P6(e))return u;let s,l;for(Xa(e)||ks(e)&&xs(t,e,ks)?l=` -`:M6(e)?(s=2,l=2):Zo(e)&&(s=1,l=1);++i-1&&i<=t.length){let u=0;for(;;){let s=r[u];if(s===void 0){const l=Ss(t,r[u-1]);s=l===-1?t.length+1:l+1,r[u]=s}if(s>i)return{line:u+1,column:i-(u>0?r[u-1]:0)+1,offset:i};u++}}}function a(i){if(i&&typeof i.line=="number"&&typeof i.column=="number"&&!Number.isNaN(i.line)&&!Number.isNaN(i.column)){for(;r.length1?r[i.line-2]:0)+i.column-1;if(u=55296&&e<=57343}function cp(e){return e>=56320&&e<=57343}function hp(e,t){return(e-55296)*1024+9216+t}function sc(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function lc(e){return e>=64976&&e<=65007||op.has(e)}var P;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(P||(P={}));const dp=65536;class fp{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=dp,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,r){const{line:n,col:a,offset:i}=this,u=a+r,s=i+r;return{code:t,startLine:n,endLine:n,startCol:u,endCol:u,startOffset:s,endOffset:s}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){const r=this.html.charCodeAt(this.pos+1);if(cp(r))return this.pos++,this._addGap(),hp(t,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,T.EOF;return this._err(P.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,r){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,r){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(t,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;const n=this.html.charCodeAt(r);return n===T.CARRIAGE_RETURN?T.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;let t=this.html.charCodeAt(this.pos);return t===T.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,T.LINE_FEED):t===T.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,uc(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===T.LINE_FEED||t===T.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){sc(t)?this._err(P.controlCharacterInInputStream):lc(t)&&this._err(P.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}const mp=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),pp=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function gp(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=pp.get(e))!==null&&t!==void 0?t:e}var qe;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(qe||(qe={}));const bp=32;var Kt;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(Kt||(Kt={}));function $a(e){return e>=qe.ZERO&&e<=qe.NINE}function Ep(e){return e>=qe.UPPER_A&&e<=qe.UPPER_F||e>=qe.LOWER_A&&e<=qe.LOWER_F}function Tp(e){return e>=qe.UPPER_A&&e<=qe.UPPER_Z||e>=qe.LOWER_A&&e<=qe.LOWER_Z||$a(e)}function xp(e){return e===qe.EQUALS||Tp(e)}var Ue;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(Ue||(Ue={}));var Ft;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Ft||(Ft={}));class yp{constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n,this.state=Ue.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Ft.Strict}startEntity(t){this.decodeMode=t,this.state=Ue.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,r){switch(this.state){case Ue.EntityStart:return t.charCodeAt(r)===qe.NUM?(this.state=Ue.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=Ue.NamedEntity,this.stateNamedEntity(t,r));case Ue.NumericStart:return this.stateNumericStart(t,r);case Ue.NumericDecimal:return this.stateNumericDecimal(t,r);case Ue.NumericHex:return this.stateNumericHex(t,r);case Ue.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|bp)===qe.LOWER_X?(this.state=Ue.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=Ue.NumericDecimal,this.stateNumericDecimal(t,r))}addToNumericResult(t,r,n,a){if(r!==n){const i=n-r;this.result=this.result*Math.pow(a,i)+Number.parseInt(t.substr(r,i),a),this.consumed+=i}}stateNumericHex(t,r){const n=r;for(;r>14;for(;r>14,i!==0){if(u===qe.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Ft.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;const{result:r,decodeTree:n}=this,a=(n[r]&Kt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,a,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){const{decodeTree:a}=this;return this.emitCodePoint(r===1?a[t]&~Kt.VALUE_LENGTH:a[t+1],n),r===3&&this.emitCodePoint(a[t+2],n),n}end(){var t;switch(this.state){case Ue.NamedEntity:return this.result!==0&&(this.decodeMode!==Ft.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ue.NumericDecimal:return this.emitNumericEntity(0,2);case Ue.NumericHex:return this.emitNumericEntity(0,3);case Ue.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ue.EntityStart:return 0}}}function vp(e,t,r,n){const a=(t&Kt.BRANCH_LENGTH)>>7,i=t&Kt.JUMP_TABLE;if(a===0)return i!==0&&n===i?r:-1;if(i){const l=n-i;return l<0||l>=a?-1:e[r+l]-1}let u=r,s=u+a-1;for(;u<=s;){const l=u+s>>>1,c=e[l];if(cn)s=l-1;else return e[l+a]}return-1}var H;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(H||(H={}));var mr;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(mr||(mr={}));var pt;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})(pt||(pt={}));var O;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(O||(O={}));var o;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(o||(o={}));const Ap=new Map([[O.A,o.A],[O.ADDRESS,o.ADDRESS],[O.ANNOTATION_XML,o.ANNOTATION_XML],[O.APPLET,o.APPLET],[O.AREA,o.AREA],[O.ARTICLE,o.ARTICLE],[O.ASIDE,o.ASIDE],[O.B,o.B],[O.BASE,o.BASE],[O.BASEFONT,o.BASEFONT],[O.BGSOUND,o.BGSOUND],[O.BIG,o.BIG],[O.BLOCKQUOTE,o.BLOCKQUOTE],[O.BODY,o.BODY],[O.BR,o.BR],[O.BUTTON,o.BUTTON],[O.CAPTION,o.CAPTION],[O.CENTER,o.CENTER],[O.CODE,o.CODE],[O.COL,o.COL],[O.COLGROUP,o.COLGROUP],[O.DD,o.DD],[O.DESC,o.DESC],[O.DETAILS,o.DETAILS],[O.DIALOG,o.DIALOG],[O.DIR,o.DIR],[O.DIV,o.DIV],[O.DL,o.DL],[O.DT,o.DT],[O.EM,o.EM],[O.EMBED,o.EMBED],[O.FIELDSET,o.FIELDSET],[O.FIGCAPTION,o.FIGCAPTION],[O.FIGURE,o.FIGURE],[O.FONT,o.FONT],[O.FOOTER,o.FOOTER],[O.FOREIGN_OBJECT,o.FOREIGN_OBJECT],[O.FORM,o.FORM],[O.FRAME,o.FRAME],[O.FRAMESET,o.FRAMESET],[O.H1,o.H1],[O.H2,o.H2],[O.H3,o.H3],[O.H4,o.H4],[O.H5,o.H5],[O.H6,o.H6],[O.HEAD,o.HEAD],[O.HEADER,o.HEADER],[O.HGROUP,o.HGROUP],[O.HR,o.HR],[O.HTML,o.HTML],[O.I,o.I],[O.IMG,o.IMG],[O.IMAGE,o.IMAGE],[O.INPUT,o.INPUT],[O.IFRAME,o.IFRAME],[O.KEYGEN,o.KEYGEN],[O.LABEL,o.LABEL],[O.LI,o.LI],[O.LINK,o.LINK],[O.LISTING,o.LISTING],[O.MAIN,o.MAIN],[O.MALIGNMARK,o.MALIGNMARK],[O.MARQUEE,o.MARQUEE],[O.MATH,o.MATH],[O.MENU,o.MENU],[O.META,o.META],[O.MGLYPH,o.MGLYPH],[O.MI,o.MI],[O.MO,o.MO],[O.MN,o.MN],[O.MS,o.MS],[O.MTEXT,o.MTEXT],[O.NAV,o.NAV],[O.NOBR,o.NOBR],[O.NOFRAMES,o.NOFRAMES],[O.NOEMBED,o.NOEMBED],[O.NOSCRIPT,o.NOSCRIPT],[O.OBJECT,o.OBJECT],[O.OL,o.OL],[O.OPTGROUP,o.OPTGROUP],[O.OPTION,o.OPTION],[O.P,o.P],[O.PARAM,o.PARAM],[O.PLAINTEXT,o.PLAINTEXT],[O.PRE,o.PRE],[O.RB,o.RB],[O.RP,o.RP],[O.RT,o.RT],[O.RTC,o.RTC],[O.RUBY,o.RUBY],[O.S,o.S],[O.SCRIPT,o.SCRIPT],[O.SEARCH,o.SEARCH],[O.SECTION,o.SECTION],[O.SELECT,o.SELECT],[O.SOURCE,o.SOURCE],[O.SMALL,o.SMALL],[O.SPAN,o.SPAN],[O.STRIKE,o.STRIKE],[O.STRONG,o.STRONG],[O.STYLE,o.STYLE],[O.SUB,o.SUB],[O.SUMMARY,o.SUMMARY],[O.SUP,o.SUP],[O.TABLE,o.TABLE],[O.TBODY,o.TBODY],[O.TEMPLATE,o.TEMPLATE],[O.TEXTAREA,o.TEXTAREA],[O.TFOOT,o.TFOOT],[O.TD,o.TD],[O.TH,o.TH],[O.THEAD,o.THEAD],[O.TITLE,o.TITLE],[O.TR,o.TR],[O.TRACK,o.TRACK],[O.TT,o.TT],[O.U,o.U],[O.UL,o.UL],[O.SVG,o.SVG],[O.VAR,o.VAR],[O.WBR,o.WBR],[O.XMP,o.XMP]]);function qr(e){var t;return(t=Ap.get(e))!==null&&t!==void 0?t:o.UNKNOWN}const U=o,kp={[H.HTML]:new Set([U.ADDRESS,U.APPLET,U.AREA,U.ARTICLE,U.ASIDE,U.BASE,U.BASEFONT,U.BGSOUND,U.BLOCKQUOTE,U.BODY,U.BR,U.BUTTON,U.CAPTION,U.CENTER,U.COL,U.COLGROUP,U.DD,U.DETAILS,U.DIR,U.DIV,U.DL,U.DT,U.EMBED,U.FIELDSET,U.FIGCAPTION,U.FIGURE,U.FOOTER,U.FORM,U.FRAME,U.FRAMESET,U.H1,U.H2,U.H3,U.H4,U.H5,U.H6,U.HEAD,U.HEADER,U.HGROUP,U.HR,U.HTML,U.IFRAME,U.IMG,U.INPUT,U.LI,U.LINK,U.LISTING,U.MAIN,U.MARQUEE,U.MENU,U.META,U.NAV,U.NOEMBED,U.NOFRAMES,U.NOSCRIPT,U.OBJECT,U.OL,U.P,U.PARAM,U.PLAINTEXT,U.PRE,U.SCRIPT,U.SECTION,U.SELECT,U.SOURCE,U.STYLE,U.SUMMARY,U.TABLE,U.TBODY,U.TD,U.TEMPLATE,U.TEXTAREA,U.TFOOT,U.TH,U.THEAD,U.TITLE,U.TR,U.TRACK,U.UL,U.WBR,U.XMP]),[H.MATHML]:new Set([U.MI,U.MO,U.MN,U.MS,U.MTEXT,U.ANNOTATION_XML]),[H.SVG]:new Set([U.TITLE,U.FOREIGN_OBJECT,U.DESC]),[H.XLINK]:new Set,[H.XML]:new Set,[H.XMLNS]:new Set},Qa=new Set([U.H1,U.H2,U.H3,U.H4,U.H5,U.H6]);O.STYLE,O.SCRIPT,O.XMP,O.IFRAME,O.NOEMBED,O.NOFRAMES,O.PLAINTEXT;var y;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(y||(y={}));const De={DATA:y.DATA,RCDATA:y.RCDATA,RAWTEXT:y.RAWTEXT,SCRIPT_DATA:y.SCRIPT_DATA,PLAINTEXT:y.PLAINTEXT,CDATA_SECTION:y.CDATA_SECTION};function Sp(e){return e>=T.DIGIT_0&&e<=T.DIGIT_9}function rn(e){return e>=T.LATIN_CAPITAL_A&&e<=T.LATIN_CAPITAL_Z}function wp(e){return e>=T.LATIN_SMALL_A&&e<=T.LATIN_SMALL_Z}function Xt(e){return wp(e)||rn(e)}function Cs(e){return Xt(e)||Sp(e)}function Wn(e){return e+32}function cc(e){return e===T.SPACE||e===T.LINE_FEED||e===T.TABULATION||e===T.FORM_FEED}function _s(e){return cc(e)||e===T.SOLIDUS||e===T.GREATER_THAN_SIGN}function Cp(e){return e===T.NULL?P.nullCharacterReference:e>1114111?P.characterReferenceOutsideUnicodeRange:uc(e)?P.surrogateCharacterReference:lc(e)?P.noncharacterCharacterReference:sc(e)||e===T.CARRIAGE_RETURN?P.controlCharacterReference:null}class _p{constructor(t,r){this.options=t,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=y.DATA,this.returnState=y.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new fp(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new yp(mp,(n,a)=>{this.preprocessor.pos=this.entityStartPos+a-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(P.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(P.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{const a=Cp(n);a&&this._err(a,1)}}:void 0)}_err(t,r=0){var n,a;(a=(n=this.handler).onParseError)===null||a===void 0||a.call(n,this.preprocessor.getError(t,r))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.())}write(t,r,n){this.active=!0,this.preprocessor.write(t,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let r=0;r0&&this._err(P.endTagWithAttributes),t.selfClosing&&this._err(P.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case de.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case de.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case de.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){const t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:de.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,r)}_emitCodePoint(t){const r=cc(t)?de.WHITESPACE_CHARACTER:t===T.NULL?de.NULL_CHARACTER:de.CHARACTER;this._appendCharToCurrentCharacterToken(r,String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(de.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=y.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Ft.Attribute:Ft.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===y.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case y.DATA:{this._stateData(t);break}case y.RCDATA:{this._stateRcdata(t);break}case y.RAWTEXT:{this._stateRawtext(t);break}case y.SCRIPT_DATA:{this._stateScriptData(t);break}case y.PLAINTEXT:{this._statePlaintext(t);break}case y.TAG_OPEN:{this._stateTagOpen(t);break}case y.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case y.TAG_NAME:{this._stateTagName(t);break}case y.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case y.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case y.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case y.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case y.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case y.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case y.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case y.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case y.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case y.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case y.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case y.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case y.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case y.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case y.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case y.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case y.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case y.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case y.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case y.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case y.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case y.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case y.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case y.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case y.BOGUS_COMMENT:{this._stateBogusComment(t);break}case y.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case y.COMMENT_START:{this._stateCommentStart(t);break}case y.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case y.COMMENT:{this._stateComment(t);break}case y.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case y.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case y.COMMENT_END:{this._stateCommentEnd(t);break}case y.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case y.DOCTYPE:{this._stateDoctype(t);break}case y.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case y.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case y.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case y.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case y.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case y.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case y.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case y.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case y.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case y.CDATA_SECTION:{this._stateCdataSection(t);break}case y.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case y.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case y.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case y.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.TAG_OPEN;break}case T.AMPERSAND:{this._startCharacterReference();break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitCodePoint(t);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case T.AMPERSAND:{this._startCharacterReference();break}case T.LESS_THAN_SIGN:{this.state=y.RCDATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.RAWTEXT_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.SCRIPT_DATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(Xt(t))this._createStartTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.EXCLAMATION_MARK:{this.state=y.MARKUP_DECLARATION_OPEN;break}case T.SOLIDUS:{this.state=y.END_TAG_OPEN;break}case T.QUESTION_MARK:{this._err(P.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=y.BOGUS_COMMENT,this._stateBogusComment(t);break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(P.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=y.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(Xt(t))this._createEndTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.GREATER_THAN_SIGN:{this._err(P.missingEndTagName),this.state=y.DATA;break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===T.SOLIDUS?this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Xt(t)?(this._emitChars("<"),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=y.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){Xt(t)?(this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===T.SOLIDUS?(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(et.SCRIPT,!1)&&_s(this.preprocessor.peek(et.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,r){const n=this._indexOf(t);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(t,r,n){const a=this._indexOf(t)+1;this.items.splice(a,0,r),this.tagIDs.splice(a,0,n),this.stackTop++,a===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,a===this.stackTop)}popUntilTagNamePopped(t){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(t,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==H.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(t){for(;this.stackTop>=t;){const r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(t,r){const n=this._indexOfTagNames(t,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(Lp,H.HTML)}clearBackToTableBodyContext(){this.clearBackTo(Op,H.HTML)}clearBackToTableRowContext(){this.clearBackTo(Dp,H.HTML)}remove(t){const r=this._indexOf(t);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===o.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){const r=this._indexOf(t)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===o.HTML}hasInDynamicScope(t,r){for(let n=this.stackTop;n>=0;n--){const a=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case H.HTML:{if(a===t)return!0;if(r.has(a))return!1;break}case H.SVG:{if(Ds.has(a))return!1;break}case H.MATHML:{if(Ns.has(a))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,s0)}hasInListItemScope(t){return this.hasInDynamicScope(t,Ip)}hasInButtonScope(t){return this.hasInDynamicScope(t,Np)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case H.HTML:{if(Qa.has(r))return!0;if(s0.has(r))return!1;break}case H.SVG:{if(Ds.has(r))return!1;break}case H.MATHML:{if(Ns.has(r))return!1;break}}}return!0}hasInTableScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===H.HTML)switch(this.tagIDs[t]){case o.TBODY:case o.THEAD:case o.TFOOT:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasInSelectScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.OPTION:case o.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&hc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Is.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Is.has(this.currentTagId);)this.pop()}}const ga=3;var St;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(St||(St={}));const Os={type:St.Marker};class Pp{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,r){const n=[],a=r.length,i=this.treeAdapter.getTagName(t),u=this.treeAdapter.getNamespaceURI(t);for(let s=0;s[u.name,u.value]));let i=0;for(let u=0;ua.get(l.name)===l.value)&&(i+=1,i>=ga&&this.entries.splice(s.idx,1))}}insertMarker(){this.entries.unshift(Os)}pushElement(t,r){this._ensureNoahArkCondition(t),this.entries.unshift({type:St.Element,element:t,token:r})}insertElementAfterBookmark(t,r){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:St.Element,element:t,token:r})}removeEntry(t){const r=this.entries.indexOf(t);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){const t=this.entries.indexOf(Os);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){const r=this.entries.find(n=>n.type===St.Marker||this.treeAdapter.getTagName(n.element)===t);return r&&r.type===St.Element?r:null}getElementEntry(t){return this.entries.find(r=>r.type===St.Element&&r.element===t)}}const $t={createDocument(){return{nodeName:"#document",mode:pt.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){const n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,r,n){const a=e.childNodes.find(i=>i.nodeName==="#documentType");if(a)a.name=t,a.publicId=r,a.systemId=n;else{const i={nodeName:"#documentType",name:t,publicId:r,systemId:n,parentNode:null};$t.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const r=e.childNodes[e.childNodes.length-1];if($t.isTextNode(r)){r.value+=t;return}}$t.appendChild(e,$t.createTextNode(t))},insertTextBefore(e,t,r){const n=e.childNodes[e.childNodes.indexOf(r)-1];n&&$t.isTextNode(n)?n.value+=t:$t.insertBefore(e,$t.createTextNode(t),r)},adoptAttributes(e,t){const r=new Set(e.attrs.map(n=>n.name));for(let n=0;ne.startsWith(r))}function qp(e){return e.name===dc&&e.publicId===null&&(e.systemId===null||e.systemId===Bp)}function Yp(e){if(e.name!==dc)return pt.QUIRKS;const{systemId:t}=e;if(t&&t.toLowerCase()===Fp)return pt.QUIRKS;let{publicId:r}=e;if(r!==null){if(r=r.toLowerCase(),zp.has(r))return pt.QUIRKS;let n=t===null?Hp:fc;if(Ls(r,n))return pt.QUIRKS;if(n=t===null?mc:Up,Ls(r,n))return pt.LIMITED_QUIRKS}return pt.NO_QUIRKS}const Rs={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},Gp="definitionurl",Vp="definitionURL",jp=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),Wp=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:H.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:H.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:H.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:H.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:H.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:H.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:H.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:H.XML}],["xml:space",{prefix:"xml",name:"space",namespace:H.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:H.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:H.XMLNS}]]),Xp=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),$p=new Set([o.B,o.BIG,o.BLOCKQUOTE,o.BODY,o.BR,o.CENTER,o.CODE,o.DD,o.DIV,o.DL,o.DT,o.EM,o.EMBED,o.H1,o.H2,o.H3,o.H4,o.H5,o.H6,o.HEAD,o.HR,o.I,o.IMG,o.LI,o.LISTING,o.MENU,o.META,o.NOBR,o.OL,o.P,o.PRE,o.RUBY,o.S,o.SMALL,o.SPAN,o.STRONG,o.STRIKE,o.SUB,o.SUP,o.TABLE,o.TT,o.U,o.UL,o.VAR]);function Qp(e){const t=e.tagID;return t===o.FONT&&e.attrs.some(({name:n})=>n===mr.COLOR||n===mr.SIZE||n===mr.FACE)||$p.has(t)}function pc(e){for(let t=0;t0&&this._setContextModes(t,r)}onItemPop(t,r){var n,a;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(a=(n=this.treeAdapter).onItemPop)===null||a===void 0||a.call(n,t,this.openElements.current),r){let i,u;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,u=this.fragmentContextID):{current:i,currentTagId:u}=this.openElements,this._setContextModes(i,u)}}_setContextModes(t,r){const n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===H.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,t)}_switchToTextParsing(t,r){this._insertElement(t,H.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=k.TEXT}switchToPlaintextParsing(){this.insertionMode=k.TEXT,this.originalInsertionMode=k.IN_BODY,this.tokenizer.state=De.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===O.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==H.HTML))switch(this.fragmentContextID){case o.TITLE:case o.TEXTAREA:{this.tokenizer.state=De.RCDATA;break}case o.STYLE:case o.XMP:case o.IFRAME:case o.NOEMBED:case o.NOFRAMES:case o.NOSCRIPT:{this.tokenizer.state=De.RAWTEXT;break}case o.SCRIPT:{this.tokenizer.state=De.SCRIPT_DATA;break}case o.PLAINTEXT:{this.tokenizer.state=De.PLAINTEXT;break}}}_setDocumentType(t){const r=t.name||"",n=t.publicId||"",a=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,a),t.location){const u=this.treeAdapter.getChildNodes(this.document).find(s=>this.treeAdapter.isDocumentTypeNode(s));u&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}}_attachElementToTree(t,r){if(this.options.sourceCodeLocationInfo){const n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(t,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t)}}_appendElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location)}_insertElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID)}_insertFakeElement(t,r){const n=this.treeAdapter.createElement(t,H.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(t){const r=this.treeAdapter.createElement(t.tagName,H.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,t.location),this.openElements.push(r,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const t=this.treeAdapter.createElement(O.HTML,H.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,o.HTML)}_appendCommentNode(t,r){const n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location)}_insertCharacters(t){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,t.chars,n):this.treeAdapter.insertText(r,t.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,t.chars)),!t.location)return;const a=this.treeAdapter.getChildNodes(r),i=n?a.lastIndexOf(n):a.length,u=a[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(u)){const{endLine:l,endCol:c,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(u,{endLine:l,endCol:c,endOffset:d})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}_adoptNodes(t,r){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(t,r){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&r.location){const n=r.location,a=this.treeAdapter.getTagName(t),i=r.type===de.END_TAG&&a===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,t.tagID===o.SVG&&this.treeAdapter.getTagName(r)===O.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===H.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===o.MGLYPH||t.tagID===o.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,H.HTML)}_processToken(t){switch(t.type){case de.CHARACTER:{this.onCharacter(t);break}case de.NULL_CHARACTER:{this.onNullCharacter(t);break}case de.COMMENT:{this.onComment(t);break}case de.DOCTYPE:{this.onDoctype(t);break}case de.START_TAG:{this._processStartTag(t);break}case de.END_TAG:{this.onEndTag(t);break}case de.EOF:{this.onEof(t);break}case de.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,r,n){const a=this.treeAdapter.getNamespaceURI(r),i=this.treeAdapter.getAttrList(r);return e5(t,a,i,n)}_reconstructActiveFormattingElements(){const t=this.activeFormattingElements.entries.length;if(t){const r=this.activeFormattingElements.entries.findIndex(a=>a.type===St.Marker||this.openElements.contains(a.element)),n=r===-1?t-1:r-1;for(let a=n;a>=0;a--){const i=this.activeFormattingElements.entries[a];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=k.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(o.P),this.openElements.popUntilTagNamePopped(o.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case o.TR:{this.insertionMode=k.IN_ROW;return}case o.TBODY:case o.THEAD:case o.TFOOT:{this.insertionMode=k.IN_TABLE_BODY;return}case o.CAPTION:{this.insertionMode=k.IN_CAPTION;return}case o.COLGROUP:{this.insertionMode=k.IN_COLUMN_GROUP;return}case o.TABLE:{this.insertionMode=k.IN_TABLE;return}case o.BODY:{this.insertionMode=k.IN_BODY;return}case o.FRAMESET:{this.insertionMode=k.IN_FRAMESET;return}case o.SELECT:{this._resetInsertionModeForSelect(t);return}case o.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case o.HTML:{this.insertionMode=this.headElement?k.AFTER_HEAD:k.BEFORE_HEAD;return}case o.TD:case o.TH:{if(t>0){this.insertionMode=k.IN_CELL;return}break}case o.HEAD:{if(t>0){this.insertionMode=k.IN_HEAD;return}break}}this.insertionMode=k.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let r=t-1;r>0;r--){const n=this.openElements.tagIDs[r];if(n===o.TEMPLATE)break;if(n===o.TABLE){this.insertionMode=k.IN_SELECT_IN_TABLE;return}}this.insertionMode=k.IN_SELECT}_isElementCausesFosterParenting(t){return bc.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){const r=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case o.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===H.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case o.TABLE:{const n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){const r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,t,r.beforeElement):this.treeAdapter.appendChild(r.parent,t)}_isSpecialElement(t,r){const n=this.treeAdapter.getNamespaceURI(t);return kp[n].has(r)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){R7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:{Tc(this,t);break}case k.TEXT:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{Sc(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){L7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.TEXT:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){Ka(this,t);return}switch(this.insertionMode){case k.INITIAL:case k.BEFORE_HTML:case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_TEMPLATE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{Ka(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.AFTER_BODY:{h5(this,t);break}case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{d5(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case k.INITIAL:{f5(this,t);break}case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:{this._err(t,P.misplacedDoctype);break}case k.IN_TABLE_TEXT:{en(this,t);break}}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,P.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?M7(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{m5(this,t);break}case k.BEFORE_HEAD:{g5(this,t);break}case k.IN_HEAD:{yt(this,t);break}case k.IN_HEAD_NO_SCRIPT:{T5(this,t);break}case k.AFTER_HEAD:{y5(this,t);break}case k.IN_BODY:{We(this,t);break}case k.IN_TABLE:{Rr(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{b7(this,t);break}case k.IN_COLUMN_GROUP:{Bi(this,t);break}case k.IN_TABLE_BODY:{O0(this,t);break}case k.IN_ROW:{L0(this,t);break}case k.IN_CELL:{x7(this,t);break}case k.IN_SELECT:{_c(this,t);break}case k.IN_SELECT_IN_TABLE:{v7(this,t);break}case k.IN_TEMPLATE:{k7(this,t);break}case k.AFTER_BODY:{w7(this,t);break}case k.IN_FRAMESET:{C7(this,t);break}case k.AFTER_FRAMESET:{I7(this,t);break}case k.AFTER_AFTER_BODY:{D7(this,t);break}case k.AFTER_AFTER_FRAMESET:{O7(this,t);break}}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?P7(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{p5(this,t);break}case k.BEFORE_HEAD:{b5(this,t);break}case k.IN_HEAD:{E5(this,t);break}case k.IN_HEAD_NO_SCRIPT:{x5(this,t);break}case k.AFTER_HEAD:{v5(this,t);break}case k.IN_BODY:{D0(this,t);break}case k.TEXT:{s7(this,t);break}case k.IN_TABLE:{En(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{E7(this,t);break}case k.IN_COLUMN_GROUP:{T7(this,t);break}case k.IN_TABLE_BODY:{Ja(this,t);break}case k.IN_ROW:{Cc(this,t);break}case k.IN_CELL:{y7(this,t);break}case k.IN_SELECT:{Ic(this,t);break}case k.IN_SELECT_IN_TABLE:{A7(this,t);break}case k.IN_TEMPLATE:{S7(this,t);break}case k.AFTER_BODY:{Dc(this,t);break}case k.IN_FRAMESET:{_7(this,t);break}case k.AFTER_FRAMESET:{N7(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onEof(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{Ac(this,t);break}case k.TEXT:{l7(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_TEMPLATE:{Nc(this,t);break}case k.AFTER_BODY:case k.IN_FRAMESET:case k.AFTER_FRAMESET:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Pi(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===T.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.TEXT:case k.IN_COLUMN_GROUP:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{this._insertCharacters(t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:case k.AFTER_BODY:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Ec(this,t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{kc(this,t);break}}}}function i5(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):vc(e,t),r}function u5(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){const a=e.openElements.items[n];if(a===t.element)break;e._isSpecialElement(a,e.openElements.tagIDs[n])&&(r=a)}return r||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),r}function s5(e,t,r){let n=t,a=e.openElements.getCommonAncestor(t);for(let i=0,u=a;u!==r;i++,u=a){a=e.openElements.getCommonAncestor(u);const s=e.activeFormattingElements.getElementEntry(u),l=s&&i>=n5;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(u)):(u=l5(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(u,n),n=u)}return n}function l5(e,t){const r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function o5(e,t,r){const n=e.treeAdapter.getTagName(t),a=qr(n);if(e._isElementCausesFosterParenting(a))e._fosterParentElement(r);else{const i=e.treeAdapter.getNamespaceURI(t);a===o.TEMPLATE&&i===H.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function c5(e,t,r){const n=e.treeAdapter.getNamespaceURI(r.element),{token:a}=r,i=e.treeAdapter.createElement(a.tagName,n,a.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,a),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,i,a.tagID)}function Mi(e,t){for(let r=0;r=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],a=e.treeAdapter.getNodeSourceCodeLocation(n);if(a&&!a.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const i=e.openElements.items[1],u=e.treeAdapter.getNodeSourceCodeLocation(i);u&&!u.endTag&&e._setEndLocation(i,t)}}}}function f5(e,t){e._setDocumentType(t);const r=t.forceQuirks?pt.QUIRKS:Yp(t);qp(t)||e._err(t,P.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=k.BEFORE_HTML}function Zr(e,t){e._err(t,P.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,pt.QUIRKS),e.insertionMode=k.BEFORE_HTML,e._processToken(t)}function m5(e,t){t.tagID===o.HTML?(e._insertElement(t,H.HTML),e.insertionMode=k.BEFORE_HEAD):ln(e,t)}function p5(e,t){const r=t.tagID;(r===o.HTML||r===o.HEAD||r===o.BODY||r===o.BR)&&ln(e,t)}function ln(e,t){e._insertFakeRootElement(),e.insertionMode=k.BEFORE_HEAD,e._processToken(t)}function g5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.HEAD:{e._insertElement(t,H.HTML),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD;break}default:on(e,t)}}function b5(e,t){const r=t.tagID;r===o.HEAD||r===o.BODY||r===o.HTML||r===o.BR?on(e,t):e._err(t,P.endTagWithoutMatchingOpenElement)}function on(e,t){e._insertFakeElement(O.HEAD,o.HEAD),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD,e._processToken(t)}function yt(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.TITLE:{e._switchToTextParsing(t,De.RCDATA);break}case o.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,De.RAWTEXT):(e._insertElement(t,H.HTML),e.insertionMode=k.IN_HEAD_NO_SCRIPT);break}case o.NOFRAMES:case o.STYLE:{e._switchToTextParsing(t,De.RAWTEXT);break}case o.SCRIPT:{e._switchToTextParsing(t,De.SCRIPT_DATA);break}case o.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=k.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(k.IN_TEMPLATE);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:cn(e,t)}}function E5(e,t){switch(t.tagID){case o.HEAD:{e.openElements.pop(),e.insertionMode=k.AFTER_HEAD;break}case o.BODY:case o.BR:case o.HTML:{cn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function Tr(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==o.TEMPLATE&&e._err(t,P.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,P.endTagWithoutMatchingOpenElement)}function cn(e,t){e.openElements.pop(),e.insertionMode=k.AFTER_HEAD,e._processToken(t)}function T5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASEFONT:case o.BGSOUND:case o.HEAD:case o.LINK:case o.META:case o.NOFRAMES:case o.STYLE:{yt(e,t);break}case o.NOSCRIPT:{e._err(t,P.nestedNoscriptInHead);break}default:hn(e,t)}}function x5(e,t){switch(t.tagID){case o.NOSCRIPT:{e.openElements.pop(),e.insertionMode=k.IN_HEAD;break}case o.BR:{hn(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function hn(e,t){const r=t.type===de.EOF?P.openElementsLeftAfterEof:P.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=k.IN_HEAD,e._processToken(t)}function y5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BODY:{e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_BODY;break}case o.FRAMESET:{e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET;break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{e._err(t,P.abandonedHeadElementChild),e.openElements.push(e.headElement,o.HEAD),yt(e,t),e.openElements.remove(e.headElement);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:dn(e,t)}}function v5(e,t){switch(t.tagID){case o.BODY:case o.HTML:case o.BR:{dn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function dn(e,t){e._insertFakeElement(O.BODY,o.BODY),e.insertionMode=k.IN_BODY,N0(e,t)}function N0(e,t){switch(t.type){case de.CHARACTER:{Tc(e,t);break}case de.WHITESPACE_CHARACTER:{Ec(e,t);break}case de.COMMENT:{Ka(e,t);break}case de.START_TAG:{We(e,t);break}case de.END_TAG:{D0(e,t);break}case de.EOF:{Ac(e,t);break}}}function Ec(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function Tc(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function A5(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function k5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}function S5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET)}function w5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function C5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&Qa.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,H.HTML)}function _5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function I5(e,t){const r=e.openElements.tmplCount>0;(!e.formElement||r)&&(e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),r||(e.formElement=e.openElements.current))}function N5(e,t){e.framesetOk=!1;const r=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){const a=e.openElements.tagIDs[n];if(r===o.LI&&a===o.LI||(r===o.DD||r===o.DT)&&(a===o.DD||a===o.DT)){e.openElements.generateImpliedEndTagsWithExclusion(a),e.openElements.popUntilTagNamePopped(a);break}if(a!==o.ADDRESS&&a!==o.DIV&&a!==o.P&&e._isSpecialElement(e.openElements.items[n],a))break}e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function D5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.tokenizer.state=De.PLAINTEXT}function O5(e,t){e.openElements.hasInScope(o.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1}function L5(e,t){const r=e.activeFormattingElements.getElementEntryInScopeWithTagName(O.A);r&&(Mi(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function R5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function M5(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(o.NOBR)&&(Mi(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function P5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function B5(e,t){e.treeAdapter.getDocumentMode(e.document)!==pt.QUIRKS&&e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_TABLE}function xc(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function yc(e){const t=oc(e,mr.TYPE);return t!=null&&t.toLowerCase()===t5}function F5(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),yc(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function H5(e,t){e._appendElement(t,H.HTML),t.ackSelfClosing=!0}function z5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function U5(e,t){t.tagName=O.IMG,t.tagID=o.IMG,xc(e,t)}function q5(e,t){e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.tokenizer.state=De.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=k.TEXT}function Y5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function G5(e,t){e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function Bs(e,t){e._switchToTextParsing(t,De.RAWTEXT)}function V5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===k.IN_TABLE||e.insertionMode===k.IN_CAPTION||e.insertionMode===k.IN_TABLE_BODY||e.insertionMode===k.IN_ROW||e.insertionMode===k.IN_CELL?k.IN_SELECT_IN_TABLE:k.IN_SELECT}function j5(e,t){e.openElements.currentTagId===o.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function W5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,H.HTML)}function X5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(o.RTC),e._insertElement(t,H.HTML)}function $5(e,t){e._reconstructActiveFormattingElements(),pc(t),Ri(t),t.selfClosing?e._appendElement(t,H.MATHML):e._insertElement(t,H.MATHML),t.ackSelfClosing=!0}function Q5(e,t){e._reconstructActiveFormattingElements(),gc(t),Ri(t),t.selfClosing?e._appendElement(t,H.SVG):e._insertElement(t,H.SVG),t.ackSelfClosing=!0}function Fs(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function We(e,t){switch(t.tagID){case o.I:case o.S:case o.B:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.SMALL:case o.STRIKE:case o.STRONG:{R5(e,t);break}case o.A:{L5(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{C5(e,t);break}case o.P:case o.DL:case o.OL:case o.UL:case o.DIV:case o.DIR:case o.NAV:case o.MAIN:case o.MENU:case o.ASIDE:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.DETAILS:case o.ADDRESS:case o.ARTICLE:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{w5(e,t);break}case o.LI:case o.DD:case o.DT:{N5(e,t);break}case o.BR:case o.IMG:case o.WBR:case o.AREA:case o.EMBED:case o.KEYGEN:{xc(e,t);break}case o.HR:{z5(e,t);break}case o.RB:case o.RTC:{W5(e,t);break}case o.RT:case o.RP:{X5(e,t);break}case o.PRE:case o.LISTING:{_5(e,t);break}case o.XMP:{Y5(e,t);break}case o.SVG:{Q5(e,t);break}case o.HTML:{A5(e,t);break}case o.BASE:case o.LINK:case o.META:case o.STYLE:case o.TITLE:case o.SCRIPT:case o.BGSOUND:case o.BASEFONT:case o.TEMPLATE:{yt(e,t);break}case o.BODY:{k5(e,t);break}case o.FORM:{I5(e,t);break}case o.NOBR:{M5(e,t);break}case o.MATH:{$5(e,t);break}case o.TABLE:{B5(e,t);break}case o.INPUT:{F5(e,t);break}case o.PARAM:case o.TRACK:case o.SOURCE:{H5(e,t);break}case o.IMAGE:{U5(e,t);break}case o.BUTTON:{O5(e,t);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{P5(e,t);break}case o.IFRAME:{G5(e,t);break}case o.SELECT:{V5(e,t);break}case o.OPTION:case o.OPTGROUP:{j5(e,t);break}case o.NOEMBED:case o.NOFRAMES:{Bs(e,t);break}case o.FRAMESET:{S5(e,t);break}case o.TEXTAREA:{q5(e,t);break}case o.NOSCRIPT:{e.options.scriptingEnabled?Bs(e,t):Fs(e,t);break}case o.PLAINTEXT:{D5(e,t);break}case o.COL:case o.TH:case o.TD:case o.TR:case o.HEAD:case o.FRAME:case o.TBODY:case o.TFOOT:case o.THEAD:case o.CAPTION:case o.COLGROUP:break;default:Fs(e,t)}}function K5(e,t){if(e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,e.options.sourceCodeLocationInfo)){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}function J5(e,t){e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,Dc(e,t))}function Z5(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function e7(e){const t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(o.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(o.FORM):r&&e.openElements.remove(r))}function t7(e){e.openElements.hasInButtonScope(o.P)||e._insertFakeElement(O.P,o.P),e._closePElement()}function r7(e){e.openElements.hasInListItemScope(o.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(o.LI),e.openElements.popUntilTagNamePopped(o.LI))}function n7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}function a7(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function i7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function u7(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(O.BR,o.BR),e.openElements.pop(),e.framesetOk=!1}function vc(e,t){const r=t.tagName,n=t.tagID;for(let a=e.openElements.stackTop;a>0;a--){const i=e.openElements.items[a],u=e.openElements.tagIDs[a];if(n===u&&(n!==o.UNKNOWN||e.treeAdapter.getTagName(i)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=a&&e.openElements.shortenToLength(a);break}if(e._isSpecialElement(i,u))break}}function D0(e,t){switch(t.tagID){case o.A:case o.B:case o.I:case o.S:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.NOBR:case o.SMALL:case o.STRIKE:case o.STRONG:{Mi(e,t);break}case o.P:{t7(e);break}case o.DL:case o.UL:case o.OL:case o.DIR:case o.DIV:case o.NAV:case o.PRE:case o.MAIN:case o.MENU:case o.ASIDE:case o.BUTTON:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.ADDRESS:case o.ARTICLE:case o.DETAILS:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.LISTING:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{Z5(e,t);break}case o.LI:{r7(e);break}case o.DD:case o.DT:{n7(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{a7(e);break}case o.BR:{u7(e);break}case o.BODY:{K5(e,t);break}case o.HTML:{J5(e,t);break}case o.FORM:{e7(e);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{i7(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:vc(e,t)}}function Ac(e,t){e.tmplInsertionModeStack.length>0?Nc(e,t):Pi(e,t)}function s7(e,t){var r;t.tagID===o.SCRIPT&&((r=e.scriptHandler)===null||r===void 0||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function l7(e,t){e._err(t,P.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function ba(e,t){if(e.openElements.currentTagId!==void 0&&bc.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=k.IN_TABLE_TEXT,t.type){case de.CHARACTER:{Sc(e,t);break}case de.WHITESPACE_CHARACTER:{kc(e,t);break}}else wn(e,t)}function o7(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_CAPTION}function c7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_COLUMN_GROUP}function h7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.COLGROUP,o.COLGROUP),e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t)}function d7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_TABLE_BODY}function f7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.TBODY,o.TBODY),e.insertionMode=k.IN_TABLE_BODY,O0(e,t)}function m7(e,t){e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function p7(e,t){yc(t)?e._appendElement(t,H.HTML):wn(e,t),t.ackSelfClosing=!0}function g7(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,H.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Rr(e,t){switch(t.tagID){case o.TD:case o.TH:case o.TR:{f7(e,t);break}case o.STYLE:case o.SCRIPT:case o.TEMPLATE:{yt(e,t);break}case o.COL:{h7(e,t);break}case o.FORM:{g7(e,t);break}case o.TABLE:{m7(e,t);break}case o.TBODY:case o.TFOOT:case o.THEAD:{d7(e,t);break}case o.INPUT:{p7(e,t);break}case o.CAPTION:{o7(e,t);break}case o.COLGROUP:{c7(e,t);break}default:wn(e,t)}}function En(e,t){switch(t.tagID){case o.TABLE:{e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}case o.BODY:case o.CAPTION:case o.COL:case o.COLGROUP:case o.HTML:case o.TBODY:case o.TD:case o.TFOOT:case o.TH:case o.THEAD:case o.TR:break;default:wn(e,t)}}function wn(e,t){const r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,N0(e,t),e.fosterParentingEnabled=r}function kc(e,t){e.pendingCharacterTokens.push(t)}function Sc(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function en(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r0&&e.openElements.currentTagId===o.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===o.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===o.OPTGROUP&&e.openElements.pop();break}case o.OPTION:{e.openElements.currentTagId===o.OPTION&&e.openElements.pop();break}case o.SELECT:{e.openElements.hasInSelectScope(o.SELECT)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}}}function v7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e._processStartTag(t)):_c(e,t)}function A7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Ic(e,t)}function k7(e,t){switch(t.tagID){case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{yt(e,t);break}case o.CAPTION:case o.COLGROUP:case o.TBODY:case o.TFOOT:case o.THEAD:{e.tmplInsertionModeStack[0]=k.IN_TABLE,e.insertionMode=k.IN_TABLE,Rr(e,t);break}case o.COL:{e.tmplInsertionModeStack[0]=k.IN_COLUMN_GROUP,e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t);break}case o.TR:{e.tmplInsertionModeStack[0]=k.IN_TABLE_BODY,e.insertionMode=k.IN_TABLE_BODY,O0(e,t);break}case o.TD:case o.TH:{e.tmplInsertionModeStack[0]=k.IN_ROW,e.insertionMode=k.IN_ROW,L0(e,t);break}default:e.tmplInsertionModeStack[0]=k.IN_BODY,e.insertionMode=k.IN_BODY,We(e,t)}}function S7(e,t){t.tagID===o.TEMPLATE&&Tr(e,t)}function Nc(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Pi(e,t)}function w7(e,t){t.tagID===o.HTML?We(e,t):o0(e,t)}function Dc(e,t){var r;if(t.tagID===o.HTML){if(e.fragmentContext||(e.insertionMode=k.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===o.HTML){e._setEndLocation(e.openElements.items[0],t);const n=e.openElements.items[1];n&&!(!((r=e.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&e._setEndLocation(n,t)}}else o0(e,t)}function o0(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function C7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.FRAMESET:{e._insertElement(t,H.HTML);break}case o.FRAME:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.NOFRAMES:{yt(e,t);break}}}function _7(e,t){t.tagID===o.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==o.FRAMESET&&(e.insertionMode=k.AFTER_FRAMESET))}function I7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function N7(e,t){t.tagID===o.HTML&&(e.insertionMode=k.AFTER_AFTER_FRAMESET)}function D7(e,t){t.tagID===o.HTML?We(e,t):Jn(e,t)}function Jn(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function O7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function L7(e,t){t.chars=Se,e._insertCharacters(t)}function R7(e,t){e._insertCharacters(t),e.framesetOk=!1}function Oc(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==H.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function M7(e,t){if(Qp(t))Oc(e),e._startTagOutsideForeignContent(t);else{const r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===H.MATHML?pc(t):n===H.SVG&&(Kp(t),gc(t)),Ri(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}function P7(e,t){if(t.tagID===o.P||t.tagID===o.BR){Oc(e),e._endTagOutsideForeignContent(t);return}for(let r=e.openElements.stackTop;r>0;r--){const n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===H.HTML){e._endTagOutsideForeignContent(t);break}const a=e.treeAdapter.getTagName(n);if(a.toLowerCase()===t.tagName){t.tagName=a,e.openElements.shortenToLength(r);break}}}O.AREA,O.BASE,O.BASEFONT,O.BGSOUND,O.BR,O.COL,O.EMBED,O.FRAME,O.HR,O.IMG,O.INPUT,O.KEYGEN,O.LINK,O.META,O.PARAM,O.SOURCE,O.TRACK,O.WBR;const B7=/<(\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\t\n\f\r />])/gi,F7=new Set(["mdxFlowExpression","mdxJsxFlowElement","mdxJsxTextElement","mdxTextExpression","mdxjsEsm"]),Hs={sourceCodeLocationInfo:!0,scriptingEnabled:!1};function Lc(e,t){const r=X7(e),n=_l("type",{handlers:{root:H7,element:z7,text:U7,comment:Mc,doctype:q7,raw:G7},unknown:V7}),a={parser:r?new Ps(Hs):Ps.getFragmentParser(void 0,Hs),handle(s){n(s,a)},stitches:!1,options:t||{}};n(e,a),Yr(a,_t());const i=r?a.parser.document:a.parser.getFragment(),u=$6(i,{file:a.options.file});return a.stitches&&b0(u,"comment",function(s,l,c){const d=s;if(d.value.stitch&&c&&l!==void 0){const f=c.children;return f[l]=d.value.stitch,l}}),u.type==="root"&&u.children.length===1&&u.children[0].type===e.type?u.children[0]:u}function Rc(e,t){let r=-1;if(e)for(;++r4&&(t.parser.tokenizer.state=0);const r={type:de.CHARACTER,chars:e.value,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function q7(e,t){const r={type:de.DOCTYPE,name:"html",forceQuirks:!1,publicId:"",systemId:"",location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function Y7(e,t){t.stitches=!0;const r=$7(e);if("children"in e&&"children"in r){const n=Lc({type:"root",children:e.children},t.options);r.children=n.children}Mc({type:"comment",value:{stitch:r}},t)}function Mc(e,t){const r=e.value,n={type:de.COMMENT,data:r,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function G7(e,t){if(t.parser.tokenizer.preprocessor.html="",t.parser.tokenizer.preprocessor.pos=-1,t.parser.tokenizer.preprocessor.lastGapPos=-2,t.parser.tokenizer.preprocessor.gapStack=[],t.parser.tokenizer.preprocessor.skipNextNewLine=!1,t.parser.tokenizer.preprocessor.lastChunkWritten=!1,t.parser.tokenizer.preprocessor.endOfChunkHit=!1,t.parser.tokenizer.preprocessor.isEol=!1,Pc(t,_t(e)),t.parser.tokenizer.write(t.options.tagfilter?e.value.replace(B7,"<$1$2"):e.value,!1),t.parser.tokenizer._runParsingLoop(),t.parser.tokenizer.state===72||t.parser.tokenizer.state===78){t.parser.tokenizer.preprocessor.lastChunkWritten=!0;const r=t.parser.tokenizer._consume();t.parser.tokenizer._callState(r)}}function V7(e,t){const r=e;if(t.options.passThrough&&t.options.passThrough.includes(r.type))Y7(r,t);else{let n="";throw F7.has(r.type)&&(n=". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax"),new Error("Cannot compile `"+r.type+"` node"+n)}}function Yr(e,t){Pc(e,t);const r=e.parser.tokenizer.currentCharacterToken;r&&r.location&&(r.location.endLine=e.parser.tokenizer.preprocessor.line,r.location.endCol=e.parser.tokenizer.preprocessor.col+1,r.location.endOffset=e.parser.tokenizer.preprocessor.offset+1,e.parser.currentToken=r,e.parser._processToken(e.parser.currentToken)),e.parser.tokenizer.paused=!1,e.parser.tokenizer.inLoop=!1,e.parser.tokenizer.active=!1,e.parser.tokenizer.returnState=De.DATA,e.parser.tokenizer.charRefCode=-1,e.parser.tokenizer.consumedAfterSnapshot=-1,e.parser.tokenizer.currentLocation=null,e.parser.tokenizer.currentCharacterToken=null,e.parser.tokenizer.currentToken=null,e.parser.tokenizer.currentAttr={name:"",value:""}}function Pc(e,t){if(t&&t.offset!==void 0){const r={startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:-1,endCol:-1,endOffset:-1};e.parser.tokenizer.preprocessor.lineStartPos=-t.column+1,e.parser.tokenizer.preprocessor.droppedBufferSize=t.offset,e.parser.tokenizer.preprocessor.line=t.line,e.parser.tokenizer.currentLocation=r}}function j7(e,t){const r=e.tagName.toLowerCase();if(t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,_t(e));const n=t.parser.openElements.current;let a="namespaceURI"in n?n.namespaceURI:Ct.html;a===Ct.html&&r==="svg"&&(a=Ct.svg);const i=ep({...e,children:[]},{space:a===Ct.svg?"svg":"html"}),u={type:de.START_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:"attrs"in i?i.attrs:[],location:Cn(e)};t.parser.currentToken=u,t.parser._processToken(t.parser.currentToken),t.parser.tokenizer.lastStartTagName=r}function W7(e,t){const r=e.tagName.toLowerCase();if(!t.parser.tokenizer.inForeignNode&&lp.includes(r)||t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,d0(e));const n={type:de.END_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:[],location:Cn(e)};t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken),r===t.parser.tokenizer.lastStartTagName&&(t.parser.tokenizer.state===De.RCDATA||t.parser.tokenizer.state===De.RAWTEXT||t.parser.tokenizer.state===De.SCRIPT_DATA)&&(t.parser.tokenizer.state=De.DATA)}function X7(e){const t=e.type==="root"?e.children[0]:e;return!!(t&&(t.type==="doctype"||t.type==="element"&&t.tagName.toLowerCase()==="html"))}function Cn(e){const t=_t(e)||{line:void 0,column:void 0,offset:void 0},r=d0(e)||{line:void 0,column:void 0,offset:void 0};return{startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:r.line,endCol:r.column,endOffset:r.offset}}function $7(e){return"children"in e?Nr({...e,children:[]}):Nr(e)}function Q7(e){return function(t,r){return Lc(t,{...e,file:r})}}function c0(e){return typeof e=="string"?e:typeof e=="number"?String(e):e?Array.isArray(e)?e.map(c0).join(""):typeof e=="object"&&"props"in e?c0(e.props.children):"":""}function K7(e){return e.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function Sr(e){return function({children:r,...n}){const a=c0(r),i=n.id||K7(a);return pe.jsx(e,{...n,id:i,children:r})}}const J7={h1:Sr("h1"),h2:Sr("h2"),h3:Sr("h3"),h4:Sr("h4"),h5:Sr("h5"),h6:Sr("h6")};function a8(){const{id:e}=Bc(),t=zc.find(d=>d.id===e),[r,n]=Xr.useState(""),[a,i]=Xr.useState(null),[u,s]=Xr.useState(null);Xr.useEffect(()=>{if(!t)return;const d=new AbortController,f=t.filename;return fetch(`/blog/${f}`,{signal:d.signal}).then(g=>{if(!g.ok)throw new Error("Failed to load post");return g.text()}).then(g=>{const p=g.replace(/^\s*#[^#\n]*\r?\n/,"");n(p),i(f),s(null)}).catch(g=>{g instanceof DOMException&&g.name==="AbortError"||(console.error(g),i(f),s(f))}),()=>d.abort()},[t]);const l=!!(t&&a!==t.filename),c=!!(t&&u===t.filename);return Xr.useEffect(()=>{function d(f){const p=f.target.closest("a");if(!p)return;const x=p.getAttribute("href");if(!x||!x.startsWith("#"))return;f.preventDefault();const S=document.getElementById(x.slice(1));S&&(S.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",x))}return document.addEventListener("click",d),()=>document.removeEventListener("click",d)},[]),t?pe.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[pe.jsx(Fc,{title:`${t.title} - QECTOR Blog`,description:t.description}),pe.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[pe.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),pe.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),pe.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[pe.jsxs(P0,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[pe.jsx(Uc,{size:18,className:"mr-2"}),"Back to All Articles"]}),pe.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[pe.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[pe.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[pe.jsx(qc,{size:16,className:"mr-2"}),t.date]}),pe.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:t.category}),pe.jsxs("span",{className:"text-sm text-slate-400",children:["By ",pe.jsx(P0,{to:"/guillaume-lessard",className:"hover:text-cyan-300",children:"Guillaume Lessard"}),r?` · ${Math.max(1,Math.round(r.split(/\s+/).length/220))} min read`:""]})]}),pe.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:t.title}),pe.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:t.description})]}),pe.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:l?pe.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[pe.jsx(Yc,{size:48,className:"animate-spin text-cyan-400 mb-4"}),pe.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):c?pe.jsx("div",{className:"py-20 text-center text-red-400",children:pe.jsx("p",{children:"Failed to load the article. Please try again later."})}):pe.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:pe.jsx(Qf,{remarkPlugins:[l4,g6],rehypePlugins:[j6,Q7],components:{...J7,table:d=>{const{node:f,...g}=d;return pe.jsx("div",{className:"overflow-x-auto",children:pe.jsx("table",{...g})})},pre:d=>{const{children:f}=d,g=Fi.Children.toArray(f)[0];let p="",x="text";if(Fi.isValidElement(g)){const S=g.props,D=/language-([\w-]+)/.exec(S.className||"");D&&(x=D[1]),p=c0(S.children).replace(/\n$/,"")}return pe.jsx(Hc,{code:p,language:x,className:"not-prose"})},img:d=>{const f=d.width!=null&&d.height!=null;return pe.jsx("img",{...d,className:f?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:r})})})]})]})]}):pe.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:pe.jsxs("div",{className:"text-center",children:[pe.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),pe.jsx(P0,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{a8 as default}; diff --git a/assets/BlogPost-Dix1a_3A.js b/assets/BlogPost-Dix1a_3A.js deleted file mode 100644 index 2ce2f3b5..00000000 --- a/assets/BlogPost-Dix1a_3A.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-CqAA-ZXu.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-DkXdKW1C.js b/assets/BlogPost-DkXdKW1C.js deleted file mode 100644 index 133d7910..00000000 --- a/assets/BlogPost-DkXdKW1C.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-WV1aysjN.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-XSU2NJYI.js b/assets/BlogPost-XSU2NJYI.js deleted file mode 100644 index 80938b83..00000000 --- a/assets/BlogPost-XSU2NJYI.js +++ /dev/null @@ -1,292 +0,0 @@ -import{g as zs,j as pe,r as Xr,R as Fi}from"./vendor-react-BiHfrq0e.js";import{b as Bc,L as P0,S as Fc,C as Hc}from"./index-DayaklK-.js";import{b as zc}from"./blogData-OjR2ZtNr.js";import{m as Uc,k as qc,n as Yc}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function Hi(e){const t=[],r=String(e||"");let n=r.indexOf(","),a=0,i=!1;for(;!i;){n===-1&&(n=r.length,i=!0);const u=r.slice(a,n).trim();(u||!i)&&t.push(u),a=n+1,n=r.indexOf(",",a)}return t}function Us(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const Gc=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Vc=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,jc={};function zi(e,t){return(jc.jsx?Vc:Gc).test(e)}const Wc=/[ \t\n\f\r]/g;function Xc(e){return typeof e=="object"?e.type==="text"?Ui(e.value):!1:Ui(e)}function Ui(e){return e.replace(Wc,"")===""}class Tn{constructor(t,r,n){this.normal=r,this.property=t,n&&(this.space=n)}}Tn.prototype.normal={};Tn.prototype.property={};Tn.prototype.space=void 0;function qs(e,t){const r={},n={};for(const a of e)Object.assign(r,a.property),Object.assign(n,a.normal);return new Tn(r,n,t)}function fn(e){return e.toLowerCase()}class nt{constructor(t,r){this.attribute=r,this.property=t}}nt.prototype.attribute="";nt.prototype.booleanish=!1;nt.prototype.boolean=!1;nt.prototype.commaOrSpaceSeparated=!1;nt.prototype.commaSeparated=!1;nt.prototype.defined=!1;nt.prototype.mustUseProperty=!1;nt.prototype.number=!1;nt.prototype.overloadedBoolean=!1;nt.prototype.property="";nt.prototype.spaceSeparated=!1;nt.prototype.space=void 0;let $c=0;const le=gr(),Le=gr(),Ea=gr(),q=gr(),ye=gr(),fr=gr(),st=gr();function gr(){return 2**++$c}const Ta=Object.freeze(Object.defineProperty({__proto__:null,boolean:le,booleanish:Le,commaOrSpaceSeparated:st,commaSeparated:fr,number:q,overloadedBoolean:Ea,spaceSeparated:ye},Symbol.toStringTag,{value:"Module"})),B0=Object.keys(Ta);class Za extends nt{constructor(t,r,n,a){let i=-1;if(super(t,r),qi(this,"space",a),typeof n=="number")for(;++i4&&r.slice(0,4)==="data"&&e1.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(Yi,r1);n="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!Yi.test(i)){let u=i.replace(Zc,t1);u.charAt(0)!=="-"&&(u="-"+u),t="data"+u}}a=Za}return new a(n,t)}function t1(e){return"-"+e.toLowerCase()}function r1(e){return e.charAt(1).toUpperCase()}const xn=qs([Ys,Qc,js,Ws,Xs],"html"),rr=qs([Ys,Kc,js,Ws,Xs],"svg");function Gi(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function $s(e){return e.join(" ").trim()}var Ar={},F0,Vi;function n1(){if(Vi)return F0;Vi=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,n=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,i=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,s=/^\s+|\s+$/g,l=` -`,c="/",d="*",f="",g="comment",p="declaration";function x(D,_){if(typeof D!="string")throw new TypeError("First argument must be a string");if(!D)return[];_=_||{};var N=1,M=1;function W(ne){var X=ne.match(t);X&&(N+=X.length);var me=ne.lastIndexOf(l);M=~me?ne.length-me:M+ne.length}function j(){var ne={line:N,column:M};return function(X){return X.position=new L(ne),K(),X}}function L(ne){this.start=ne,this.end={line:N,column:M},this.source=_.source}L.prototype.content=D;function ee(ne){var X=new Error(_.source+":"+N+":"+M+": "+ne);if(X.reason=ne,X.filename=_.source,X.line=N,X.column=M,X.source=D,!_.silent)throw X}function re(ne){var X=ne.exec(D);if(X){var me=X[0];return W(me),D=D.slice(me.length),X}}function K(){re(r)}function R(ne){var X;for(ne=ne||[];X=J();)X!==!1&&ne.push(X);return ne}function J(){var ne=j();if(!(c!=D.charAt(0)||d!=D.charAt(1))){for(var X=2;f!=D.charAt(X)&&(d!=D.charAt(X)||c!=D.charAt(X+1));)++X;if(X+=2,f===D.charAt(X-1))return ee("End of comment missing");var me=D.slice(2,X-2);return M+=2,W(me),D=D.slice(X),M+=2,ne({type:g,comment:me})}}function Q(){var ne=j(),X=re(n);if(X){if(J(),!re(a))return ee("property missing ':'");var me=re(i),ke=ne({type:p,property:S(X[0].replace(e,f)),value:me?S(me[0].replace(e,f)):f});return re(u),ke}}function be(){var ne=[];R(ne);for(var X;X=Q();)X!==!1&&(ne.push(X),R(ne));return ne}return K(),be()}function S(D){return D?D.replace(s,f):f}return F0=x,F0}var ji;function a1(){if(ji)return Ar;ji=1;var e=Ar&&Ar.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Ar,"__esModule",{value:!0}),Ar.default=r;const t=e(n1());function r(n,a){let i=null;if(!n||typeof n!="string")return i;const u=(0,t.default)(n),s=typeof a=="function";return u.forEach(l=>{if(l.type!=="declaration")return;const{property:c,value:d}=l;s?a(c,d,l):d&&(i=i||{},i[c]=d)}),i}return Ar}var $r={},Wi;function i1(){if(Wi)return $r;Wi=1,Object.defineProperty($r,"__esModule",{value:!0}),$r.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,n=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,i=function(c){return!c||r.test(c)||e.test(c)},u=function(c,d){return d.toUpperCase()},s=function(c,d){return"".concat(d,"-")},l=function(c,d){return d===void 0&&(d={}),i(c)?c:(c=c.toLowerCase(),d.reactCompat?c=c.replace(a,s):c=c.replace(n,s),c.replace(t,u))};return $r.camelCase=l,$r}var Qr,Xi;function u1(){if(Xi)return Qr;Xi=1;var e=Qr&&Qr.__importDefault||function(a){return a&&a.__esModule?a:{default:a}},t=e(a1()),r=i1();function n(a,i){var u={};return!a||typeof a!="string"||(0,t.default)(a,function(s,l){s&&l&&(u[(0,r.camelCase)(s,i)]=l)}),u}return n.default=n,Qr=n,Qr}var s1=u1();const l1=zs(s1),d0=Qs("end"),_t=Qs("start");function Qs(e){return t;function t(r){const n=r&&r.position&&r.position[e]||{};if(typeof n.line=="number"&&n.line>0&&typeof n.column=="number"&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset=="number"&&n.offset>-1?n.offset:void 0}}}function o1(e){const t=_t(e),r=d0(e);if(t&&r)return{start:t,end:r}}function nn(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?$i(e.position):"start"in e||"end"in e?$i(e):"line"in e||"column"in e?xa(e):""}function xa(e){return Qi(e&&e.line)+":"+Qi(e&&e.column)}function $i(e){return xa(e&&e.start)+"-"+xa(e&&e.end)}function Qi(e){return e&&typeof e=="number"?e:1}class je extends Error{constructor(t,r,n){super(),typeof r=="string"&&(n=r,r=void 0);let a="",i={},u=!1;if(r&&("line"in r&&"column"in r?i={place:r}:"start"in r&&"end"in r?i={place:r}:"type"in r?i={ancestors:[r],place:r.position}:i={...r}),typeof t=="string"?a=t:!i.cause&&t&&(u=!0,a=t.message,i.cause=t),!i.ruleId&&!i.source&&typeof n=="string"){const l=n.indexOf(":");l===-1?i.ruleId=n:(i.source=n.slice(0,l),i.ruleId=n.slice(l+1))}if(!i.place&&i.ancestors&&i.ancestors){const l=i.ancestors[i.ancestors.length-1];l&&(i.place=l.position)}const s=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=s?s.line:void 0,this.name=nn(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=u&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}je.prototype.file="";je.prototype.name="";je.prototype.reason="";je.prototype.message="";je.prototype.stack="";je.prototype.column=void 0;je.prototype.line=void 0;je.prototype.ancestors=void 0;je.prototype.cause=void 0;je.prototype.fatal=void 0;je.prototype.place=void 0;je.prototype.ruleId=void 0;je.prototype.source=void 0;const ei={}.hasOwnProperty,c1=new Map,h1=/[A-Z]/g,d1=new Set(["table","tbody","thead","tfoot","tr"]),f1=new Set(["td","th"]),Ks="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function m1(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let n;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=v1(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=y1(r,t.jsx,t.jsxs)}const a={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:n,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?rr:xn,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},i=Js(a,e,void 0);return i&&typeof i!="string"?i:a.create(e,a.Fragment,{children:i||void 0},void 0)}function Js(e,t,r){if(t.type==="element")return p1(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return g1(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return E1(e,t,r);if(t.type==="mdxjsEsm")return b1(e,t);if(t.type==="root")return T1(e,t,r);if(t.type==="text")return x1(e,t)}function p1(e,t,r){const n=e.schema;let a=n;t.tagName.toLowerCase()==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=el(e,t.tagName,!1),u=A1(e,t);let s=ri(e,t);return d1.has(t.tagName)&&(s=s.filter(function(l){return typeof l=="string"?!Xc(l):!0})),Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function g1(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}mn(e,t.position)}function b1(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);mn(e,t.position)}function E1(e,t,r){const n=e.schema;let a=n;t.name==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=t.name===null?e.Fragment:el(e,t.name,!0),u=k1(e,t),s=ri(e,t);return Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function T1(e,t,r){const n={};return ti(n,ri(e,t)),e.create(t,e.Fragment,n,r)}function x1(e,t){return t.value}function Zs(e,t,r,n){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=n)}function ti(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function y1(e,t,r){return n;function n(a,i,u,s){const c=Array.isArray(u.children)?r:t;return s?c(i,u,s):c(i,u)}}function v1(e,t){return r;function r(n,a,i,u){const s=Array.isArray(i.children),l=_t(n);return t(a,i,u,s,{columnNumber:l?l.column-1:void 0,fileName:e,lineNumber:l?l.line:void 0},void 0)}}function A1(e,t){const r={};let n,a;for(a in t.properties)if(a!=="children"&&ei.call(t.properties,a)){const i=S1(e,a,t.properties[a]);if(i){const[u,s]=i;e.tableCellAlignToStyle&&u==="align"&&typeof s=="string"&&f1.has(t.tagName)?n=s:r[u]=s}}if(n){const i=r.style||(r.style={});i[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function k1(e,t){const r={};for(const n of t.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&e.evaluater){const i=n.data.estree.body[0];i.type;const u=i.expression;u.type;const s=u.properties[0];s.type,Object.assign(r,e.evaluater.evaluateExpression(s.argument))}else mn(e,t.position);else{const a=n.name;let i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&e.evaluater){const s=n.value.data.estree.body[0];s.type,i=e.evaluater.evaluateExpression(s.expression)}else mn(e,t.position);else i=n.value===null?!0:n.value;r[a]=i}return r}function ri(e,t){const r=[];let n=-1;const a=e.passKeys?new Map:c1;for(;++na?0:a+t:t=t>a?a:t,r=r>0?r:0,n.length<1e4)u=Array.from(n),u.unshift(t,r),e.splice(...u);else for(r&&e.splice(t,r);i0?(lt(e,e.length,0,t),e):t}const Zi={}.hasOwnProperty;function rl(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function xt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ke=nr(/[A-Za-z]/),Ge=nr(/[\dA-Za-z]/),R1=nr(/[#-'*+\--9=?A-Z^-~]/);function Zn(e){return e!==null&&(e<32||e===127)}const ya=nr(/\d/),M1=nr(/[\dA-Fa-f]/),P1=nr(/[!-/:-@[-`{-~]/);function ae(e){return e!==null&&e<-2}function ve(e){return e!==null&&(e<0||e===32)}function ge(e){return e===-2||e===-1||e===32}const f0=nr(new RegExp("\\p{P}|\\p{S}","u")),pr=nr(/\s/);function nr(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function Pr(e){const t=[];let r=-1,n=0,a=0;for(;++r55295&&i<57344){const s=e.charCodeAt(r+1);i<56320&&s>56319&&s<57344?(u=String.fromCharCode(i,s),a=1):u="�"}else u=String.fromCharCode(i);u&&(t.push(e.slice(n,r),encodeURIComponent(u)),n=r+a+1,u=""),a&&(r+=a,a=0)}return t.join("")+e.slice(n)}function fe(e,t,r,n){const a=n?n-1:Number.POSITIVE_INFINITY;let i=0;return u;function u(l){return ge(l)?(e.enter(r),s(l)):t(l)}function s(l){return ge(l)&&i++u))return;const ee=t.events.length;let re=ee,K,R;for(;re--;)if(t.events[re][0]==="exit"&&t.events[re][1].type==="chunkFlow"){if(K){R=t.events[re][1].end;break}K=!0}for(_(n),L=ee;LM;){const j=r[W];t.containerState=j[1],j[0].exit.call(t,e)}r.length=M}function N(){a.write([null]),i=void 0,a=void 0,t.containerState._closeFlow=void 0}}function U1(e,t,r){return fe(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ir(e){if(e===null||ve(e)||pr(e))return 1;if(f0(e))return 2}function m0(e,t,r){const n=[];let a=-1;for(;++a1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const f={...e[n][1].end},g={...e[r][1].start};tu(f,-l),tu(g,l),u={type:l>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},s={type:l>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:g},i={type:l>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[r][1].start}},a={type:l>1?"strong":"emphasis",start:{...u.start},end:{...s.end}},e[n][1].end={...u.start},e[r][1].start={...s.end},c=[],e[n][1].end.offset-e[n][1].start.offset&&(c=mt(c,[["enter",e[n][1],t],["exit",e[n][1],t]])),c=mt(c,[["enter",a,t],["enter",u,t],["exit",u,t],["enter",i,t]]),c=mt(c,m0(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),c=mt(c,[["exit",i,t],["enter",s,t],["exit",s,t],["exit",a,t]]),e[r][1].end.offset-e[r][1].start.offset?(d=2,c=mt(c,[["enter",e[r][1],t],["exit",e[r][1],t]])):d=0,lt(e,n-1,r-n+3,c),r=n+c.length-d-2;break}}for(r=-1;++r0&&ge(L)?fe(e,N,"linePrefix",i+1)(L):N(L)}function N(L){return L===null||ae(L)?e.check(ru,S,W)(L):(e.enter("codeFlowValue"),M(L))}function M(L){return L===null||ae(L)?(e.exit("codeFlowValue"),N(L)):(e.consume(L),M)}function W(L){return e.exit("codeFenced"),t(L)}function j(L,ee,re){let K=0;return R;function R(X){return L.enter("lineEnding"),L.consume(X),L.exit("lineEnding"),J}function J(X){return L.enter("codeFencedFence"),ge(X)?fe(L,Q,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(X):Q(X)}function Q(X){return X===s?(L.enter("codeFencedFenceSequence"),be(X)):re(X)}function be(X){return X===s?(K++,L.consume(X),be):K>=u?(L.exit("codeFencedFenceSequence"),ge(X)?fe(L,ne,"whitespace")(X):ne(X)):re(X)}function ne(X){return X===null||ae(X)?(L.exit("codeFencedFence"),ee(X)):re(X)}}}function Z1(e,t,r){const n=this;return a;function a(u){return u===null?r(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}const z0={name:"codeIndented",tokenize:th},eh={partial:!0,tokenize:rh};function th(e,t,r){const n=this;return a;function a(c){return e.enter("codeIndented"),fe(e,i,"linePrefix",5)(c)}function i(c){const d=n.events[n.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?u(c):r(c)}function u(c){return c===null?l(c):ae(c)?e.attempt(eh,u,l)(c):(e.enter("codeFlowValue"),s(c))}function s(c){return c===null||ae(c)?(e.exit("codeFlowValue"),u(c)):(e.consume(c),s)}function l(c){return e.exit("codeIndented"),t(c)}}function rh(e,t,r){const n=this;return a;function a(u){return n.parser.lazy[n.now().line]?r(u):ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),a):fe(e,i,"linePrefix",5)(u)}function i(u){const s=n.events[n.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(u):ae(u)?a(u):r(u)}}const nh={name:"codeText",previous:ih,resolve:ah,tokenize:uh};function ah(e){let t=e.length-4,r=3,n,a;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(t,r,n){const a=r||0;this.setCursor(Math.trunc(t));const i=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return n&&Kr(this.left,n),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Kr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Kr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(u):e.interrupt(n.parser.constructs.flow,r,t)(u)}}function ll(e,t,r,n,a,i,u,s,l){const c=l||Number.POSITIVE_INFINITY;let d=0;return f;function f(_){return _===60?(e.enter(n),e.enter(a),e.enter(i),e.consume(_),e.exit(i),g):_===null||_===32||_===41||Zn(_)?r(_):(e.enter(n),e.enter(u),e.enter(s),e.enter("chunkString",{contentType:"string"}),S(_))}function g(_){return _===62?(e.enter(i),e.consume(_),e.exit(i),e.exit(a),e.exit(n),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(_))}function p(_){return _===62?(e.exit("chunkString"),e.exit(s),g(_)):_===null||_===60||ae(_)?r(_):(e.consume(_),_===92?x:p)}function x(_){return _===60||_===62||_===92?(e.consume(_),p):p(_)}function S(_){return!d&&(_===null||_===41||ve(_))?(e.exit("chunkString"),e.exit(s),e.exit(u),e.exit(n),t(_)):d999||p===null||p===91||p===93&&!l||p===94&&!s&&"_hiddenFootnoteSupport"in u.parser.constructs?r(p):p===93?(e.exit(i),e.enter(a),e.consume(p),e.exit(a),e.exit(n),t):ae(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),f(p))}function f(p){return p===null||p===91||p===93||ae(p)||s++>999?(e.exit("chunkString"),d(p)):(e.consume(p),l||(l=!ge(p)),p===92?g:f)}function g(p){return p===91||p===92||p===93?(e.consume(p),s++,f):f(p)}}function cl(e,t,r,n,a,i){let u;return s;function s(g){return g===34||g===39||g===40?(e.enter(n),e.enter(a),e.consume(g),e.exit(a),u=g===40?41:g,l):r(g)}function l(g){return g===u?(e.enter(a),e.consume(g),e.exit(a),e.exit(n),t):(e.enter(i),c(g))}function c(g){return g===u?(e.exit(i),l(u)):g===null?r(g):ae(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),fe(e,c,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(g))}function d(g){return g===u||g===null||ae(g)?(e.exit("chunkString"),c(g)):(e.consume(g),g===92?f:d)}function f(g){return g===u||g===92?(e.consume(g),d):d(g)}}function an(e,t){let r;return n;function n(a){return ae(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,n):ge(a)?fe(e,n,r?"linePrefix":"lineSuffix")(a):t(a)}}const mh={name:"definition",tokenize:gh},ph={partial:!0,tokenize:bh};function gh(e,t,r){const n=this;let a;return i;function i(p){return e.enter("definition"),u(p)}function u(p){return ol.call(n,e,s,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return a=xt(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):r(p)}function l(p){return ve(p)?an(e,c)(p):c(p)}function c(p){return ll(e,d,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function d(p){return e.attempt(ph,f,f)(p)}function f(p){return ge(p)?fe(e,g,"whitespace")(p):g(p)}function g(p){return p===null||ae(p)?(e.exit("definition"),n.parser.defined.push(a),t(p)):r(p)}}function bh(e,t,r){return n;function n(s){return ve(s)?an(e,a)(s):r(s)}function a(s){return cl(e,i,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function i(s){return ge(s)?fe(e,u,"whitespace")(s):u(s)}function u(s){return s===null||ae(s)?t(s):r(s)}}const Eh={name:"hardBreakEscape",tokenize:Th};function Th(e,t,r){return n;function n(i){return e.enter("hardBreakEscape"),e.consume(i),a}function a(i){return ae(i)?(e.exit("hardBreakEscape"),t(i)):r(i)}}const xh={name:"headingAtx",resolve:yh,tokenize:vh};function yh(e,t){let r=e.length-2,n=3,a,i;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(a={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},i={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},lt(e,n,r-n+1,[["enter",a,t],["enter",i,t],["exit",i,t],["exit",a,t]])),e}function vh(e,t,r){let n=0;return a;function a(d){return e.enter("atxHeading"),i(d)}function i(d){return e.enter("atxHeadingSequence"),u(d)}function u(d){return d===35&&n++<6?(e.consume(d),u):d===null||ve(d)?(e.exit("atxHeadingSequence"),s(d)):r(d)}function s(d){return d===35?(e.enter("atxHeadingSequence"),l(d)):d===null||ae(d)?(e.exit("atxHeading"),t(d)):ge(d)?fe(e,s,"whitespace")(d):(e.enter("atxHeadingText"),c(d))}function l(d){return d===35?(e.consume(d),l):(e.exit("atxHeadingSequence"),s(d))}function c(d){return d===null||d===35||ve(d)?(e.exit("atxHeadingText"),s(d)):(e.consume(d),c)}}const Ah=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],au=["pre","script","style","textarea"],kh={concrete:!0,name:"htmlFlow",resolveTo:Ch,tokenize:_h},Sh={partial:!0,tokenize:Nh},wh={partial:!0,tokenize:Ih};function Ch(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function _h(e,t,r){const n=this;let a,i,u,s,l;return c;function c(C){return d(C)}function d(C){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(C),f}function f(C){return C===33?(e.consume(C),g):C===47?(e.consume(C),i=!0,S):C===63?(e.consume(C),a=3,n.interrupt?t:w):Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function g(C){return C===45?(e.consume(C),a=2,p):C===91?(e.consume(C),a=5,s=0,x):Ke(C)?(e.consume(C),a=4,n.interrupt?t:w):r(C)}function p(C){return C===45?(e.consume(C),n.interrupt?t:w):r(C)}function x(C){const Ye="CDATA[";return C===Ye.charCodeAt(s++)?(e.consume(C),s===Ye.length?n.interrupt?t:Q:x):r(C)}function S(C){return Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function D(C){if(C===null||C===47||C===62||ve(C)){const Ye=C===47,vt=u.toLowerCase();return!Ye&&!i&&au.includes(vt)?(a=1,n.interrupt?t(C):Q(C)):Ah.includes(u.toLowerCase())?(a=6,Ye?(e.consume(C),_):n.interrupt?t(C):Q(C)):(a=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(C):i?N(C):M(C))}return C===45||Ge(C)?(e.consume(C),u+=String.fromCharCode(C),D):r(C)}function _(C){return C===62?(e.consume(C),n.interrupt?t:Q):r(C)}function N(C){return ge(C)?(e.consume(C),N):R(C)}function M(C){return C===47?(e.consume(C),R):C===58||C===95||Ke(C)?(e.consume(C),W):ge(C)?(e.consume(C),M):R(C)}function W(C){return C===45||C===46||C===58||C===95||Ge(C)?(e.consume(C),W):j(C)}function j(C){return C===61?(e.consume(C),L):ge(C)?(e.consume(C),j):M(C)}function L(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),l=C,ee):ge(C)?(e.consume(C),L):re(C)}function ee(C){return C===l?(e.consume(C),l=null,K):C===null||ae(C)?r(C):(e.consume(C),ee)}function re(C){return C===null||C===34||C===39||C===47||C===60||C===61||C===62||C===96||ve(C)?j(C):(e.consume(C),re)}function K(C){return C===47||C===62||ge(C)?M(C):r(C)}function R(C){return C===62?(e.consume(C),J):r(C)}function J(C){return C===null||ae(C)?Q(C):ge(C)?(e.consume(C),J):r(C)}function Q(C){return C===45&&a===2?(e.consume(C),me):C===60&&a===1?(e.consume(C),ke):C===62&&a===4?(e.consume(C),Oe):C===63&&a===3?(e.consume(C),w):C===93&&a===5?(e.consume(C),at):ae(C)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(Sh,Xe,be)(C)):C===null||ae(C)?(e.exit("htmlFlowData"),be(C)):(e.consume(C),Q)}function be(C){return e.check(wh,ne,Xe)(C)}function ne(C){return e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),X}function X(C){return C===null||ae(C)?be(C):(e.enter("htmlFlowData"),Q(C))}function me(C){return C===45?(e.consume(C),w):Q(C)}function ke(C){return C===47?(e.consume(C),u="",ze):Q(C)}function ze(C){if(C===62){const Ye=u.toLowerCase();return au.includes(Ye)?(e.consume(C),Oe):Q(C)}return Ke(C)&&u.length<8?(e.consume(C),u+=String.fromCharCode(C),ze):Q(C)}function at(C){return C===93?(e.consume(C),w):Q(C)}function w(C){return C===62?(e.consume(C),Oe):C===45&&a===2?(e.consume(C),w):Q(C)}function Oe(C){return C===null||ae(C)?(e.exit("htmlFlowData"),Xe(C)):(e.consume(C),Oe)}function Xe(C){return e.exit("htmlFlow"),t(C)}}function Ih(e,t,r){const n=this;return a;function a(u){return ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i):r(u)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}function Nh(e,t,r){return n;function n(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(yn,t,r)}}const Dh={name:"htmlText",tokenize:Oh};function Oh(e,t,r){const n=this;let a,i,u;return s;function s(w){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(w),l}function l(w){return w===33?(e.consume(w),c):w===47?(e.consume(w),j):w===63?(e.consume(w),M):Ke(w)?(e.consume(w),re):r(w)}function c(w){return w===45?(e.consume(w),d):w===91?(e.consume(w),i=0,x):Ke(w)?(e.consume(w),N):r(w)}function d(w){return w===45?(e.consume(w),p):r(w)}function f(w){return w===null?r(w):w===45?(e.consume(w),g):ae(w)?(u=f,ke(w)):(e.consume(w),f)}function g(w){return w===45?(e.consume(w),p):f(w)}function p(w){return w===62?me(w):w===45?g(w):f(w)}function x(w){const Oe="CDATA[";return w===Oe.charCodeAt(i++)?(e.consume(w),i===Oe.length?S:x):r(w)}function S(w){return w===null?r(w):w===93?(e.consume(w),D):ae(w)?(u=S,ke(w)):(e.consume(w),S)}function D(w){return w===93?(e.consume(w),_):S(w)}function _(w){return w===62?me(w):w===93?(e.consume(w),_):S(w)}function N(w){return w===null||w===62?me(w):ae(w)?(u=N,ke(w)):(e.consume(w),N)}function M(w){return w===null?r(w):w===63?(e.consume(w),W):ae(w)?(u=M,ke(w)):(e.consume(w),M)}function W(w){return w===62?me(w):M(w)}function j(w){return Ke(w)?(e.consume(w),L):r(w)}function L(w){return w===45||Ge(w)?(e.consume(w),L):ee(w)}function ee(w){return ae(w)?(u=ee,ke(w)):ge(w)?(e.consume(w),ee):me(w)}function re(w){return w===45||Ge(w)?(e.consume(w),re):w===47||w===62||ve(w)?K(w):r(w)}function K(w){return w===47?(e.consume(w),me):w===58||w===95||Ke(w)?(e.consume(w),R):ae(w)?(u=K,ke(w)):ge(w)?(e.consume(w),K):me(w)}function R(w){return w===45||w===46||w===58||w===95||Ge(w)?(e.consume(w),R):J(w)}function J(w){return w===61?(e.consume(w),Q):ae(w)?(u=J,ke(w)):ge(w)?(e.consume(w),J):K(w)}function Q(w){return w===null||w===60||w===61||w===62||w===96?r(w):w===34||w===39?(e.consume(w),a=w,be):ae(w)?(u=Q,ke(w)):ge(w)?(e.consume(w),Q):(e.consume(w),ne)}function be(w){return w===a?(e.consume(w),a=void 0,X):w===null?r(w):ae(w)?(u=be,ke(w)):(e.consume(w),be)}function ne(w){return w===null||w===34||w===39||w===60||w===61||w===96?r(w):w===47||w===62||ve(w)?K(w):(e.consume(w),ne)}function X(w){return w===47||w===62||ve(w)?K(w):r(w)}function me(w){return w===62?(e.consume(w),e.exit("htmlTextData"),e.exit("htmlText"),t):r(w)}function ke(w){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),ze}function ze(w){return ge(w)?fe(e,at,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):at(w)}function at(w){return e.enter("htmlTextData"),u(w)}}const ii={name:"labelEnd",resolveAll:Ph,resolveTo:Bh,tokenize:Fh},Lh={tokenize:Hh},Rh={tokenize:zh},Mh={tokenize:Uh};function Ph(e){let t=-1;const r=[];for(;++t=3&&(c===null||ae(c))?(e.exit("thematicBreak"),t(c)):r(c)}function l(c){return c===a?(e.consume(c),n++,l):(e.exit("thematicBreakSequence"),ge(c)?fe(e,s,"whitespace")(c):s(c))}}const tt={continuation:{tokenize:Kh},exit:Zh,name:"list",tokenize:Qh},Xh={partial:!0,tokenize:ed},$h={partial:!0,tokenize:Jh};function Qh(e,t,r){const n=this,a=n.events[n.events.length-1];let i=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,u=0;return s;function s(p){const x=n.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(x==="listUnordered"?!n.containerState.marker||p===n.containerState.marker:ya(p)){if(n.containerState.type||(n.containerState.type=x,e.enter(x,{_container:!0})),x==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Xn,r,c)(p):c(p);if(!n.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return r(p)}function l(p){return ya(p)&&++u<10?(e.consume(p),l):(!n.interrupt||u<2)&&(n.containerState.marker?p===n.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),c(p)):r(p)}function c(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||p,e.check(yn,n.interrupt?r:d,e.attempt(Xh,g,f))}function d(p){return n.containerState.initialBlankLine=!0,i++,g(p)}function f(p){return ge(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),g):r(p)}function g(p){return n.containerState.size=i+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function Kh(e,t,r){const n=this;return n.containerState._closeFlow=void 0,e.check(yn,a,i);function a(s){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,fe(e,t,"listItemIndent",n.containerState.size+1)(s)}function i(s){return n.containerState.furtherBlankLines||!ge(s)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,u(s)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt($h,t,u)(s))}function u(s){return n.containerState._closeFlow=!0,n.interrupt=void 0,fe(e,e.attempt(tt,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function Jh(e,t,r){const n=this;return fe(e,a,"listItemIndent",n.containerState.size+1);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===n.containerState.size?t(i):r(i)}}function Zh(e){e.exit(this.containerState.type)}function ed(e,t,r){const n=this;return fe(e,a,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(i){const u=n.events[n.events.length-1];return!ge(i)&&u&&u[1].type==="listItemPrefixWhitespace"?t(i):r(i)}}const iu={name:"setextUnderline",resolveTo:td,tokenize:rd};function td(e,t){let r=e.length,n,a,i;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&e.splice(r,1),!i&&e[r][1].type==="definition"&&(i=r);const u={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",i?(e.splice(a,0,["enter",u,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=u,e.push(["exit",u,t]),e}function rd(e,t,r){const n=this;let a;return i;function i(c){let d=n.events.length,f;for(;d--;)if(n.events[d][1].type!=="lineEnding"&&n.events[d][1].type!=="linePrefix"&&n.events[d][1].type!=="content"){f=n.events[d][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||f)?(e.enter("setextHeadingLine"),a=c,u(c)):r(c)}function u(c){return e.enter("setextHeadingLineSequence"),s(c)}function s(c){return c===a?(e.consume(c),s):(e.exit("setextHeadingLineSequence"),ge(c)?fe(e,l,"lineSuffix")(c):l(c))}function l(c){return c===null||ae(c)?(e.exit("setextHeadingLine"),t(c)):r(c)}}const nd={tokenize:ad};function ad(e){const t=this,r=e.attempt(yn,n,e.attempt(this.parser.constructs.flowInitial,a,fe(e,e.attempt(this.parser.constructs.flow,a,e.attempt(oh,a)),"linePrefix")));return r;function n(i){if(i===null){e.consume(i);return}return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function a(i){if(i===null){e.consume(i);return}return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const id={resolveAll:dl()},ud=hl("string"),sd=hl("text");function hl(e){return{resolveAll:dl(e==="text"?ld:void 0),tokenize:t};function t(r){const n=this,a=this.parser.constructs[e],i=r.attempt(a,u,s);return u;function u(d){return c(d)?i(d):s(d)}function s(d){if(d===null){r.consume(d);return}return r.enter("data"),r.consume(d),l}function l(d){return c(d)?(r.exit("data"),i(d)):(r.consume(d),l)}function c(d){if(d===null)return!0;const f=a[d];let g=-1;if(f)for(;++g-1){const s=u[0];typeof s=="string"?u[0]=s.slice(n):u.shift()}i>0&&u.push(e[a].slice(0,i))}return u}function yd(e,t){let r=-1;const n=[];let a;for(;++r0){const Tt=ue.tokenStack[ue.tokenStack.length-1];(Tt[1]||su).call(ue,void 0,Tt[0])}for($.position={start:Vt(B.length>0?B[0][1].start:{line:1,column:1,offset:0}),end:Vt(B.length>0?B[B.length-2][1].end:{line:1,column:1,offset:0})},xe=-1;++xe0&&(n.className=["language-"+a[0]]);let i={type:"element",tagName:"code",properties:n,children:[{type:"text",value:r}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i=e.applyData(t,i),i={type:"element",tagName:"pre",properties:{},children:[i]},e.patch(t,i),i}function Md(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Pd(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Bd(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=String(t.identifier).toUpperCase(),a=Pr(n.toLowerCase()),i=e.footnoteOrder.indexOf(n);let u,s=e.footnoteCounts.get(n);s===void 0?(s=0,e.footnoteOrder.push(n),u=e.footnoteOrder.length):u=i+1,s+=1,e.footnoteCounts.set(n,s);const l={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(t,l);const c={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,c),e.applyData(t,c)}function Fd(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Hd(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function pl(e,t){const r=t.referenceType;let n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+n}];const a=e.all(t),i=a[0];i&&i.type==="text"?i.value="["+i.value:a.unshift({type:"text",value:"["});const u=a[a.length-1];return u&&u.type==="text"?u.value+=n:a.push({type:"text",value:n}),a}function zd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={src:Pr(n.url||""),alt:t.alt};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,i),e.applyData(t,i)}function Ud(e,t){const r={src:Pr(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function qd(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function Yd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={href:Pr(n.url||"")};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function Gd(e,t){const r={href:Pr(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Vd(e,t,r){const n=e.all(t),a=r?jd(r):gl(t),i={},u=[];if(typeof t.checked=="boolean"){const d=n[0];let f;d&&d.type==="element"&&d.tagName==="p"?f=d:(f={type:"element",tagName:"p",properties:{},children:[]},n.unshift(f)),f.children.length>0&&f.children.unshift({type:"text",value:" "}),f.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let s=-1;for(;++s1}function Wd(e,t){const r={},n=e.all(t);let a=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++a0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},s=_t(t.children[1]),l=d0(t.children[t.children.length-1]);s&&l&&(u.position={start:s,end:l}),a.push(u)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(t,i),e.applyData(t,i)}function Jd(e,t,r){const n=r?r.children:void 0,i=(n?n.indexOf(t):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,s=u?u.length:t.children.length;let l=-1;const c=[];for(;++l0,!0),n[0]),a=n.index+n[0].length,n=r.exec(t);return i.push(cu(t.slice(a),a>0,!1)),i.join("")}function cu(e,t,r){let n=0,a=e.length;if(t){let i=e.codePointAt(n);for(;i===lu||i===ou;)n++,i=e.codePointAt(n)}if(r){let i=e.codePointAt(a-1);for(;i===lu||i===ou;)a--,i=e.codePointAt(a-1)}return a>n?e.slice(n,a):""}function tf(e,t){const r={type:"text",value:ef(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function rf(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const nf={blockquote:Od,break:Ld,code:Rd,delete:Md,emphasis:Pd,footnoteReference:Bd,heading:Fd,html:Hd,imageReference:zd,image:Ud,inlineCode:qd,linkReference:Yd,link:Gd,listItem:Vd,list:Wd,paragraph:Xd,root:$d,strong:Qd,table:Kd,tableCell:Zd,tableRow:Jd,text:tf,thematicBreak:rf,toml:Mn,yaml:Mn,definition:Mn,footnoteDefinition:Mn};function Mn(){}const bl=-1,p0=0,un=1,e0=2,ui=3,si=4,li=5,oi=6,El=7,Tl=8,xl=typeof self=="object"?self:globalThis,hu=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new xl[e](t)},af=(e,t)=>{const r=(a,i)=>(e.set(i,a),a),n=a=>{if(e.has(a))return e.get(a);const[i,u]=t[a];switch(i){case p0:case bl:return r(u,a);case un:{const s=r([],a);for(const l of u)s.push(n(l));return s}case e0:{const s=r({},a);for(const[l,c]of u)s[n(l)]=n(c);return s}case ui:return r(new Date(u),a);case si:{const{source:s,flags:l}=u;return r(new RegExp(s,l),a)}case li:{const s=r(new Map,a);for(const[l,c]of u)s.set(n(l),n(c));return s}case oi:{const s=r(new Set,a);for(const l of u)s.add(n(l));return s}case El:{const{name:s,message:l}=u;return r(typeof xl[s]=="function"?hu(s,l):new Error(l),a)}case Tl:return r(BigInt(u),a);case"BigInt":return r(Object(BigInt(u)),a);case"ArrayBuffer":return r(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:s}=new Uint8Array(u);return r(new DataView(s),u)}}return r(hu(i,u),a)};return n},du=e=>af(new Map,e)(0),hr="",{toString:uf}={},{keys:sf}=Object,Jr=e=>{const t=typeof e;if(t!=="object"||!e)return[p0,t];const r=uf.call(e).slice(8,-1);switch(r){case"Array":return[un,hr];case"Object":return[e0,hr];case"Date":return[ui,hr];case"RegExp":return[si,hr];case"Map":return[li,hr];case"Set":return[oi,hr];case"DataView":return[un,r]}return r.includes("Array")?[un,r]:e instanceof Error?[El,e.name||"Error"]:[e0,r]},Pn=([e,t])=>e===p0&&(t==="function"||t==="symbol"),lf=(e,t,r,n)=>{const a=(u,s)=>{const l=n.push(u)-1;return r.set(s,l),l},i=u=>{if(r.has(u))return r.get(u);let[s,l]=Jr(u);switch(s){case p0:{let d=u;switch(l){case"bigint":s=Tl,d=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+l);d=null;break;case"undefined":return a([bl],u)}return a([s,d],u)}case un:{if(l){let g=u;return l==="DataView"?g=new Uint8Array(u.buffer):l==="ArrayBuffer"&&(g=new Uint8Array(u)),a([l,[...g]],u)}const d=[],f=a([s,d],u);for(const g of u)d.push(i(g));return f}case e0:{if(l)switch(l){case"BigInt":return a([l,u.toString()],u);case"Boolean":case"Number":case"String":return a([l,u.valueOf()],u)}if(t&&"toJSON"in u)return i(u.toJSON());const d=[],f=a([s,d],u);for(const g of sf(u))(e||!Pn(Jr(u[g])))&&d.push([i(g),i(u[g])]);return f}case ui:return a([s,isNaN(u.getTime())?hr:u.toISOString()],u);case si:{const{source:d,flags:f}=u;return a([s,{source:d,flags:f}],u)}case li:{const d=[],f=a([s,d],u);for(const[g,p]of u)(e||!(Pn(Jr(g))||Pn(Jr(p))))&&d.push([i(g),i(p)]);return f}case oi:{const d=[],f=a([s,d],u);for(const g of u)(e||!Pn(Jr(g)))&&d.push(i(g));return f}}const{message:c}=u;return a([s,{name:l,message:c}],u)};return i},fu=(e,{json:t,lossy:r}={})=>{const n=[];return lf(!(t||r),!!t,new Map,n)(e),n},Nr=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?du(fu(e,t)):structuredClone(e):(e,t)=>du(fu(e,t));function of(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function cf(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function hf(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||of,n=e.options.footnoteBackLabel||cf,a=e.options.footnoteLabel||"Footnotes",i=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let l=-1;for(;++l0&&x.push({type:"text",value:" "});let N=typeof r=="string"?r:r(l,p);typeof N=="string"&&(N={type:"text",value:N}),x.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof n=="string"?n:n(l,p),className:["data-footnote-backref"]},children:Array.isArray(N)?N:[N]})}const D=d[d.length-1];if(D&&D.type==="element"&&D.tagName==="p"){const N=D.children[D.children.length-1];N&&N.type==="text"?N.value+=" ":D.children.push({type:"text",value:" "}),D.children.push(...x)}else d.push(...x);const _={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(d,!0)};e.patch(c,_),s.push(_)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...Nr(u),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` -`}]}}const vn=(function(e){if(e==null)return pf;if(typeof e=="function")return g0(e);if(typeof e=="object")return Array.isArray(e)?df(e):ff(e);if(typeof e=="string")return mf(e);throw new Error("Expected function, string, or object as test")});function df(e){const t=[];let r=-1;for(;++r":""))+")"})}return g;function g(){let p=yl,x,S,D;if((!t||i(l,c,d[d.length-1]||void 0))&&(p=Ef(r(l,d)),p[0]===Aa))return p;if("children"in l&&l.children){const _=l;if(_.children&&p[0]!==vl)for(S=(n?_.children.length:-1)+u,D=d.concat(_);S>-1&&S<_.children.length;){const N=_.children[S];if(x=s(N,S,D)(),x[0]===Aa)return x;S=typeof x[1]=="number"?x[1]:S+u}}return p}}}function Ef(e){return Array.isArray(e)?e:typeof e=="number"?[bf,e]:e==null?yl:[e]}function b0(e,t,r,n){let a,i,u;typeof t=="function"&&typeof r!="function"?(i=void 0,u=t,a=r):(i=t,u=r,a=n),ci(e,i,s,a);function s(l,c){const d=c[c.length-1],f=d?d.children.indexOf(l):void 0;return u(l,f,d)}}const ka={}.hasOwnProperty,Tf={};function xf(e,t){const r=t||Tf,n=new Map,a=new Map,i=new Map,u={...nf,...r.handlers},s={all:c,applyData:vf,definitionById:n,footnoteById:a,footnoteCounts:i,footnoteOrder:[],handlers:u,one:l,options:r,patch:yf,wrap:kf};return b0(e,function(d){if(d.type==="definition"||d.type==="footnoteDefinition"){const f=d.type==="definition"?n:a,g=String(d.identifier).toUpperCase();f.has(g)||f.set(g,d)}}),s;function l(d,f){const g=d.type,p=s.handlers[g];if(ka.call(s.handlers,g)&&p)return p(s,d,f);if(s.options.passThrough&&s.options.passThrough.includes(g)){if("children"in d){const{children:S,...D}=d,_=Nr(D);return _.children=s.all(d),_}return Nr(d)}return(s.options.unknownHandler||Af)(s,d,f)}function c(d){const f=[];if("children"in d){const g=d.children;let p=-1;for(;++p0&&r.push({type:"text",value:` -`}),r}function mu(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function pu(e,t){const r=xf(e,t),n=r.one(e,void 0),a=hf(r),i=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return a&&i.children.push({type:"text",value:` -`},a),i}function Sf(e,t){return e&&"run"in e?async function(r,n){const a=pu(r,{file:n,...t});await e.run(a,n)}:function(r,n){return pu(r,{file:n,...e||t})}}function gu(e){if(e)throw e}var q0,bu;function wf(){if(bu)return q0;bu=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=function(c){return typeof Array.isArray=="function"?Array.isArray(c):t.call(c)==="[object Array]"},i=function(c){if(!c||t.call(c)!=="[object Object]")return!1;var d=e.call(c,"constructor"),f=c.constructor&&c.constructor.prototype&&e.call(c.constructor.prototype,"isPrototypeOf");if(c.constructor&&!d&&!f)return!1;var g;for(g in c);return typeof g>"u"||e.call(c,g)},u=function(c,d){r&&d.name==="__proto__"?r(c,d.name,{enumerable:!0,configurable:!0,value:d.newValue,writable:!0}):c[d.name]=d.newValue},s=function(c,d){if(d==="__proto__")if(e.call(c,d)){if(n)return n(c,d).value}else return;return c[d]};return q0=function l(){var c,d,f,g,p,x,S=arguments[0],D=1,_=arguments.length,N=!1;for(typeof S=="boolean"&&(N=S,S=arguments[1]||{},D=2),(S==null||typeof S!="object"&&typeof S!="function")&&(S={});D<_;++D)if(c=arguments[D],c!=null)for(d in c)f=s(S,d),g=s(c,d),S!==g&&(N&&g&&(i(g)||(p=a(g)))?(p?(p=!1,x=f&&a(f)?f:[]):x=f&&i(f)?f:{},u(S,{name:d,newValue:l(N,x,g)})):typeof g<"u"&&u(S,{name:d,newValue:g}));return S},q0}var Cf=wf();const Y0=zs(Cf);function Sa(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function _f(){const e=[],t={run:r,use:n};return t;function r(...a){let i=-1;const u=a.pop();if(typeof u!="function")throw new TypeError("Expected function as last argument, not "+u);s(null,...a);function s(l,...c){const d=e[++i];let f=-1;if(l){u(l);return}for(;++fu.length;let l;s&&u.push(a);try{l=e.apply(this,u)}catch(c){const d=c;if(s&&r)throw d;return a(d)}s||(l&&l.then&&typeof l.then=="function"?l.then(i,a):l instanceof Error?a(l):i(l))}function a(u,...s){r||(r=!0,t(u,...s))}function i(u){a(null,u)}}const At={basename:Nf,dirname:Df,extname:Of,join:Lf,sep:"/"};function Nf(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');An(e);let r=0,n=-1,a=e.length,i;if(t===void 0||t.length===0||t.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else n<0&&(i=!0,n=a+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let u=-1,s=t.length-1;for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else u<0&&(i=!0,u=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(n=a):(s=-1,n=u));return r===n?n=u:n<0&&(n=e.length),e.slice(r,n)}function Df(e){if(An(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function Of(e){An(e);let t=e.length,r=-1,n=0,a=-1,i=0,u;for(;t--;){const s=e.codePointAt(t);if(s===47){if(u){n=t+1;break}continue}r<0&&(u=!0,r=t+1),s===46?a<0?a=t:i!==1&&(i=1):a>-1&&(i=-1)}return a<0||r<0||i===0||i===1&&a===r-1&&a===n+1?"":e.slice(a,r)}function Lf(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function Mf(e,t){let r="",n=0,a=-1,i=0,u=-1,s,l;for(;++u<=e.length;){if(u2){if(l=r.lastIndexOf("/"),l!==r.length-1){l<0?(r="",n=0):(r=r.slice(0,l),n=r.length-1-r.lastIndexOf("/")),a=u,i=0;continue}}else if(r.length>0){r="",n=0,a=u,i=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(a+1,u):r=e.slice(a+1,u),n=u-a-1;a=u,i=0}else s===46&&i>-1?i++:i=-1}return r}function An(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Pf={cwd:Bf};function Bf(){return"/"}function wa(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function Ff(e){if(typeof e=="string")e=new URL(e);else if(!wa(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return Hf(e)}function Hf(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r0){let[p,...x]=d;const S=n[g][1];Sa(S)&&Sa(p)&&(p=Y0(!0,S,p)),n[g]=[c,p,...x]}}}}const Yf=new hi().freeze();function W0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function X0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function $0(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Tu(e){if(!Sa(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function xu(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Bn(e){return Gf(e)?e:new Al(e)}function Gf(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function Vf(e){return typeof e=="string"||jf(e)}function jf(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Wf="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",yu=[],vu={allowDangerousHtml:!0},Xf=/^(https?|ircs?|mailto|xmpp)$/i,$f=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Qf(e){const t=Kf(e),r=Jf(e);return Zf(t.runSync(t.parse(r),r),e)}function Kf(e){const t=e.rehypePlugins||yu,r=e.remarkPlugins||yu,n=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...vu}:vu;return Yf().use(Dd).use(r).use(Sf,n).use(t)}function Jf(e){const t=e.children||"",r=new Al;return typeof t=="string"&&(r.value=t),r}function Zf(e,t){const r=t.allowedElements,n=t.allowElement,a=t.components,i=t.disallowedElements,u=t.skipHtml,s=t.unwrapDisallowed,l=t.urlTransform||em;for(const d of $f)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+Wf+d.id,void 0);return b0(e,c),m1(e,{Fragment:pe.Fragment,components:a,ignoreInvalidStyle:!0,jsx:pe.jsx,jsxs:pe.jsxs,passKeys:!0,passNode:!0});function c(d,f,g){if(d.type==="raw"&&g&&typeof f=="number")return u?g.children.splice(f,1):g.children[f]={type:"text",value:d.value},f;if(d.type==="element"){let p;for(p in H0)if(Object.hasOwn(H0,p)&&Object.hasOwn(d.properties,p)){const x=d.properties[p],S=H0[p];(S===null||S.includes(d.tagName))&&(d.properties[p]=l(String(x||""),p,d))}}if(d.type==="element"){let p=r?!r.includes(d.tagName):i?i.includes(d.tagName):!1;if(!p&&n&&typeof f=="number"&&(p=!n(d,f,g)),p&&g&&typeof f=="number")return s&&d.children?g.children.splice(f,1,...d.children):g.children.splice(f,1),f}}}function em(e){const t=e.indexOf(":"),r=e.indexOf("?"),n=e.indexOf("#"),a=e.indexOf("/");return t===-1||a!==-1&&t>a||r!==-1&&t>r||n!==-1&&t>n||Xf.test(e.slice(0,t))?e:""}function Au(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let n=0,a=r.indexOf(t);for(;a!==-1;)n++,a=r.indexOf(t,a+t.length);return n}function tm(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function rm(e,t,r){const a=vn((r||{}).ignore||[]),i=nm(t);let u=-1;for(;++u0?{type:"text",value:L}:void 0),L===!1?g.lastIndex=W+1:(x!==W&&N.push({type:"text",value:c.value.slice(x,W)}),Array.isArray(L)?N.push(...L):L&&N.push(L),x=W+M[0].length,_=!0),!g.global)break;M=g.exec(c.value)}return _?(x?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],n=r.indexOf(")");const a=Au(e,"(");let i=Au(e,")");for(;n!==-1&&a>i;)e+=r.slice(0,n+1),r=r.slice(n+1),n=r.indexOf(")"),i++;return[e,r]}function kl(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||pr(r)||f0(r))&&(!t||r!==47)}Sl.peek=wm;function Em(){this.buffer()}function Tm(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function xm(){this.buffer()}function ym(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function vm(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Am(e){this.exit(e)}function km(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Sm(e){this.exit(e)}function wm(){return"["}function Sl(e,t,r,n){const a=r.createTracker(n);let i=a.move("[^");const u=r.enter("footnoteReference"),s=r.enter("reference");return i+=a.move(r.safe(r.associationId(e),{after:"]",before:i})),s(),u(),i+=a.move("]"),i}function Cm(){return{enter:{gfmFootnoteCallString:Em,gfmFootnoteCall:Tm,gfmFootnoteDefinitionLabelString:xm,gfmFootnoteDefinition:ym},exit:{gfmFootnoteCallString:vm,gfmFootnoteCall:Am,gfmFootnoteDefinitionLabelString:km,gfmFootnoteDefinition:Sm}}}function _m(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:Sl},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(n,a,i,u){const s=i.createTracker(u);let l=s.move("[^");const c=i.enter("footnoteDefinition"),d=i.enter("label");return l+=s.move(i.safe(i.associationId(n),{before:l,after:"]"})),d(),l+=s.move("]:"),n.children&&n.children.length>0&&(s.shift(4),l+=s.move((t?` -`:" ")+i.indentLines(i.containerFlow(n,s.current()),t?wl:Im))),c(),l}}function Im(e,t,r){return t===0?e:wl(e,t,r)}function wl(e,t,r){return(r?"":" ")+e}const Nm=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Cl.peek=Mm;function Dm(){return{canContainEols:["delete"],enter:{strikethrough:Lm},exit:{strikethrough:Rm}}}function Om(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Nm}],handlers:{delete:Cl}}}function Lm(e){this.enter({type:"delete",children:[]},e)}function Rm(e){this.exit(e)}function Cl(e,t,r,n){const a=r.createTracker(n),i=r.enter("strikethrough");let u=a.move("~~");return u+=r.containerPhrasing(e,{...a.current(),before:u,after:"~"}),u+=a.move("~~"),i(),u}function Mm(){return"~"}function Pm(e){return e.length}function Bm(e,t){const r=t||{},n=(r.align||[]).concat(),a=r.stringLength||Pm,i=[],u=[],s=[],l=[];let c=0,d=-1;for(;++dc&&(c=e[d].length);++_l[_])&&(l[_]=M)}S.push(N)}u[d]=S,s[d]=D}let f=-1;if(typeof n=="object"&&"length"in n)for(;++fl[f]&&(l[f]=N),p[f]=N),g[f]=M}u.splice(1,0,g),s.splice(1,0,p),d=-1;const x=[];for(;++d "),i.shift(2);const u=r.indentLines(r.containerFlow(e,i.current()),zm);return a(),u}function zm(e,t,r){return">"+(r?"":" ")+e}function Um(e,t){return wu(e,t.inConstruct,!0)&&!wu(e,t.notInConstruct,!1)}function wu(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let n=-1;for(;++nu&&(u=i):i=1,a=n+t.length,n=r.indexOf(t,a);return u}function qm(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Ym(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function Gm(e,t,r,n){const a=Ym(r),i=e.value||"",u=a==="`"?"GraveAccent":"Tilde";if(qm(e,r)){const f=r.enter("codeIndented"),g=r.indentLines(i,Vm);return f(),g}const s=r.createTracker(n),l=a.repeat(Math.max(Il(i,a)+1,3)),c=r.enter("codeFenced");let d=s.move(l);if(e.lang){const f=r.enter(`codeFencedLang${u}`);d+=s.move(r.safe(e.lang,{before:d,after:" ",encode:["`"],...s.current()})),f()}if(e.lang&&e.meta){const f=r.enter(`codeFencedMeta${u}`);d+=s.move(" "),d+=s.move(r.safe(e.meta,{before:d,after:` -`,encode:["`"],...s.current()})),f()}return d+=s.move(` -`),i&&(d+=s.move(i+` -`)),d+=s.move(l),c(),d}function Vm(e,t,r){return(r?"":" ")+e}function di(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function jm(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("definition");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("[");return c+=l.move(r.safe(r.associationId(e),{before:c,after:"]",...l.current()})),c+=l.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":` -`,...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),u(),c}function Wm(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function pn(e){return"&#x"+e.toString(16).toUpperCase()+";"}function t0(e,t,r){const n=Ir(e),a=Ir(t);return n===void 0?a===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:n===1?a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Nl.peek=Xm;function Nl(e,t,r,n){const a=Wm(r),i=r.enter("emphasis"),u=r.createTracker(n),s=u.move(a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function Xm(e,t,r){return r.options.emphasis||"*"}function $m(e,t){let r=!1;return b0(e,function(n){if("value"in n&&/\r?\n|\r/.test(n.value)||n.type==="break")return r=!0,Aa}),!!((!e.depth||e.depth<3)&&ni(e)&&(t.options.setext||r))}function Qm(e,t,r,n){const a=Math.max(Math.min(6,e.depth||1),1),i=r.createTracker(n);if($m(e,r)){const d=r.enter("headingSetext"),f=r.enter("phrasing"),g=r.containerPhrasing(e,{...i.current(),before:` -`,after:` -`});return f(),d(),g+` -`+(a===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` -`))+1))}const u="#".repeat(a),s=r.enter("headingAtx"),l=r.enter("phrasing");i.move(u+" ");let c=r.containerPhrasing(e,{before:"# ",after:` -`,...i.current()});return/^[\t ]/.test(c)&&(c=pn(c.charCodeAt(0))+c.slice(1)),c=c?u+" "+c:u,r.options.closeAtx&&(c+=" "+u),l(),s(),c}Dl.peek=Km;function Dl(e){return e.value||""}function Km(){return"<"}Ol.peek=Jm;function Ol(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("image");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("![");return c+=l.move(r.safe(e.alt,{before:c,after:"]",...l.current()})),c+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),c+=l.move(")"),u(),c}function Jm(){return"!"}Ll.peek=Zm;function Ll(e,t,r,n){const a=e.referenceType,i=r.enter("imageReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("![");const c=r.safe(e.alt,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function Zm(){return"!"}Rl.peek=e2;function Rl(e,t,r){let n=e.value||"",a="`",i=-1;for(;new RegExp("(^|[^`])"+a+"([^`]|$)").test(n);)a+="`";for(/[^ \r\n]/.test(n)&&(/^[ \r\n]/.test(n)&&/[ \r\n]$/.test(n)||/^`|`$/.test(n))&&(n=" "+n+" ");++i\u007F]/.test(e.url))}Pl.peek=t2;function Pl(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.createTracker(n);let s,l;if(Ml(e,r)){const d=r.stack;r.stack=[],s=r.enter("autolink");let f=u.move("<");return f+=u.move(r.containerPhrasing(e,{before:f,after:">",...u.current()})),f+=u.move(">"),s(),r.stack=d,f}s=r.enter("link"),l=r.enter("label");let c=u.move("[");return c+=u.move(r.containerPhrasing(e,{before:c,after:"](",...u.current()})),c+=u.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=r.enter("destinationLiteral"),c+=u.move("<"),c+=u.move(r.safe(e.url,{before:c,after:">",...u.current()})),c+=u.move(">")):(l=r.enter("destinationRaw"),c+=u.move(r.safe(e.url,{before:c,after:e.title?" ":")",...u.current()}))),l(),e.title&&(l=r.enter(`title${i}`),c+=u.move(" "+a),c+=u.move(r.safe(e.title,{before:c,after:a,...u.current()})),c+=u.move(a),l()),c+=u.move(")"),s(),c}function t2(e,t,r){return Ml(e,r)?"<":"["}Bl.peek=r2;function Bl(e,t,r,n){const a=e.referenceType,i=r.enter("linkReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("[");const c=r.containerPhrasing(e,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function r2(){return"["}function fi(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function n2(e){const t=fi(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function a2(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Fl(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function i2(e,t,r,n){const a=r.enter("list"),i=r.bulletCurrent;let u=e.ordered?a2(r):fi(r);const s=e.ordered?u==="."?")":".":n2(r);let l=t&&r.bulletLastUsed?u===r.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((u==="*"||u==="-")&&d&&(!d.children||!d.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(l=!0),Fl(r)===u&&d){let f=-1;for(;++f-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+i);let u=i.length+1;(a==="tab"||a==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(u=Math.ceil(u/4)*4);const s=r.createTracker(n);s.move(i+" ".repeat(u-i.length)),s.shift(u);const l=r.enter("listItem"),c=r.indentLines(r.containerFlow(e,s.current()),d);return l(),c;function d(f,g,p){return g?(p?"":" ".repeat(u))+f:(p?i:i+" ".repeat(u-i.length))+f}}function l2(e,t,r,n){const a=r.enter("paragraph"),i=r.enter("phrasing"),u=r.containerPhrasing(e,n);return i(),a(),u}const o2=vn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function c2(e,t,r,n){return(e.children.some(function(u){return o2(u)})?r.containerPhrasing:r.containerFlow).call(r,e,n)}function h2(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}Hl.peek=d2;function Hl(e,t,r,n){const a=h2(r),i=r.enter("strong"),u=r.createTracker(n),s=u.move(a+a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a+a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function d2(e,t,r){return r.options.strong||"*"}function f2(e,t,r,n){return r.safe(e.value,n)}function m2(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function p2(e,t,r){const n=(Fl(r)+(r.options.ruleSpaces?" ":"")).repeat(m2(r));return r.options.ruleSpaces?n.slice(0,-1):n}const zl={blockquote:Hm,break:Cu,code:Gm,definition:jm,emphasis:Nl,hardBreak:Cu,heading:Qm,html:Dl,image:Ol,imageReference:Ll,inlineCode:Rl,link:Pl,linkReference:Bl,list:i2,listItem:s2,paragraph:l2,root:c2,strong:Hl,text:f2,thematicBreak:p2};function g2(){return{enter:{table:b2,tableData:_u,tableHeader:_u,tableRow:T2},exit:{codeText:x2,table:E2,tableData:Z0,tableHeader:Z0,tableRow:Z0}}}function b2(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function E2(e){this.exit(e),this.data.inTable=void 0}function T2(e){this.enter({type:"tableRow",children:[]},e)}function Z0(e){this.exit(e)}function _u(e){this.enter({type:"tableCell",children:[]},e)}function x2(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,y2));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function y2(e,t){return t==="|"?t:e}function v2(e){const t=e||{},r=t.tableCellPadding,n=t.tablePipeAlign,a=t.stringLength,i=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:u,tableCell:l,tableRow:s}};function u(p,x,S,D){return c(d(p,S,D),p.align)}function s(p,x,S,D){const _=f(p,S,D),N=c([_]);return N.slice(0,N.indexOf(` -`))}function l(p,x,S,D){const _=S.enter("tableCell"),N=S.enter("phrasing"),M=S.containerPhrasing(p,{...D,before:i,after:i});return N(),_(),M}function c(p,x){return Bm(p,{align:x,alignDelimiters:n,padding:r,stringLength:a})}function d(p,x,S){const D=p.children;let _=-1;const N=[],M=x.enter("table");for(;++_0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const z2={tokenize:X2,partial:!0};function U2(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:V2,continuation:{tokenize:j2},exit:W2}},text:{91:{name:"gfmFootnoteCall",tokenize:G2},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:q2,resolveTo:Y2}}}}function q2(e,t,r){const n=this;let a=n.events.length;const i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let u;for(;a--;){const l=n.events[a][1];if(l.type==="labelImage"){u=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!u||!u._balanced)return r(l);const c=xt(n.sliceSerialize({start:u.end,end:n.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?r(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),t(l))}}function Y2(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const n={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},s=[e[r+1],e[r+2],["enter",n,t],e[r+3],e[r+4],["enter",a,t],["exit",a,t],["enter",i,t],["enter",u,t],["exit",u,t],["exit",i,t],e[e.length-2],e[e.length-1],["exit",n,t]];return e.splice(r,e.length-r+1,...s),e}function G2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i=0,u;return s;function s(f){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),l}function l(f){return f!==94?r(f):(e.enter("gfmFootnoteCallMarker"),e.consume(f),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(f){if(i>999||f===93&&!u||f===null||f===91||ve(f))return r(f);if(f===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return a.includes(xt(n.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(f)}return ve(f)||(u=!0),i++,e.consume(f),f===92?d:c}function d(f){return f===91||f===92||f===93?(e.consume(f),i++,c):c(f)}}function V2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i,u=0,s;return l;function l(x){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(x){return x===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):r(x)}function d(x){if(u>999||x===93&&!s||x===null||x===91||ve(x))return r(x);if(x===93){e.exit("chunkString");const S=e.exit("gfmFootnoteDefinitionLabelString");return i=xt(n.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return ve(x)||(s=!0),u++,e.consume(x),x===92?f:d}function f(x){return x===91||x===92||x===93?(e.consume(x),u++,d):d(x)}function g(x){return x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),a.includes(i)||a.push(i),fe(e,p,"gfmFootnoteDefinitionWhitespace")):r(x)}function p(x){return t(x)}}function j2(e,t,r){return e.check(yn,t,e.attempt(z2,t,r))}function W2(e){e.exit("gfmFootnoteDefinition")}function X2(e,t,r){const n=this;return fe(e,a,"gfmFootnoteDefinitionIndent",5);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="gfmFootnoteDefinitionIndent"&&u[2].sliceSerialize(u[1],!0).length===4?t(i):r(i)}}function $2(e){let r=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:i,resolveAll:a};return r==null&&(r=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function a(u,s){let l=-1;for(;++l1?l(x):(u.consume(x),f++,p);if(f<2&&!r)return l(x);const D=u.exit("strikethroughSequenceTemporary"),_=Ir(x);return D._open=!_||_===2&&!!S,D._close=!S||S===2&&!!_,s(x)}}}class Q2{constructor(){this.map=[]}add(t,r,n){K2(this,t,r,n)}consume(t){if(this.map.sort(function(i,u){return i[0]-u[0]}),this.map.length===0)return;let r=this.map.length;const n=[];for(;r>0;)r-=1,n.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];n.push(t.slice()),t.length=0;let a=n.pop();for(;a;){for(const i of a)t.push(i);a=n.pop()}this.map.length=0}}function K2(e,t,r,n){let a=0;if(!(r===0&&n.length===0)){for(;a-1;){const ne=n.events[J][1].type;if(ne==="lineEnding"||ne==="linePrefix")J--;else break}const Q=J>-1?n.events[J][1].type:null,be=Q==="tableHead"||Q==="tableRow"?L:l;return be===L&&n.parser.lazy[n.now().line]?r(R):be(R)}function l(R){return e.enter("tableHead"),e.enter("tableRow"),c(R)}function c(R){return R===124||(u=!0,i+=1),d(R)}function d(R){return R===null?r(R):ae(R)?i>1?(i=0,n.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),p):r(R):ge(R)?fe(e,d,"whitespace")(R):(i+=1,u&&(u=!1,a+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),u=!0,d):(e.enter("data"),f(R)))}function f(R){return R===null||R===124||ve(R)?(e.exit("data"),d(R)):(e.consume(R),R===92?g:f)}function g(R){return R===92||R===124?(e.consume(R),f):f(R)}function p(R){return n.interrupt=!1,n.parser.lazy[n.now().line]?r(R):(e.enter("tableDelimiterRow"),u=!1,ge(R)?fe(e,x,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):x(R))}function x(R){return R===45||R===58?D(R):R===124?(u=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),S):j(R)}function S(R){return ge(R)?fe(e,D,"whitespace")(R):D(R)}function D(R){return R===58?(i+=1,u=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),_):R===45?(i+=1,_(R)):R===null||ae(R)?W(R):j(R)}function _(R){return R===45?(e.enter("tableDelimiterFiller"),N(R)):j(R)}function N(R){return R===45?(e.consume(R),N):R===58?(u=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),M):(e.exit("tableDelimiterFiller"),M(R))}function M(R){return ge(R)?fe(e,W,"whitespace")(R):W(R)}function W(R){return R===124?x(R):R===null||ae(R)?!u||a!==i?j(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):j(R)}function j(R){return r(R)}function L(R){return e.enter("tableRow"),ee(R)}function ee(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),ee):R===null||ae(R)?(e.exit("tableRow"),t(R)):ge(R)?fe(e,ee,"whitespace")(R):(e.enter("data"),re(R))}function re(R){return R===null||R===124||ve(R)?(e.exit("data"),ee(R)):(e.consume(R),R===92?K:re)}function K(R){return R===92||R===124?(e.consume(R),re):re(R)}}function t4(e,t){let r=-1,n=!0,a=0,i=[0,0,0,0],u=[0,0,0,0],s=!1,l=0,c,d,f;const g=new Q2;for(;++rr[2]+1){const x=r[2]+1,S=r[3]-r[2]-1;e.add(x,S,[])}}e.add(r[3]+1,0,[["exit",f,t]])}return a!==void 0&&(i.end=Object.assign({},wr(t.events,a)),e.add(a,0,[["exit",i,t]]),i=void 0),i}function Nu(e,t,r,n,a){const i=[],u=wr(t.events,r);a&&(a.end=Object.assign({},u),i.push(["exit",a,t])),n.end=Object.assign({},u),i.push(["exit",n,t]),e.add(r+1,0,i)}function wr(e,t){const r=e[t],n=r[0]==="enter"?"start":"end";return r[1][n]}const r4={name:"tasklistCheck",tokenize:a4};function n4(){return{text:{91:r4}}}function a4(e,t,r){const n=this;return a;function a(l){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?r(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),i)}function i(l){return ve(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),u):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),u):r(l)}function u(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):r(l)}function s(l){return ae(l)?t(l):ge(l)?e.check({tokenize:i4},t,r)(l):r(l)}}function i4(e,t,r){return fe(e,n,"whitespace");function n(a){return a===null?r(a):t(a)}}function u4(e){return rl([D2(),U2(),$2(e),Z2(),n4()])}const s4={};function l4(e){const t=this,r=e||s4,n=t.data(),a=n.micromarkExtensions||(n.micromarkExtensions=[]),i=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),u=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);a.push(u4(r)),i.push(C2()),u.push(_2(r))}function o4(){return{enter:{mathFlow:e,mathFlowFenceMeta:t,mathText:i},exit:{mathFlow:a,mathFlowFence:n,mathFlowFenceMeta:r,mathFlowValue:s,mathText:u,mathTextData:s}};function e(l){const c={type:"element",tagName:"code",properties:{className:["language-math","math-display"]},children:[]};this.enter({type:"math",meta:null,value:"",data:{hName:"pre",hChildren:[c]}},l)}function t(){this.buffer()}function r(){const l=this.resume(),c=this.stack[this.stack.length-1];c.type,c.meta=l}function n(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function a(l){const c=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c;const f=d.data.hChildren[0];f.type,f.tagName,f.children.push({type:"text",value:c}),this.data.mathFlowInside=void 0}function i(l){this.enter({type:"inlineMath",value:"",data:{hName:"code",hProperties:{className:["language-math","math-inline"]},hChildren:[]}},l),this.buffer()}function u(l){const c=this.resume(),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c,d.data.hChildren.push({type:"text",value:c})}function s(l){this.config.enter.data.call(this,l),this.config.exit.data.call(this,l)}}function c4(e){let t=(e||{}).singleDollarTextMath;return t==null&&(t=!0),n.peek=a,{unsafe:[{character:"\r",inConstruct:"mathFlowMeta"},{character:` -`,inConstruct:"mathFlowMeta"},{character:"$",after:t?void 0:"\\$",inConstruct:"phrasing"},{character:"$",inConstruct:"mathFlowMeta"},{atBreak:!0,character:"$",after:"\\$"}],handlers:{math:r,inlineMath:n}};function r(i,u,s,l){const c=i.value||"",d=s.createTracker(l),f="$".repeat(Math.max(Il(c,"$")+1,2)),g=s.enter("mathFlow");let p=d.move(f);if(i.meta){const x=s.enter("mathFlowMeta");p+=d.move(s.safe(i.meta,{after:` -`,before:p,encode:["$"],...d.current()})),x()}return p+=d.move(` -`),c&&(p+=d.move(c+` -`)),p+=d.move(f),g(),p}function n(i,u,s){let l=i.value||"",c=1;for(t||c++;new RegExp("(^|[^$])"+"\\$".repeat(c)+"([^$]|$)").test(l);)c++;const d="$".repeat(c);/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^\$|\$$/.test(l))&&(l=" "+l+" ");let f=-1;for(;++f15?c="…"+s.slice(a-15,a):c=s.slice(0,a);var d;i+15e.replace(E4,"-$1").toLowerCase(),x4={"&":"&",">":">","<":"<",'"':""","'":"'"},y4=/[&><"']/g,Ve=e=>String(e).replace(y4,t=>x4[t]),$n=e=>e.type==="ordgroup"||e.type==="color"?e.body.length===1?$n(e.body[0]):e:e.type==="font"?$n(e.body):e,v4=new Set(["mathord","textord","atom"]),qt=e=>v4.has($n(e).type),A4=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},_a={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function k4(e){if(typeof e!="string")return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}function S4(e){if(e.default!==void 0)return e.default;var t=Array.isArray(e.type)?e.type[0]:e.type;return k4(t)}function w4(e,t,r,n){var a=r[t];e[t]=a!==void 0?n.processor?n.processor(a):a:S4(n)}class pi{constructor(t){t===void 0&&(t={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,t=t||{};for(var r of Object.keys(_a)){var n=_a[r];n&&w4(this,r,t,n)}}reportNonstrict(t,r,n){var a=this.strict;if(typeof a=="function"&&(a=a(t,r,n)),!(!a||a==="ignore")){if(a===!0||a==="error")throw new Y("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+t+"]"),n);a==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]"))}}useStrictBehavior(t,r,n){var a=this.strict;if(typeof a=="function")try{a=a(t,r,n)}catch{a="error"}return!a||a==="ignore"?!1:a===!0||a==="error"?!0:a==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]")),!1)}isTrusted(t){if("url"in t&&t.url&&!t.protocol){var r=A4(t.url);if(r==null)return!1;t.protocol=r}var n=typeof this.trust=="function"?this.trust(t):this.trust;return!!n}}class jt{constructor(t,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=n}sup(){return kt[C4[this.id]]}sub(){return kt[_4[this.id]]}fracNum(){return kt[I4[this.id]]}fracDen(){return kt[N4[this.id]]}cramp(){return kt[D4[this.id]]}text(){return kt[O4[this.id]]}isTight(){return this.size>=2}}var gi=0,r0=1,_r=2,Ht=3,gn=4,gt=5,Dr=6,Je=7,kt=[new jt(gi,0,!1),new jt(r0,0,!0),new jt(_r,1,!1),new jt(Ht,1,!0),new jt(gn,2,!1),new jt(gt,2,!0),new jt(Dr,3,!1),new jt(Je,3,!0)],C4=[gn,gt,gn,gt,Dr,Je,Dr,Je],_4=[gt,gt,gt,gt,Je,Je,Je,Je],I4=[_r,Ht,gn,gt,Dr,Je,Dr,Je],N4=[Ht,Ht,gt,gt,Je,Je,Je,Je],D4=[r0,r0,Ht,Ht,gt,gt,Je,Je],O4=[gi,r0,_r,Ht,_r,Ht,_r,Ht],oe={DISPLAY:kt[gi],TEXT:kt[_r],SCRIPT:kt[gn],SCRIPTSCRIPT:kt[Dr]},Ia=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function L4(e){for(var t=0;t=a[0]&&e<=a[1])return r.name}return null}var Qn=[];Ia.forEach(e=>e.blocks.forEach(t=>Qn.push(...t)));function $l(e){for(var t=0;t=Qn[t]&&e<=Qn[t+1])return!0;return!1}var Fe=e=>e+" "+e,kr=80,R4=function(t,r){return"M95,"+(622+t+r)+` -c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 -c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 -c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 -s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 -c69,-144,104.5,-217.7,106.5,-221 -l`+t/2.075+" -"+t+` -c5.3,-9.3,12,-14,20,-14 -H400000v`+(40+t)+`H845.2724 -s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 -c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},M4=function(t,r){return"M263,"+(601+t+r)+`c0.7,0,18,39.7,52,119 -c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 -c340,-704.7,510.7,-1060.3,512,-1067 -l`+t/2.084+" -"+t+` -c4.7,-7.3,11,-11,19,-11 -H40000v`+(40+t)+`H1012.3 -s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 -c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 -s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 -c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},P4=function(t,r){return"M983 "+(10+t+r)+` -l`+t/3.13+" -"+t+` -c4,-6.7,10,-10,18,-10 H400000v`+(40+t)+` -H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 -s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 -c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 -c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 -c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 -c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},B4=function(t,r){return"M424,"+(2398+t+r)+` -c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 -c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 -s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 -s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 -l`+t/4.223+" -"+t+`c4,-6.7,10,-10,18,-10 H400000 -v`+(40+t)+`H1014.6 -s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 -c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2z M`+(1001+t)+" "+r+` -h400000v`+(40+t)+"h-400000z"},F4=function(t,r){return"M473,"+(2713+t+r)+` -c339.3,-1799.3,509.3,-2700,510,-2702 l`+t/5.298+" -"+t+` -c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+t)+`H1017.7 -s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 -c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 -s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+t)+" "+r+"h400000v"+(40+t)+"H1017.7z"},H4=function(t){var r=t/2;return"M400000 "+t+" H0 L"+r+" 0 l65 45 L145 "+(t-80)+" H400000z"},z4=function(t,r,n){var a=n-54-r-t;return"M702 "+(t+r)+"H400000"+(40+t)+` -H742v`+a+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 -h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 -c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+r+"H400000v"+(40+t)+"H742z"},U4=function(t,r,n){r=1e3*r;var a="";switch(t){case"sqrtMain":a=R4(r,kr);break;case"sqrtSize1":a=M4(r,kr);break;case"sqrtSize2":a=P4(r,kr);break;case"sqrtSize3":a=B4(r,kr);break;case"sqrtSize4":a=F4(r,kr);break;case"sqrtTall":a=z4(r,kr,n)}return a},q4=function(t,r){switch(t){case"⎜":return Fe("M291 0 H417 V"+r+" H291z");case"∣":return Fe("M145 0 H188 V"+r+" H145z");case"∥":return Fe("M145 0 H188 V"+r+" H145z")+Fe("M367 0 H410 V"+r+" H367z");case"⎟":return Fe("M457 0 H583 V"+r+" H457z");case"⎢":return Fe("M319 0 H403 V"+r+" H319z");case"⎥":return Fe("M263 0 H347 V"+r+" H263z");case"⎪":return Fe("M384 0 H504 V"+r+" H384z");case"⏐":return Fe("M312 0 H355 V"+r+" H312z");case"‖":return Fe("M257 0 H300 V"+r+" H257z")+Fe("M478 0 H521 V"+r+" H478z");default:return""}},Ou={doubleleftarrow:`M262 157 -l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 - 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 - 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 -c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 - 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 --86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 --2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z -m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l --10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 - 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 --33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 --17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 --13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 -c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 --107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 - 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 --5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 -c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 - 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 - 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 - l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 --45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 - 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 - 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 - 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 --331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 -H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 - 435 0h399565z`,leftgroupunder:`M400000 262 -H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 - 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 --3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 --18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 --196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 - 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 --4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 --10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z -m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 - 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 - 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 --152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 - 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 --2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 -v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 --83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 --68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 - 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:Fe("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),leftbracketunder:Fe("M0 0 h120 V290 H399995 v120 H0z"),leftbracketover:Fe("M0 440 h120 V150 H399995 v-120 H0z"),leftmapsto:Fe("M40 281 V448H0V74H40V241H400000v40z"),leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 --.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 -c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 - 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:Fe("M0 50 h400000 v40H0z m0 194h40000v40H0z"),midbrace:`M200428 334 -c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 --53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 - 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 - 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 -c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 - 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 - 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 --5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 --320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z -m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 -60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 --451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z -m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 -c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 --480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z -m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 -85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 --707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z -m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 -c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 --16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 - 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 - 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 --40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 - 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l --6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 -s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 -c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 - 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 --174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 - 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 - 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 --3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 --10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 - 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 --18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 - 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z -m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 - 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 --7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 --27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 - 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 - 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 --64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z -m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 - 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 --13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 - 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:Fe("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),rightbracketunder:Fe("M399995 0 h-120 V290 H0 v120 H400000z"),rightbracketover:Fe("M399995 440 h-120 V150 H0 v-120 H399995z"),rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 - 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 --52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 --167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 - 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 --70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 --40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 --37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 - 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 -c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 - 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 - 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 --19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 - 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 --2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 - 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 - 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 --68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 --8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 - 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 -c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 - 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 --11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 - 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 - 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 - -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 --11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 - 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 - 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 - -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 -3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 -10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 --1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 --7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 -H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 -c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 -c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, --5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 -c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 -c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 -s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 -121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 -s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 -c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z -M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 --27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 -13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 --84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 --119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 -151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 -c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 -c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 -c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z -M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, -1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, --152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z -M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Y4=function(t,r){switch(t){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 v84 h347 v-84 -H403z M403 1759 V0 H319 V1759 v`+r+" v1759 v84 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z -M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z -M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z -M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z -M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 -c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, --36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, -949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 -c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, --544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 -l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, --210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, -63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 -c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` -c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 -c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 -c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 -c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 -l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};function G4(e){return"toText"in e}class Br{constructor(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(t){return this.classes.includes(t)}toNode(){for(var t=document.createDocumentFragment(),r=0;r{if(G4(t))return t.toText();throw new Error("Expected MathDomNode with toText, got "+t.constructor.name)}).join("")}}var Na={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},V4={ex:!0,em:!0,mu:!0},Ql=function(t){return typeof t!="string"&&(t=t.unit),t in Na||t in V4||t==="ex"},Ie=function(t,r){var n;if(t.unit in Na)n=Na[t.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(t.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var a;if(r.style.isTight()?a=r.havingStyle(r.style.text()):a=r,t.unit==="ex")n=a.fontMetrics().xHeight;else if(t.unit==="em")n=a.fontMetrics().quad;else throw new Y("Invalid unit: '"+t.unit+"'");a!==r&&(n*=a.sizeMultiplier/r.sizeMultiplier)}return Math.min(t.number*n,r.maxSize)},V=function(t){return+t.toFixed(4)+"em"},Jt=function(t){return t.filter(r=>r).join(" ")},bi=function(t){var r="";for(var n of Object.keys(t)){var a=t[n];a!==void 0&&(r+=T4(n)+":"+a+";")}return r},Kl=function(t,r,n){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var a=r.getColor();a&&(this.style.color=a)}},Jl=function(t){var r=document.createElement(t);r.className=Jt(this.classes),Object.assign(r.style,this.style);for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,Zl=function(t){var r="<"+t;this.classes.length&&(r+=' class="'+Ve(Jt(this.classes))+'"');var n=bi(this.style);n&&(r+=' style="'+Ve(n)+'"');for(var a of Object.keys(this.attributes)){if(j4.test(a))throw new Y("Invalid attribute name '"+a+"'");r+=" "+a+'="'+Ve(this.attributes[a])+'"'}r+=">";for(var i=0;i",r};class Fr{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,this.italic=void 0,Kl.call(this,t,n,a),this.children=r||[]}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"span")}toMarkup(){return Zl.call(this,"span")}}class E0{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Kl.call(this,r,a),this.children=n||[],this.setAttribute("href",t)}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"a")}toMarkup(){return Zl.call(this,"a")}}class W4{constructor(t,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=t,this.classes=["mord"],this.height=0,this.depth=0,this.maxFontSize=0,this.style=n}hasClass(t){return this.classes.includes(t)}toNode(){var t=document.createElement("img");return t.src=this.src,t.alt=this.alt,t.className="mord",Object.assign(t.style,this.style),t}toMarkup(){var t=''+Ve(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=V(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=Jt(this.classes)),Object.keys(this.style).length>0&&(r=r||document.createElement("span"),Object.assign(r.style,this.style)),r?(r.appendChild(t),r):t}toMarkup(){var t=!1,r="0&&(n+="margin-right:"+V(this.italic)+";"),n+=bi(this.style),n&&(t=!0,r+=' style="'+Ve(n)+'"');var a=Ve(this.text);return t?(r+=">",r+=a,r+="",r):a}}class zt{constructor(t,r){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=r||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"svg");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a':''}}class Da{constructor(t){this.attributes=void 0,this.attributes=t||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"line");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var t=" but got "+String(e)+".")}var K4=e=>e instanceof Fr||e instanceof E0||e instanceof Br,wt={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Hn={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Lu={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function J4(e,t){wt[e]=t}function Ei(e,t,r){if(!wt[t])throw new Error("Font metrics not found for font: "+t+".");var n=e.charCodeAt(0),a=wt[t][n];if(!a&&e[0]in Lu&&(n=Lu[e[0]].charCodeAt(0),a=wt[t][n]),!a&&r==="text"&&$l(n)&&(a=wt[t][77]),a)return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}var ea={};function Z4(e){var t;if(e>=5?t=0:e>=3?t=1:t=2,!ea[t]){var r=ea[t]={cssEmPerMu:Hn.quad[t]/18};for(var n in Hn)Hn.hasOwnProperty(n)&&(r[n]=Hn[n][t])}return ea[t]}var we={math:{},text:{}};function h(e,t,r,n,a,i){we[e][a]={font:t,group:r,replace:n},i&&n&&(we[e][n]=we[e][a])}var m="math",F="text",b="main",v="ams",Ce="accent-token",te="bin",Ze="close",Hr="inner",ie="mathord",Pe="op-token",ht="open",kn="punct",A="rel",Yt="spacing",I="textord";h(m,b,A,"≡","\\equiv",!0);h(m,b,A,"≺","\\prec",!0);h(m,b,A,"≻","\\succ",!0);h(m,b,A,"∼","\\sim",!0);h(m,b,A,"⊥","\\perp");h(m,b,A,"⪯","\\preceq",!0);h(m,b,A,"⪰","\\succeq",!0);h(m,b,A,"≃","\\simeq",!0);h(m,b,A,"∣","\\mid",!0);h(m,b,A,"≪","\\ll",!0);h(m,b,A,"≫","\\gg",!0);h(m,b,A,"≍","\\asymp",!0);h(m,b,A,"∥","\\parallel");h(m,b,A,"⋈","\\bowtie",!0);h(m,b,A,"⌣","\\smile",!0);h(m,b,A,"⊑","\\sqsubseteq",!0);h(m,b,A,"⊒","\\sqsupseteq",!0);h(m,b,A,"≐","\\doteq",!0);h(m,b,A,"⌢","\\frown",!0);h(m,b,A,"∋","\\ni",!0);h(m,b,A,"∝","\\propto",!0);h(m,b,A,"⊢","\\vdash",!0);h(m,b,A,"⊣","\\dashv",!0);h(m,b,A,"∋","\\owns");h(m,b,kn,".","\\ldotp");h(m,b,kn,"⋅","\\cdotp");h(m,b,kn,"⋅","·");h(F,b,I,"⋅","·");h(m,b,I,"#","\\#");h(F,b,I,"#","\\#");h(m,b,I,"&","\\&");h(F,b,I,"&","\\&");h(m,b,I,"ℵ","\\aleph",!0);h(m,b,I,"∀","\\forall",!0);h(m,b,I,"ℏ","\\hbar",!0);h(m,b,I,"∃","\\exists",!0);h(m,b,I,"∇","\\nabla",!0);h(m,b,I,"♭","\\flat",!0);h(m,b,I,"ℓ","\\ell",!0);h(m,b,I,"♮","\\natural",!0);h(m,b,I,"♣","\\clubsuit",!0);h(m,b,I,"℘","\\wp",!0);h(m,b,I,"♯","\\sharp",!0);h(m,b,I,"♢","\\diamondsuit",!0);h(m,b,I,"ℜ","\\Re",!0);h(m,b,I,"♡","\\heartsuit",!0);h(m,b,I,"ℑ","\\Im",!0);h(m,b,I,"♠","\\spadesuit",!0);h(m,b,I,"§","\\S",!0);h(F,b,I,"§","\\S");h(m,b,I,"¶","\\P",!0);h(F,b,I,"¶","\\P");h(m,b,I,"†","\\dag");h(F,b,I,"†","\\dag");h(F,b,I,"†","\\textdagger");h(m,b,I,"‡","\\ddag");h(F,b,I,"‡","\\ddag");h(F,b,I,"‡","\\textdaggerdbl");h(m,b,Ze,"⎱","\\rmoustache",!0);h(m,b,ht,"⎰","\\lmoustache",!0);h(m,b,Ze,"⟯","\\rgroup",!0);h(m,b,ht,"⟮","\\lgroup",!0);h(m,b,te,"∓","\\mp",!0);h(m,b,te,"⊖","\\ominus",!0);h(m,b,te,"⊎","\\uplus",!0);h(m,b,te,"⊓","\\sqcap",!0);h(m,b,te,"∗","\\ast");h(m,b,te,"⊔","\\sqcup",!0);h(m,b,te,"◯","\\bigcirc",!0);h(m,b,te,"∙","\\bullet",!0);h(m,b,te,"‡","\\ddagger");h(m,b,te,"≀","\\wr",!0);h(m,b,te,"⨿","\\amalg");h(m,b,te,"&","\\And");h(m,b,A,"⟵","\\longleftarrow",!0);h(m,b,A,"⇐","\\Leftarrow",!0);h(m,b,A,"⟸","\\Longleftarrow",!0);h(m,b,A,"⟶","\\longrightarrow",!0);h(m,b,A,"⇒","\\Rightarrow",!0);h(m,b,A,"⟹","\\Longrightarrow",!0);h(m,b,A,"↔","\\leftrightarrow",!0);h(m,b,A,"⟷","\\longleftrightarrow",!0);h(m,b,A,"⇔","\\Leftrightarrow",!0);h(m,b,A,"⟺","\\Longleftrightarrow",!0);h(m,b,A,"↦","\\mapsto",!0);h(m,b,A,"⟼","\\longmapsto",!0);h(m,b,A,"↗","\\nearrow",!0);h(m,b,A,"↩","\\hookleftarrow",!0);h(m,b,A,"↪","\\hookrightarrow",!0);h(m,b,A,"↘","\\searrow",!0);h(m,b,A,"↼","\\leftharpoonup",!0);h(m,b,A,"⇀","\\rightharpoonup",!0);h(m,b,A,"↙","\\swarrow",!0);h(m,b,A,"↽","\\leftharpoondown",!0);h(m,b,A,"⇁","\\rightharpoondown",!0);h(m,b,A,"↖","\\nwarrow",!0);h(m,b,A,"⇌","\\rightleftharpoons",!0);h(m,v,A,"≮","\\nless",!0);h(m,v,A,"","\\@nleqslant");h(m,v,A,"","\\@nleqq");h(m,v,A,"⪇","\\lneq",!0);h(m,v,A,"≨","\\lneqq",!0);h(m,v,A,"","\\@lvertneqq");h(m,v,A,"⋦","\\lnsim",!0);h(m,v,A,"⪉","\\lnapprox",!0);h(m,v,A,"⊀","\\nprec",!0);h(m,v,A,"⋠","\\npreceq",!0);h(m,v,A,"⋨","\\precnsim",!0);h(m,v,A,"⪹","\\precnapprox",!0);h(m,v,A,"≁","\\nsim",!0);h(m,v,A,"","\\@nshortmid");h(m,v,A,"∤","\\nmid",!0);h(m,v,A,"⊬","\\nvdash",!0);h(m,v,A,"⊭","\\nvDash",!0);h(m,v,A,"⋪","\\ntriangleleft");h(m,v,A,"⋬","\\ntrianglelefteq",!0);h(m,v,A,"⊊","\\subsetneq",!0);h(m,v,A,"","\\@varsubsetneq");h(m,v,A,"⫋","\\subsetneqq",!0);h(m,v,A,"","\\@varsubsetneqq");h(m,v,A,"≯","\\ngtr",!0);h(m,v,A,"","\\@ngeqslant");h(m,v,A,"","\\@ngeqq");h(m,v,A,"⪈","\\gneq",!0);h(m,v,A,"≩","\\gneqq",!0);h(m,v,A,"","\\@gvertneqq");h(m,v,A,"⋧","\\gnsim",!0);h(m,v,A,"⪊","\\gnapprox",!0);h(m,v,A,"⊁","\\nsucc",!0);h(m,v,A,"⋡","\\nsucceq",!0);h(m,v,A,"⋩","\\succnsim",!0);h(m,v,A,"⪺","\\succnapprox",!0);h(m,v,A,"≆","\\ncong",!0);h(m,v,A,"","\\@nshortparallel");h(m,v,A,"∦","\\nparallel",!0);h(m,v,A,"⊯","\\nVDash",!0);h(m,v,A,"⋫","\\ntriangleright");h(m,v,A,"⋭","\\ntrianglerighteq",!0);h(m,v,A,"","\\@nsupseteqq");h(m,v,A,"⊋","\\supsetneq",!0);h(m,v,A,"","\\@varsupsetneq");h(m,v,A,"⫌","\\supsetneqq",!0);h(m,v,A,"","\\@varsupsetneqq");h(m,v,A,"⊮","\\nVdash",!0);h(m,v,A,"⪵","\\precneqq",!0);h(m,v,A,"⪶","\\succneqq",!0);h(m,v,A,"","\\@nsubseteqq");h(m,v,te,"⊴","\\unlhd");h(m,v,te,"⊵","\\unrhd");h(m,v,A,"↚","\\nleftarrow",!0);h(m,v,A,"↛","\\nrightarrow",!0);h(m,v,A,"⇍","\\nLeftarrow",!0);h(m,v,A,"⇏","\\nRightarrow",!0);h(m,v,A,"↮","\\nleftrightarrow",!0);h(m,v,A,"⇎","\\nLeftrightarrow",!0);h(m,v,A,"△","\\vartriangle");h(m,v,I,"ℏ","\\hslash");h(m,v,I,"▽","\\triangledown");h(m,v,I,"◊","\\lozenge");h(m,v,I,"Ⓢ","\\circledS");h(m,v,I,"®","\\circledR");h(F,v,I,"®","\\circledR");h(m,v,I,"∡","\\measuredangle",!0);h(m,v,I,"∄","\\nexists");h(m,v,I,"℧","\\mho");h(m,v,I,"Ⅎ","\\Finv",!0);h(m,v,I,"⅁","\\Game",!0);h(m,v,I,"‵","\\backprime");h(m,v,I,"▲","\\blacktriangle");h(m,v,I,"▼","\\blacktriangledown");h(m,v,I,"■","\\blacksquare");h(m,v,I,"⧫","\\blacklozenge");h(m,v,I,"★","\\bigstar");h(m,v,I,"∢","\\sphericalangle",!0);h(m,v,I,"∁","\\complement",!0);h(m,v,I,"ð","\\eth",!0);h(F,b,I,"ð","ð");h(m,v,I,"╱","\\diagup");h(m,v,I,"╲","\\diagdown");h(m,v,I,"□","\\square");h(m,v,I,"□","\\Box");h(m,v,I,"◊","\\Diamond");h(m,v,I,"¥","\\yen",!0);h(F,v,I,"¥","\\yen",!0);h(m,v,I,"✓","\\checkmark",!0);h(F,v,I,"✓","\\checkmark");h(m,v,I,"ℶ","\\beth",!0);h(m,v,I,"ℸ","\\daleth",!0);h(m,v,I,"ℷ","\\gimel",!0);h(m,v,I,"ϝ","\\digamma",!0);h(m,v,I,"ϰ","\\varkappa");h(m,v,ht,"┌","\\@ulcorner",!0);h(m,v,Ze,"┐","\\@urcorner",!0);h(m,v,ht,"└","\\@llcorner",!0);h(m,v,Ze,"┘","\\@lrcorner",!0);h(m,v,A,"≦","\\leqq",!0);h(m,v,A,"⩽","\\leqslant",!0);h(m,v,A,"⪕","\\eqslantless",!0);h(m,v,A,"≲","\\lesssim",!0);h(m,v,A,"⪅","\\lessapprox",!0);h(m,v,A,"≊","\\approxeq",!0);h(m,v,te,"⋖","\\lessdot");h(m,v,A,"⋘","\\lll",!0);h(m,v,A,"≶","\\lessgtr",!0);h(m,v,A,"⋚","\\lesseqgtr",!0);h(m,v,A,"⪋","\\lesseqqgtr",!0);h(m,v,A,"≑","\\doteqdot");h(m,v,A,"≓","\\risingdotseq",!0);h(m,v,A,"≒","\\fallingdotseq",!0);h(m,v,A,"∽","\\backsim",!0);h(m,v,A,"⋍","\\backsimeq",!0);h(m,v,A,"⫅","\\subseteqq",!0);h(m,v,A,"⋐","\\Subset",!0);h(m,v,A,"⊏","\\sqsubset",!0);h(m,v,A,"≼","\\preccurlyeq",!0);h(m,v,A,"⋞","\\curlyeqprec",!0);h(m,v,A,"≾","\\precsim",!0);h(m,v,A,"⪷","\\precapprox",!0);h(m,v,A,"⊲","\\vartriangleleft");h(m,v,A,"⊴","\\trianglelefteq");h(m,v,A,"⊨","\\vDash",!0);h(m,v,A,"⊪","\\Vvdash",!0);h(m,v,A,"⌣","\\smallsmile");h(m,v,A,"⌢","\\smallfrown");h(m,v,A,"≏","\\bumpeq",!0);h(m,v,A,"≎","\\Bumpeq",!0);h(m,v,A,"≧","\\geqq",!0);h(m,v,A,"⩾","\\geqslant",!0);h(m,v,A,"⪖","\\eqslantgtr",!0);h(m,v,A,"≳","\\gtrsim",!0);h(m,v,A,"⪆","\\gtrapprox",!0);h(m,v,te,"⋗","\\gtrdot");h(m,v,A,"⋙","\\ggg",!0);h(m,v,A,"≷","\\gtrless",!0);h(m,v,A,"⋛","\\gtreqless",!0);h(m,v,A,"⪌","\\gtreqqless",!0);h(m,v,A,"≖","\\eqcirc",!0);h(m,v,A,"≗","\\circeq",!0);h(m,v,A,"≜","\\triangleq",!0);h(m,v,A,"∼","\\thicksim");h(m,v,A,"≈","\\thickapprox");h(m,v,A,"⫆","\\supseteqq",!0);h(m,v,A,"⋑","\\Supset",!0);h(m,v,A,"⊐","\\sqsupset",!0);h(m,v,A,"≽","\\succcurlyeq",!0);h(m,v,A,"⋟","\\curlyeqsucc",!0);h(m,v,A,"≿","\\succsim",!0);h(m,v,A,"⪸","\\succapprox",!0);h(m,v,A,"⊳","\\vartriangleright");h(m,v,A,"⊵","\\trianglerighteq");h(m,v,A,"⊩","\\Vdash",!0);h(m,v,A,"∣","\\shortmid");h(m,v,A,"∥","\\shortparallel");h(m,v,A,"≬","\\between",!0);h(m,v,A,"⋔","\\pitchfork",!0);h(m,v,A,"∝","\\varpropto");h(m,v,A,"◀","\\blacktriangleleft");h(m,v,A,"∴","\\therefore",!0);h(m,v,A,"∍","\\backepsilon");h(m,v,A,"▶","\\blacktriangleright");h(m,v,A,"∵","\\because",!0);h(m,v,A,"⋘","\\llless");h(m,v,A,"⋙","\\gggtr");h(m,v,te,"⊲","\\lhd");h(m,v,te,"⊳","\\rhd");h(m,v,A,"≂","\\eqsim",!0);h(m,b,A,"⋈","\\Join");h(m,v,A,"≑","\\Doteq",!0);h(m,v,te,"∔","\\dotplus",!0);h(m,v,te,"∖","\\smallsetminus");h(m,v,te,"⋒","\\Cap",!0);h(m,v,te,"⋓","\\Cup",!0);h(m,v,te,"⩞","\\doublebarwedge",!0);h(m,v,te,"⊟","\\boxminus",!0);h(m,v,te,"⊞","\\boxplus",!0);h(m,v,te,"⋇","\\divideontimes",!0);h(m,v,te,"⋉","\\ltimes",!0);h(m,v,te,"⋊","\\rtimes",!0);h(m,v,te,"⋋","\\leftthreetimes",!0);h(m,v,te,"⋌","\\rightthreetimes",!0);h(m,v,te,"⋏","\\curlywedge",!0);h(m,v,te,"⋎","\\curlyvee",!0);h(m,v,te,"⊝","\\circleddash",!0);h(m,v,te,"⊛","\\circledast",!0);h(m,v,te,"⋅","\\centerdot");h(m,v,te,"⊺","\\intercal",!0);h(m,v,te,"⋒","\\doublecap");h(m,v,te,"⋓","\\doublecup");h(m,v,te,"⊠","\\boxtimes",!0);h(m,v,A,"⇢","\\dashrightarrow",!0);h(m,v,A,"⇠","\\dashleftarrow",!0);h(m,v,A,"⇇","\\leftleftarrows",!0);h(m,v,A,"⇆","\\leftrightarrows",!0);h(m,v,A,"⇚","\\Lleftarrow",!0);h(m,v,A,"↞","\\twoheadleftarrow",!0);h(m,v,A,"↢","\\leftarrowtail",!0);h(m,v,A,"↫","\\looparrowleft",!0);h(m,v,A,"⇋","\\leftrightharpoons",!0);h(m,v,A,"↶","\\curvearrowleft",!0);h(m,v,A,"↺","\\circlearrowleft",!0);h(m,v,A,"↰","\\Lsh",!0);h(m,v,A,"⇈","\\upuparrows",!0);h(m,v,A,"↿","\\upharpoonleft",!0);h(m,v,A,"⇃","\\downharpoonleft",!0);h(m,b,A,"⊶","\\origof",!0);h(m,b,A,"⊷","\\imageof",!0);h(m,v,A,"⊸","\\multimap",!0);h(m,v,A,"↭","\\leftrightsquigarrow",!0);h(m,v,A,"⇉","\\rightrightarrows",!0);h(m,v,A,"⇄","\\rightleftarrows",!0);h(m,v,A,"↠","\\twoheadrightarrow",!0);h(m,v,A,"↣","\\rightarrowtail",!0);h(m,v,A,"↬","\\looparrowright",!0);h(m,v,A,"↷","\\curvearrowright",!0);h(m,v,A,"↻","\\circlearrowright",!0);h(m,v,A,"↱","\\Rsh",!0);h(m,v,A,"⇊","\\downdownarrows",!0);h(m,v,A,"↾","\\upharpoonright",!0);h(m,v,A,"⇂","\\downharpoonright",!0);h(m,v,A,"⇝","\\rightsquigarrow",!0);h(m,v,A,"⇝","\\leadsto");h(m,v,A,"⇛","\\Rrightarrow",!0);h(m,v,A,"↾","\\restriction");h(m,b,I,"‘","`");h(m,b,I,"$","\\$");h(F,b,I,"$","\\$");h(F,b,I,"$","\\textdollar");h(m,b,I,"%","\\%");h(F,b,I,"%","\\%");h(m,b,I,"_","\\_");h(F,b,I,"_","\\_");h(F,b,I,"_","\\textunderscore");h(m,b,I,"∠","\\angle",!0);h(m,b,I,"∞","\\infty",!0);h(m,b,I,"′","\\prime");h(m,b,I,"△","\\triangle");h(m,b,I,"Γ","\\Gamma",!0);h(m,b,I,"Δ","\\Delta",!0);h(m,b,I,"Θ","\\Theta",!0);h(m,b,I,"Λ","\\Lambda",!0);h(m,b,I,"Ξ","\\Xi",!0);h(m,b,I,"Π","\\Pi",!0);h(m,b,I,"Σ","\\Sigma",!0);h(m,b,I,"Υ","\\Upsilon",!0);h(m,b,I,"Φ","\\Phi",!0);h(m,b,I,"Ψ","\\Psi",!0);h(m,b,I,"Ω","\\Omega",!0);h(m,b,I,"A","Α");h(m,b,I,"B","Β");h(m,b,I,"E","Ε");h(m,b,I,"Z","Ζ");h(m,b,I,"H","Η");h(m,b,I,"I","Ι");h(m,b,I,"K","Κ");h(m,b,I,"M","Μ");h(m,b,I,"N","Ν");h(m,b,I,"O","Ο");h(m,b,I,"P","Ρ");h(m,b,I,"T","Τ");h(m,b,I,"X","Χ");h(m,b,I,"¬","\\neg",!0);h(m,b,I,"¬","\\lnot");h(m,b,I,"⊤","\\top");h(m,b,I,"⊥","\\bot");h(m,b,I,"∅","\\emptyset");h(m,v,I,"∅","\\varnothing");h(m,b,ie,"α","\\alpha",!0);h(m,b,ie,"β","\\beta",!0);h(m,b,ie,"γ","\\gamma",!0);h(m,b,ie,"δ","\\delta",!0);h(m,b,ie,"ϵ","\\epsilon",!0);h(m,b,ie,"ζ","\\zeta",!0);h(m,b,ie,"η","\\eta",!0);h(m,b,ie,"θ","\\theta",!0);h(m,b,ie,"ι","\\iota",!0);h(m,b,ie,"κ","\\kappa",!0);h(m,b,ie,"λ","\\lambda",!0);h(m,b,ie,"μ","\\mu",!0);h(m,b,ie,"ν","\\nu",!0);h(m,b,ie,"ξ","\\xi",!0);h(m,b,ie,"ο","\\omicron",!0);h(m,b,ie,"π","\\pi",!0);h(m,b,ie,"ρ","\\rho",!0);h(m,b,ie,"σ","\\sigma",!0);h(m,b,ie,"τ","\\tau",!0);h(m,b,ie,"υ","\\upsilon",!0);h(m,b,ie,"ϕ","\\phi",!0);h(m,b,ie,"χ","\\chi",!0);h(m,b,ie,"ψ","\\psi",!0);h(m,b,ie,"ω","\\omega",!0);h(m,b,ie,"ε","\\varepsilon",!0);h(m,b,ie,"ϑ","\\vartheta",!0);h(m,b,ie,"ϖ","\\varpi",!0);h(m,b,ie,"ϱ","\\varrho",!0);h(m,b,ie,"ς","\\varsigma",!0);h(m,b,ie,"φ","\\varphi",!0);h(m,b,te,"∗","*",!0);h(m,b,te,"+","+");h(m,b,te,"−","-",!0);h(m,b,te,"⋅","\\cdot",!0);h(m,b,te,"∘","\\circ",!0);h(m,b,te,"÷","\\div",!0);h(m,b,te,"±","\\pm",!0);h(m,b,te,"×","\\times",!0);h(m,b,te,"∩","\\cap",!0);h(m,b,te,"∪","\\cup",!0);h(m,b,te,"∖","\\setminus",!0);h(m,b,te,"∧","\\land");h(m,b,te,"∨","\\lor");h(m,b,te,"∧","\\wedge",!0);h(m,b,te,"∨","\\vee",!0);h(m,b,I,"√","\\surd");h(m,b,ht,"⟨","\\langle",!0);h(m,b,ht,"∣","\\lvert");h(m,b,ht,"∥","\\lVert");h(m,b,Ze,"?","?");h(m,b,Ze,"!","!");h(m,b,Ze,"⟩","\\rangle",!0);h(m,b,Ze,"∣","\\rvert");h(m,b,Ze,"∥","\\rVert");h(m,b,A,"=","=");h(m,b,A,":",":");h(m,b,A,"≈","\\approx",!0);h(m,b,A,"≅","\\cong",!0);h(m,b,A,"≥","\\ge");h(m,b,A,"≥","\\geq",!0);h(m,b,A,"←","\\gets");h(m,b,A,">","\\gt",!0);h(m,b,A,"∈","\\in",!0);h(m,b,A,"","\\@not");h(m,b,A,"⊂","\\subset",!0);h(m,b,A,"⊃","\\supset",!0);h(m,b,A,"⊆","\\subseteq",!0);h(m,b,A,"⊇","\\supseteq",!0);h(m,v,A,"⊈","\\nsubseteq",!0);h(m,v,A,"⊉","\\nsupseteq",!0);h(m,b,A,"⊨","\\models");h(m,b,A,"←","\\leftarrow",!0);h(m,b,A,"≤","\\le");h(m,b,A,"≤","\\leq",!0);h(m,b,A,"<","\\lt",!0);h(m,b,A,"→","\\rightarrow",!0);h(m,b,A,"→","\\to");h(m,v,A,"≱","\\ngeq",!0);h(m,v,A,"≰","\\nleq",!0);h(m,b,Yt," ","\\ ");h(m,b,Yt," ","\\space");h(m,b,Yt," ","\\nobreakspace");h(F,b,Yt," ","\\ ");h(F,b,Yt," "," ");h(F,b,Yt," ","\\space");h(F,b,Yt," ","\\nobreakspace");h(m,b,Yt,"","\\nobreak");h(m,b,Yt,"","\\allowbreak");h(m,b,kn,",",",");h(m,b,kn,";",";");h(m,v,te,"⊼","\\barwedge",!0);h(m,v,te,"⊻","\\veebar",!0);h(m,b,te,"⊙","\\odot",!0);h(m,b,te,"⊕","\\oplus",!0);h(m,b,te,"⊗","\\otimes",!0);h(m,b,I,"∂","\\partial",!0);h(m,b,te,"⊘","\\oslash",!0);h(m,v,te,"⊚","\\circledcirc",!0);h(m,v,te,"⊡","\\boxdot",!0);h(m,b,te,"△","\\bigtriangleup");h(m,b,te,"▽","\\bigtriangledown");h(m,b,te,"†","\\dagger");h(m,b,te,"⋄","\\diamond");h(m,b,te,"⋆","\\star");h(m,b,te,"◃","\\triangleleft");h(m,b,te,"▹","\\triangleright");h(m,b,ht,"{","\\{");h(F,b,I,"{","\\{");h(F,b,I,"{","\\textbraceleft");h(m,b,Ze,"}","\\}");h(F,b,I,"}","\\}");h(F,b,I,"}","\\textbraceright");h(m,b,ht,"{","\\lbrace");h(m,b,Ze,"}","\\rbrace");h(m,b,ht,"[","\\lbrack",!0);h(F,b,I,"[","\\lbrack",!0);h(m,b,Ze,"]","\\rbrack",!0);h(F,b,I,"]","\\rbrack",!0);h(m,b,ht,"(","\\lparen",!0);h(m,b,Ze,")","\\rparen",!0);h(F,b,I,"<","\\textless",!0);h(F,b,I,">","\\textgreater",!0);h(m,b,ht,"⌊","\\lfloor",!0);h(m,b,Ze,"⌋","\\rfloor",!0);h(m,b,ht,"⌈","\\lceil",!0);h(m,b,Ze,"⌉","\\rceil",!0);h(m,b,I,"\\","\\backslash");h(m,b,I,"∣","|");h(m,b,I,"∣","\\vert");h(F,b,I,"|","\\textbar",!0);h(m,b,I,"∥","\\|");h(m,b,I,"∥","\\Vert");h(F,b,I,"∥","\\textbardbl");h(F,b,I,"~","\\textasciitilde");h(F,b,I,"\\","\\textbackslash");h(F,b,I,"^","\\textasciicircum");h(m,b,A,"↑","\\uparrow",!0);h(m,b,A,"⇑","\\Uparrow",!0);h(m,b,A,"↓","\\downarrow",!0);h(m,b,A,"⇓","\\Downarrow",!0);h(m,b,A,"↕","\\updownarrow",!0);h(m,b,A,"⇕","\\Updownarrow",!0);h(m,b,Pe,"∐","\\coprod");h(m,b,Pe,"⋁","\\bigvee");h(m,b,Pe,"⋀","\\bigwedge");h(m,b,Pe,"⨄","\\biguplus");h(m,b,Pe,"⋂","\\bigcap");h(m,b,Pe,"⋃","\\bigcup");h(m,b,Pe,"∫","\\int");h(m,b,Pe,"∫","\\intop");h(m,b,Pe,"∬","\\iint");h(m,b,Pe,"∭","\\iiint");h(m,b,Pe,"∏","\\prod");h(m,b,Pe,"∑","\\sum");h(m,b,Pe,"⨂","\\bigotimes");h(m,b,Pe,"⨁","\\bigoplus");h(m,b,Pe,"⨀","\\bigodot");h(m,b,Pe,"∮","\\oint");h(m,b,Pe,"∯","\\oiint");h(m,b,Pe,"∰","\\oiiint");h(m,b,Pe,"⨆","\\bigsqcup");h(m,b,Pe,"∫","\\smallint");h(F,b,Hr,"…","\\textellipsis");h(m,b,Hr,"…","\\mathellipsis");h(F,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"⋯","\\@cdots",!0);h(m,b,Hr,"⋱","\\ddots",!0);h(m,b,I,"⋮","\\varvdots");h(F,b,I,"⋮","\\varvdots");h(m,b,Ce,"ˊ","\\acute");h(m,b,Ce,"ˋ","\\grave");h(m,b,Ce,"¨","\\ddot");h(m,b,Ce,"~","\\tilde");h(m,b,Ce,"ˉ","\\bar");h(m,b,Ce,"˘","\\breve");h(m,b,Ce,"ˇ","\\check");h(m,b,Ce,"^","\\hat");h(m,b,Ce,"⃗","\\vec");h(m,b,Ce,"˙","\\dot");h(m,b,Ce,"˚","\\mathring");h(m,b,ie,"","\\@imath");h(m,b,ie,"","\\@jmath");h(m,b,I,"ı","ı");h(m,b,I,"ȷ","ȷ");h(F,b,I,"ı","\\i",!0);h(F,b,I,"ȷ","\\j",!0);h(F,b,I,"ß","\\ss",!0);h(F,b,I,"æ","\\ae",!0);h(F,b,I,"œ","\\oe",!0);h(F,b,I,"ø","\\o",!0);h(F,b,I,"Æ","\\AE",!0);h(F,b,I,"Œ","\\OE",!0);h(F,b,I,"Ø","\\O",!0);h(F,b,Ce,"ˊ","\\'");h(F,b,Ce,"ˋ","\\`");h(F,b,Ce,"ˆ","\\^");h(F,b,Ce,"˜","\\~");h(F,b,Ce,"ˉ","\\=");h(F,b,Ce,"˘","\\u");h(F,b,Ce,"˙","\\.");h(F,b,Ce,"¸","\\c");h(F,b,Ce,"˚","\\r");h(F,b,Ce,"ˇ","\\v");h(F,b,Ce,"¨",'\\"');h(F,b,Ce,"˝","\\H");h(F,b,Ce,"◯","\\textcircled");var eo={"--":!0,"---":!0,"``":!0,"''":!0};h(F,b,I,"–","--",!0);h(F,b,I,"–","\\textendash");h(F,b,I,"—","---",!0);h(F,b,I,"—","\\textemdash");h(F,b,I,"‘","`",!0);h(F,b,I,"‘","\\textquoteleft");h(F,b,I,"’","'",!0);h(F,b,I,"’","\\textquoteright");h(F,b,I,"“","``",!0);h(F,b,I,"“","\\textquotedblleft");h(F,b,I,"”","''",!0);h(F,b,I,"”","\\textquotedblright");h(m,b,I,"°","\\degree",!0);h(F,b,I,"°","\\degree");h(F,b,I,"°","\\textdegree",!0);h(m,b,I,"£","\\pounds");h(m,b,I,"£","\\mathsterling",!0);h(F,b,I,"£","\\pounds");h(F,b,I,"£","\\textsterling",!0);h(m,v,I,"✠","\\maltese");h(F,v,I,"✠","\\maltese");var Ru='0123456789/@."';for(var ta=0;ta{var t=e.charCodeAt(0),r=e.charCodeAt(1),n=(t-55296)*1024+(r-56320)+65536;if(119808<=n&&n<120484){var a=Math.floor((n-119808)/26);return Gu[a]}else if(120782<=n&&n<=120831){var i=Math.floor((n-120782)/10);return t3[i]}else{if(n===120485||n===120486)return Gu[0];if(120486{if(Jt(e.classes)!==Jt(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize||e.italic!==0&&e.hasClass("mathnormal"))return!1;if(e.classes.length===1){var r=e.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n of Object.keys(e.style))if(e.style[n]!==t.style[n])return!1;for(var a of Object.keys(t.style))if(e.style[a]!==t.style[a])return!1;return!0},to=e=>{for(var t=0;tr&&(r=u.height),u.depth>n&&(n=u.depth),u.maxFontSize>a&&(a=u.maxFontSize)}t.height=r,t.depth=n,t.maxFontSize=a},z=function(t,r,n,a){var i=new Fr(t,r,n,a);return xi(i),i},er=(e,t,r,n)=>new Fr(e,t,r,n),Or=function(t,r,n){var a=z([t],[],r);return a.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),a.style.borderBottomWidth=V(a.height),a.maxFontSize=1,a},i3=function(t,r,n,a){var i=new E0(t,r,n,a);return xi(i),i},Gt=function(t){var r=new Br(t);return xi(r),r},Lr=function(t,r){return t instanceof Br?z([],[t],r):t},u3=function(t){if(t.positionType==="individualShift"){for(var r=t.children,n=[r[0]],a=-r[0].shift-r[0].elem.depth,i=a,u=1;u{var r=z(["mspace"],[],t),n=Ie(e,t);return r.style.marginRight=V(n),r},qn=(e,t,r)=>{var n,a;switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return t==="textbf"&&r==="textit"?a="BoldItalic":t==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},Ba={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},no={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},ao=function(t,r){var[n,a,i]=no[t],u=new Zt(n),s=new zt([u],{width:V(a),height:V(i),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),l=er(["overlay"],[s],r);return l.height=i,l.style.height=V(i),l.style.width=V(a),l},_e={number:3,unit:"mu"},cr={number:4,unit:"mu"},Pt={number:5,unit:"mu"},s3={mord:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mop:{mord:_e,mop:_e,mrel:Pt,minner:_e},mbin:{mord:cr,mop:cr,mopen:cr,minner:cr},mrel:{mord:Pt,mop:Pt,mopen:Pt,minner:Pt},mopen:{},mclose:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mpunct:{mord:_e,mop:_e,mrel:Pt,mopen:_e,mclose:_e,mpunct:_e,minner:_e},minner:{mord:_e,mop:_e,mbin:cr,mrel:Pt,mopen:_e,mpunct:_e,minner:_e}},l3={mord:{mop:_e},mop:{mord:_e,mop:_e},mbin:{},mrel:{},mopen:{},mclose:{mop:_e},mpunct:{},minner:{mop:_e}},io={},a0={},i0={};function Z(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:a},l=0;l{var D=S.classes[0],_=x.classes[0];D==="mbin"&&c3.has(_)?S.classes[0]="mord":_==="mbin"&&o3.has(D)&&(x.classes[0]="mord")},{node:f},g,p),Fa(i,(x,S)=>{var D,_,N=za(S),M=za(x),W=N&&M?x.hasClass("mtight")?(D=l3[N])==null?void 0:D[M]:(_=s3[N])==null?void 0:_[M]:null;if(W)return ro(W,c)},{node:f},g,p),i},Fa=function(t,r,n,a,i){a&&t.push(a);for(var u=0;ug=>{t.splice(f+1,0,g),u++})(u)}a&&t.pop()},uo=function(t){return t instanceof Br||t instanceof E0||t instanceof Fr&&t.hasClass("enclosing")?t:null},Ha=function(t,r){var n=uo(t);if(n){var a=n.children;if(a.length){if(r==="right")return Ha(a[a.length-1],"right");if(r==="left")return Ha(a[0],"left")}}return t},za=function(t,r){if(!t)return null;r&&(t=Ha(t,r));var n=t.classes[0];return d3[n]||null},bn=function(t,r){var n=["nulldelimiter"].concat(t.baseSizingClasses());return z(r.concat(n))},Te=function(t,r,n){if(!t)return z();if(a0[t.type]){var a=a0[t.type](t,r);if(n&&r.size!==n.size){a=z(r.sizingClasses(n),[a],r);var i=r.sizeMultiplier/n.sizeMultiplier;a.height*=i,a.depth*=i}return a}else throw new Y("Got group of unknown type: '"+t.type+"'")};function Yn(e,t){var r=z(["base"],e,t),n=z(["strut"]);return n.style.height=V(r.height+r.depth),r.depth&&(n.style.verticalAlign=V(-r.depth)),r.children.unshift(n),r}function Ua(e,t){var r=null;e.length===1&&e[0].type==="tag"&&(r=e[0].tag,e=e[0].body);var n=He(e,t,"root"),a;n.length===2&&n[1].hasClass("tag")&&(a=n.pop());for(var i=[],u=[],s=0;s0&&(i.push(Yn(u,t)),u=[]),i.push(n[s]));u.length>0&&i.push(Yn(u,t));var c;r?(c=Yn(He(r,t,!0),t),c.classes=["tag"],i.push(c)):a&&i.push(a);var d=z(["katex-html"],i);if(d.setAttribute("aria-hidden","true"),c){var f=c.children[0];f.style.height=V(d.height+d.depth),d.depth&&(f.style.verticalAlign=V(-d.depth))}return d}function so(e){return new Br(e)}class G{constructor(t,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=t,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(t,r){this.attributes[t]=r}getAttribute(t){return this.attributes[t]}toNode(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);this.classes.length>0&&(t.className=Jt(this.classes));for(var n=0;n0&&(t+=' class ="'+Ve(Jt(this.classes))+'"'),t+=">";for(var n=0;n",t}toText(){return this.children.map(t=>t.toText()).join("")}}class Me{constructor(t){this.text=void 0,this.text=t}toNode(){return document.createTextNode(this.text)}toMarkup(){return Ve(this.toText())}toText(){return this.text}}class lo{constructor(t){this.width=void 0,this.character=void 0,this.width=t,t>=.05555&&t<=.05556?this.character=" ":t>=.1666&&t<=.1667?this.character=" ":t>=.2222&&t<=.2223?this.character=" ":t>=.2777&&t<=.2778?this.character="  ":t>=-.05556&&t<=-.05555?this.character=" ⁣":t>=-.1667&&t<=-.1666?this.character=" ⁣":t>=-.2223&&t<=-.2222?this.character=" ⁣":t>=-.2778&&t<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",V(this.width)),t}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var f3=new Set(["\\imath","\\jmath"]),m3=new Set(["mrow","mtable"]),bt=function(t,r,n){return we[r][t]&&we[r][t].replace&&t.charCodeAt(0)!==55349&&!(eo.hasOwnProperty(t)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(t=we[r][t].replace),new Me(t)},yi=function(t){return t.length===1?t[0]:new G("mrow",t)},p3={mathit:"italic",boldsymbol:e=>e.type==="textord"?"bold":"bold-italic",mathbf:"bold",mathbb:"double-struck",mathsfit:"sans-serif-italic",mathfrak:"fraktur",mathscr:"script",mathcal:"script",mathsf:"sans-serif",mathtt:"monospace"},vi=(e,t)=>{if(e.mode==="text"){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold"}var r=t.font;if(!r||r==="mathnormal")return null;var n=e.mode,a=p3[r];if(a)return typeof a=="function"?a(e):a;var i=e.text;if(f3.has(i))return null;if(we[n][i]){var u=we[n][i].replace;u&&(i=u)}var s=Ba[r].fontName;return Ei(i,s,n)?Ba[r].variant:null};function ia(e){if(!e)return!1;if(e.type==="mi"&&e.children.length===1){var t=e.children[0];return t instanceof Me&&t.text==="."}else if(e.type==="mo"&&e.children.length===1&&e.getAttribute("separator")==="true"&&e.getAttribute("lspace")==="0em"&&e.getAttribute("rspace")==="0em"){var r=e.children[0];return r instanceof Me&&r.text===","}else return!1}var dt=function(t,r,n){if(t.length===1){var a=Ae(t[0],r);return n&&a instanceof G&&a.type==="mo"&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var i=[],u,s=0;s=1&&(u.type==="mn"||ia(u))){var c=l.children[0];c instanceof G&&c.type==="mn"&&(c.children=[...u.children,...c.children],i.pop())}else if(u.type==="mi"&&u.children.length===1){var d=u.children[0];if(d instanceof Me&&d.text==="̸"&&(l.type==="mo"||l.type==="mi"||l.type==="mn")){var f=l.children[0];f instanceof Me&&f.text.length>0&&(f.text=f.text.slice(0,1)+"̸"+f.text.slice(1),i.pop())}}}i.push(l),u=l}return i},tr=function(t,r,n){return yi(dt(t,r,n))},Ae=function(t,r){if(!t)return new G("mrow");if(i0[t.type])return i0[t.type](t,r);throw new Y("Got group of unknown type: '"+t.type+"'")};function Vu(e,t,r,n,a){var i=dt(e,r),u;i.length===1&&i[0]instanceof G&&m3.has(i[0].type)?u=i[0]:u=new G("mrow",i);var s=new G("annotation",[new Me(t)]);s.setAttribute("encoding","application/x-tex");var l=new G("semantics",[u,s]),c=new G("math",[l]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var d=a?"katex":"katex-mathml";return z([d],[c])}var g3=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],ju=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Wu=function(t,r){return r.size<2?t:g3[t-1][r.size-1]};class Bt{constructor(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||Bt.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=ju[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}extend(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};return Object.assign(r,t),new Bt(r)}havingStyle(t){return this.style===t?this:this.extend({style:t,size:Wu(this.textSize,t)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:ju[t-1]})}havingBaseStyle(t){t=t||this.style.text();var r=Wu(Bt.BASESIZE,t);return this.size===r&&this.textSize===Bt.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}havingBaseSizing(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})}withColor(t){return this.extend({color:t})}withPhantom(){return this.extend({phantom:!0})}withFont(t){return this.extend({font:t})}withTextFontFamily(t){return this.extend({fontFamily:t,font:""})}withTextFontWeight(t){return this.extend({fontWeight:t,font:""})}withTextFontShape(t){return this.extend({fontShape:t,font:""})}sizingClasses(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==Bt.BASESIZE?["sizing","reset-size"+this.size,"size"+Bt.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Z4(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}Bt.BASESIZE=6;var oo=function(t){return new Bt({style:t.displayMode?oe.DISPLAY:oe.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},co=function(t,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),t=z(n,[t])}return t},b3=function(t,r,n){var a=oo(n),i;if(n.output==="mathml")return Vu(t,r,a,n.displayMode,!0);if(n.output==="html"){var u=Ua(t,a);i=z(["katex"],[u])}else{var s=Vu(t,r,a,n.displayMode,!1),l=Ua(t,a);i=z(["katex"],[s,l])}return co(i,n)},E3=function(t,r,n){var a=oo(n),i=Ua(t,a),u=z(["katex"],[i]);return co(u,n)},T3={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",underbracket:"⎵",overbracket:"⎴",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},y0=function(t){var r=new G("mo",[new Me(T3[t.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},x3={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overbracket:[["leftbracketover","rightbracketover"],1.6,440],underbracket:[["leftbracketunder","rightbracketunder"],1.6,410],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},y3=new Set(["widehat","widecheck","widetilde","utilde"]),v0=function(t,r){function n(){var s=4e5,l=t.label.slice(1);if(y3.has(l)&&"base"in t){var c=t.base.type==="ordgroup"?t.base.body.length:1,d,f,g;if(c>5)l==="widehat"||l==="widecheck"?(d=420,s=2364,g=.42,f=l+"4"):(d=312,s=2340,g=.34,f="tilde4");else{var p=[1,1,2,2,3,3][c];l==="widehat"||l==="widecheck"?(s=[0,1062,2364,2364,2364][p],d=[0,239,300,360,420][p],g=[0,.24,.3,.3,.36,.42][p],f=l+p):(s=[0,600,1033,2339,2340][p],d=[0,260,286,306,312][p],g=[0,.26,.286,.3,.306,.34][p],f="tilde"+p)}var x=new Zt(f),S=new zt([x],{width:"100%",height:V(g),viewBox:"0 0 "+s+" "+d,preserveAspectRatio:"none"});return{span:er([],[S],r),minWidth:0,height:g}}else{var D=[],_=x3[l];if(!_)throw new Error('No SVG data for "'+l+'".');var[N,M,W]=_,j=W/1e3,L=N.length,ee,re;if(L===1){if(_.length!==4)throw new Error('Expected 4-tuple for single-path SVG data "'+l+'".');ee=["hide-tail"],re=[_[3]]}else if(L===2)ee=["halfarrow-left","halfarrow-right"],re=["xMinYMin","xMaxYMin"];else if(L===3)ee=["brace-left","brace-center","brace-right"],re=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+L+" children.");for(var K=0;K0&&(a.style.minWidth=V(i)),a},v3=function(t,r,n,a,i){var u,s=t.height+t.depth+n+a;if(/fbox|color|angl/.test(r)){if(u=z(["stretchy",r],[],i),r==="fbox"){var l=i.color&&i.getColor();l&&(u.style.borderColor=l)}}else{var c=[];/^[bx]cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var d=new zt(c,{width:"100%",height:V(s)});u=er([],[d],i)}return u.height=s,u.style.height=V(s),u},A3={bin:1,close:1,inner:1,open:1,punct:1,rel:1},k3={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1};function S3(e){return e in A3}function ce(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function A0(e){var t=k0(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function k0(e){return e&&(e.type==="atom"||k3.hasOwnProperty(e.type))?e:null}var ho=e=>{if(e instanceof ct)return e;if(K4(e)&&e.children.length===1)return ho(e.children[0])},Ai=(e,t)=>{var r,n,a;e&&e.type==="supsub"?(n=ce(e.base,"accent"),r=n.base,e.base=r,a=Q4(Te(e,t)),e.base=n):(n=ce(e,"accent"),r=n.base);var i=Te(r,t.havingCrampedStyle()),u=n.isShifty&&qt(r),s=0;if(u){var l,c;s=(l=(c=ho(i))==null?void 0:c.skew)!=null?l:0}var d=n.label==="\\c",f=d?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight),g;if(n.isStretchy)g=v0(n,t),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:g,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+V(2*s)+")",marginLeft:V(2*s)}:void 0}]});else{var p,x;n.label==="\\vec"?(p=ao("vec",t),x=no.vec[1]):(p=x0({mode:n.mode,text:n.label},t,"textord"),p=$4(p),p.italic=0,x=p.width,d&&(f+=p.depth)),g=z(["accent-body"],[p]);var S=n.label==="\\textcircled";S&&(g.classes.push("accent-full"),f=i.height);var D=s;S||(D-=x/2),g.style.left=V(D),n.label==="\\textcircled"&&(g.style.top=".2em"),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-f},{type:"elem",elem:g}]})}var _=z(["mord","accent"],[g],t);return a?(a.children[0]=_,a.height=Math.max(_.height,a.height),a.classes[0]="mord",a):_},fo=(e,t)=>{var r=e.isStretchy?y0(e.label):new G("mo",[bt(e.label,e.mode)]),n=new G("mover",[Ae(e.base,t),r]);return n.setAttribute("accent","true"),n},w3=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));Z({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=u0(t[0]),n=!w3.test(e.funcName),a=!n||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],n=e.parser.mode;return n==="math"&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:(e,t)=>{var r=Te(e.base,t),n=v0(e,t),a=e.label==="\\utilde"?.12:0,i=Ee({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]});return z(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=y0(e.label),n=new G("munder",[Ae(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Gn=e=>{var t=new G("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};Z({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n,funcName:a}=e;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder(e,t){var r=t.style,n=t.havingStyle(r.sup()),a=Lr(Te(e.body,n,t),t),i=e.label.slice(0,2)==="\\x"?"x":"cd";a.classes.push(i+"-arrow-pad");var u;e.below&&(n=t.havingStyle(r.sub()),u=Lr(Te(e.below,n,t),t),u.classes.push(i+"-arrow-pad"));var s=v0(e,t),l=-t.fontMetrics().axisHeight+.5*s.height,c=-t.fontMetrics().axisHeight-.5*s.height-.111;(a.depth>.25||e.label==="\\xleftequilibrium")&&(c-=a.depth);var d;if(u){var f=-t.fontMetrics().axisHeight+u.height+.5*s.height+.111;d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]},{type:"elem",elem:u,shift:f}]})}else d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]}]});return z(["mrel","x-arrow"],[d],t)},mathmlBuilder(e,t){var r=y0(e.label);r.setAttribute("minsize",e.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(e.body){var a=Gn(Ae(e.body,t));if(e.below){var i=Gn(Ae(e.below,t));n=new G("munderover",[r,i,a])}else n=new G("mover",[r,a])}else if(e.below){var u=Gn(Ae(e.below,t));n=new G("munder",[r,u])}else n=Gn(),n=new G("mover",[r,n]);return n}});function mo(e,t){var r=He(e.body,t,!0);return z([e.mclass],r,t)}function po(e,t){var r,n=dt(e.body,t);return e.mclass==="minner"?r=new G("mpadded",n):e.mclass==="mord"?e.isCharacterBox?(r=n[0],r.type="mi"):r=new G("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new G("mo",n),e.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):e.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):e.mclass==="mopen"||e.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):e.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}Z({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Re(a),isCharacterBox:qt(a)}},htmlBuilder:mo,mathmlBuilder:po});var S0=e=>{var t=e.type==="ordgroup"&&e.body.length?e.body[0]:e;return t.type==="atom"&&(t.family==="bin"||t.family==="rel")?"m"+t.family:"mord"};Z({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:S0(t[0]),body:Re(t[1]),isCharacterBox:qt(t[1])}}});Z({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:n}=e,a=t[1],i=t[0],u;n!=="\\stackrel"?u=S0(a):u="mrel";var s={type:"op",mode:a.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:Re(a)},l={type:"supsub",mode:i.mode,base:s,sup:n==="\\underset"?null:i,sub:n==="\\underset"?i:null};return{type:"mclass",mode:r.mode,mclass:u,body:[l],isCharacterBox:qt(l)}},htmlBuilder:mo,mathmlBuilder:po});Z({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:S0(t[0]),body:Re(t[0])}},htmlBuilder(e,t){var r=He(e.body,t,!0),n=z([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){var r=dt(e.body,t),n=new G("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var C3={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xu=()=>({type:"styling",body:[],mode:"math",style:"display",resetFont:!0}),$u=e=>e.type==="textord"&&e.text==="@",_3=(e,t)=>(e.type==="mathord"||e.type==="atom")&&e.text===t;function I3(e,t,r){var n=C3[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{var a=r.callFunction("\\\\cdleft",[t[0]],[]),i={type:"atom",text:n,mode:"math",family:"rel"},u=r.callFunction("\\Big",[i],[]),s=r.callFunction("\\\\cdright",[t[1]],[]),l={type:"ordgroup",mode:"math",body:[a,u,s]};return r.callFunction("\\\\cdparent",[l],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var c={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[c],[])}default:return{type:"textord",text:" ",mode:"math"}}}function N3(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if(r==="&"||r==="\\\\")e.consume();else if(r==="\\end"){t[t.length-1].length===0&&t.pop();break}else throw new Y("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var n=[],a=[n],i=0;iAV".includes(c))for(var f=0;f<2;f++){for(var g=!0,p=l+1;pAV=|." after @',u[l]);var x=I3(c,d,e),S={type:"styling",body:[x],mode:"math",style:"display",resetFont:!0};n.push(S),s=Xu()}i%2===0?n.push(s):n.shift(),n=[],a.push(n)}e.gullet.endGroup(),e.gullet.endGroup();var D=new Array(a[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:a,arraystretch:1,addJot:!0,rowGaps:[null],cols:D,colSeparationType:"CD",hLinesBeforeRow:new Array(a.length+1).fill([])}}Z({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),n=Lr(Te(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){var r=new G("mrow",[Ae(e.label,t)]);return r=new G("mpadded",[r]),r.setAttribute("width","0"),e.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new G("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Z({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Lr(Te(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new G("mrow",[Ae(e.fragment,t)])}});Z({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,n=ce(t[0],"ordgroup"),a=n.body,i="",u=0;u=1114111)throw new Y("\\@char with invalid code point "+i);return l<=65535?c=String.fromCharCode(l):(l-=65536,c=String.fromCharCode((l>>10)+55296,(l&1023)+56320)),{type:"textord",mode:r.mode,text:c}}});var go=(e,t)=>{var r=He(e.body,t.withColor(e.color),!1);return Gt(r)},bo=(e,t)=>{var r=dt(e.body,t.withColor(e.color)),n=new G("mstyle",r);return n.setAttribute("mathcolor",e.color),n};Z({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,n=ce(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:Re(a)}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:n}=e,a=ce(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:n}=e,a=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&ce(a,"size").value}},htmlBuilder(e,t){var r=z(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(Ie(e.size,t)))),r},mathmlBuilder(e,t){var r=new G("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(Ie(e.size,t)))),r}});var qa={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Eo=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new Y("Expected a control sequence",e);return t},D3=e=>{var t=e.gullet.popToken();return t.text==="="&&(t=e.gullet.popToken(),t.text===" "&&(t=e.gullet.popToken())),t},To=(e,t,r,n)=>{var a=e.gullet.macros.get(r.text);a==null&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};Z({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var n=t.fetch();if(qa[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=qa[n.text]),ce(t.parseFunction(),"internal");throw new Y("Invalid token after macro prefix",n)}});Z({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=t.gullet.popToken(),a=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(a))throw new Y("Expected a control sequence",n);for(var i=0,u,s=[[]];t.gullet.future().text!=="{";)if(n=t.gullet.popToken(),n.text==="#"){if(t.gullet.future().text==="{"){u=t.gullet.future(),s[i].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new Y('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==i+1)throw new Y('Argument number "'+n.text+'" out of order');i++,s.push([])}else{if(n.text==="EOF")throw new Y("Expected a macro definition");s[i].push(n.text)}var{tokens:l}=t.gullet.consumeArg();return u&&l.unshift(u),(r==="\\edef"||r==="\\xdef")&&(l=t.gullet.expandTokens(l),l.reverse()),t.gullet.macros.set(a,{tokens:l,numArgs:i,delimiters:s},r===qa[r]),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken());t.gullet.consumeSpaces();var a=D3(t);return To(t,n,a,r==="\\\\globallet"),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return To(t,n,i,r==="\\\\globalfuture"),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var tn=function(t,r,n){var a=we.math[t]&&we.math[t].replace,i=Ei(a||t,r,n);if(!i)throw new Error("Unsupported symbol "+t+" and font size "+r+".");return i},ki=function(t,r,n,a){var i=n.havingBaseStyle(r),u=z(a.concat(i.sizingClasses(n)),[t],n),s=i.sizeMultiplier/n.sizeMultiplier;return u.height*=s,u.depth*=s,u.maxFontSize=i.sizeMultiplier,u},xo=function(t,r,n){var a=r.havingBaseStyle(n),i=(1-r.sizeMultiplier/a.sizeMultiplier)*r.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=V(i),t.height-=i,t.depth+=i},O3=function(t,r,n,a,i,u){var s=Qe(t,"Main-Regular",i,a),l=ki(s,r,a,u);return xo(l,a,r),l},L3=function(t,r,n,a){return Qe(t,"Size"+r+"-Regular",n,a)},yo=function(t,r,n,a,i,u){var s=L3(t,r,i,a),l=ki(z(["delimsizing","size"+r],[s],a),oe.TEXT,a,u);return n&&xo(l,a,oe.TEXT),l},ua=function(t,r,n){var a;r==="Size1-Regular"?a="delim-size1":a="delim-size4";var i=z(["delimsizinginner",a],[z([],[Qe(t,r,n)])]);return{type:"elem",elem:i}},sa=function(t,r,n){var a=wt["Size4-Regular"][t.charCodeAt(0)]?wt["Size4-Regular"][t.charCodeAt(0)][4]:wt["Size1-Regular"][t.charCodeAt(0)][4],i=new Zt("inner",q4(t,Math.round(1e3*r))),u=new zt([i],{width:V(a),height:V(r),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),s=er([],[u],n);return s.height=r,s.style.height=V(r),s.style.width=V(a),{type:"elem",elem:s}},Ya=.008,Vn={type:"kern",size:-1*Ya},R3=new Set(["|","\\lvert","\\rvert","\\vert"]),M3=new Set(["\\|","\\lVert","\\rVert","\\Vert"]),vo=function(t,r,n,a,i,u){var s,l,c,d,f="",g=0;s=c=d=t,l=null;var p="Size1-Regular";t==="\\uparrow"?c=d="⏐":t==="\\Uparrow"?c=d="‖":t==="\\downarrow"?s=c="⏐":t==="\\Downarrow"?s=c="‖":t==="\\updownarrow"?(s="\\uparrow",c="⏐",d="\\downarrow"):t==="\\Updownarrow"?(s="\\Uparrow",c="‖",d="\\Downarrow"):R3.has(t)?(c="∣",f="vert",g=333):M3.has(t)?(c="∥",f="doublevert",g=556):t==="["||t==="\\lbrack"?(s="⎡",c="⎢",d="⎣",p="Size4-Regular",f="lbrack",g=667):t==="]"||t==="\\rbrack"?(s="⎤",c="⎥",d="⎦",p="Size4-Regular",f="rbrack",g=667):t==="\\lfloor"||t==="⌊"?(c=s="⎢",d="⎣",p="Size4-Regular",f="lfloor",g=667):t==="\\lceil"||t==="⌈"?(s="⎡",c=d="⎢",p="Size4-Regular",f="lceil",g=667):t==="\\rfloor"||t==="⌋"?(c=s="⎥",d="⎦",p="Size4-Regular",f="rfloor",g=667):t==="\\rceil"||t==="⌉"?(s="⎤",c=d="⎥",p="Size4-Regular",f="rceil",g=667):t==="("||t==="\\lparen"?(s="⎛",c="⎜",d="⎝",p="Size4-Regular",f="lparen",g=875):t===")"||t==="\\rparen"?(s="⎞",c="⎟",d="⎠",p="Size4-Regular",f="rparen",g=875):t==="\\{"||t==="\\lbrace"?(s="⎧",l="⎨",d="⎩",c="⎪",p="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(s="⎫",l="⎬",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lgroup"||t==="⟮"?(s="⎧",d="⎩",c="⎪",p="Size4-Regular"):t==="\\rgroup"||t==="⟯"?(s="⎫",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lmoustache"||t==="⎰"?(s="⎧",d="⎭",c="⎪",p="Size4-Regular"):(t==="\\rmoustache"||t==="⎱")&&(s="⎫",d="⎩",c="⎪",p="Size4-Regular");var x=tn(s,p,i),S=x.height+x.depth,D=tn(c,p,i),_=D.height+D.depth,N=tn(d,p,i),M=N.height+N.depth,W=0,j=1;if(l!==null){var L=tn(l,p,i);W=L.height+L.depth,j=2}var ee=S+M+W,re=Math.max(0,Math.ceil((r-ee)/(j*_))),K=ee+re*j*_,R=a.fontMetrics().axisHeight;n&&(R*=a.sizeMultiplier);var J=K/2-R,Q=[];if(f.length>0){var be=K-S-M,ne=Math.round(K*1e3),X=Y4(f,Math.round(be*1e3)),me=new Zt(f,X),ke=V(g/1e3),ze=V(ne/1e3),at=new zt([me],{width:ke,height:ze,viewBox:"0 0 "+g+" "+ne}),w=er([],[at],a);w.height=ne/1e3,w.style.width=ke,w.style.height=ze,Q.push({type:"elem",elem:w})}else{if(Q.push(ua(d,p,i)),Q.push(Vn),l===null){var Oe=K-S-M+2*Ya;Q.push(sa(c,Oe,a))}else{var Xe=(K-S-M-W)/2+2*Ya;Q.push(sa(c,Xe,a)),Q.push(Vn),Q.push(ua(l,p,i)),Q.push(Vn),Q.push(sa(c,Xe,a))}Q.push(Vn),Q.push(ua(s,p,i))}var C=a.havingBaseStyle(oe.TEXT),Ye=Ee({positionType:"bottom",positionData:J,children:Q});return ki(z(["delimsizing","mult"],[Ye],C),oe.TEXT,a,u)},la=80,oa=.08,ca=function(t,r,n,a,i){var u=U4(t,a,n),s=new Zt(t,u),l=new zt([s],{width:"400em",height:V(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return er(["hide-tail"],[l],i)},P3=function(t,r){var n=r.havingBaseSizing(),a=Co("\\surd",t*n.sizeMultiplier,wo,n),i=n.sizeMultiplier,u=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),s,l,c,d,f;return a.type==="small"?(d=1e3+1e3*u+la,t<1?i=1:t<1.4&&(i=.7),l=(1+u+oa)/i,c=(1+u)/i,s=ca("sqrtMain",l,d,u,r),s.style.minWidth="0.853em",f=.833/i):a.type==="large"?(d=(1e3+la)*sn[a.size],c=(sn[a.size]+u)/i,l=(sn[a.size]+u+oa)/i,s=ca("sqrtSize"+a.size,l,d,u,r),s.style.minWidth="1.02em",f=1/i):(l=t+u+oa,c=t+u,d=Math.floor(1e3*t+u)+la,s=ca("sqrtTall",l,d,u,r),s.style.minWidth="0.742em",f=1.056),s.height=c,s.style.height=V(l),{span:s,advanceWidth:f,ruleWidth:(r.fontMetrics().sqrtRuleThickness+u)*i}},Ao=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"]),B3=new Set(["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"]),ko=new Set(["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),sn=[0,1.2,1.8,2.4,3],So=function(t,r,n,a,i){if(t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle"),Ao.has(t)||ko.has(t))return yo(t,r,!1,n,a,i);if(B3.has(t))return vo(t,sn[r],!1,n,a,i);throw new Y("Illegal delimiter: '"+t+"'")},F3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],H3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"stack"}],wo=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],z3=function(t){if(t.type==="small")return"Main-Regular";if(t.type==="large")return"Size"+t.size+"-Regular";if(t.type==="stack")return"Size4-Regular";var r=t.type;throw new Error("Add support for delim type '"+r+"' here.")},Co=function(t,r,n,a){for(var i=Math.min(2,3-a.style.size),u=i;ur)return s}return n[n.length-1]},Ga=function(t,r,n,a,i,u){t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle");var s;ko.has(t)?s=F3:Ao.has(t)?s=wo:s=H3;var l=Co(t,r,s,a);return l.type==="small"?O3(t,l.style,n,a,i,u):l.type==="large"?yo(t,l.size,n,a,i,u):vo(t,r,n,a,i,u)},ha=function(t,r,n,a,i,u){var s=a.fontMetrics().axisHeight*a.sizeMultiplier,l=901,c=5/a.fontMetrics().ptPerEm,d=Math.max(r-s,n+s),f=Math.max(d/500*l,2*d-c);return Ga(t,f,!0,a,i,u)},Qu={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},U3=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."]);function Ku(e){return"isMiddle"in e}function w0(e,t){var r=k0(e);if(r&&U3.has(r.text))return r;throw r?new Y("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e):new Y("Invalid delimiter type '"+e.type+"'",e)}Z({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=w0(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Qu[e.funcName].size,mclass:Qu[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>e.delim==="."?z([e.mclass]):So(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];e.delim!=="."&&t.push(bt(e.delim,e.mode));var r=new G("mo",t);e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(sn[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}});function Ju(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Z({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new Y("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:w0(t[0],e).text,color:r}}});Z({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=ce(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Ju(e);for(var r=He(e.body,t,!0,["mopen","mclose"]),n=0,a=0,i=!1,u=0;u{Ju(e);var r=dt(e.body,t);if(e.left!=="."){var n=new G("mo",[bt(e.left,e.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(e.right!=="."){var a=new G("mo",[bt(e.right,e.mode)]);a.setAttribute("fence","true"),e.rightColor&&a.setAttribute("mathcolor",e.rightColor),r.push(a)}return yi(r)}});Z({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e);if(!e.parser.leftrightDepth)throw new Y("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;return e.delim==="."?r=bn(t,[]):(r=So(e.delim,1,t,e.mode,[]),r.isMiddle={delim:e.delim,options:t}),r},mathmlBuilder:(e,t)=>{var r=e.delim==="\\vert"||e.delim==="|"?bt("|","text"):bt(e.delim,e.mode),n=new G("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});var C0=(e,t)=>{var r=Lr(Te(e.body,t),t),n=e.label.slice(1),a=t.sizeMultiplier,i,u,s=qt(e.body);if(n==="sout")i=z(["stretchy","sout"]),i.height=t.fontMetrics().defaultRuleThickness/a,u=-.5*t.fontMetrics().xHeight;else if(n==="phase"){var l=Ie({number:.6,unit:"pt"},t),c=Ie({number:.35,unit:"ex"},t),d=t.havingBaseSizing();a=a/d.sizeMultiplier;var f=r.height+r.depth+l+c;r.style.paddingLeft=V(f/2+l);var g=Math.floor(1e3*f*a),p=H4(g),x=new zt([new Zt("phase",p)],{width:"400em",height:V(g/1e3),viewBox:"0 0 400000 "+g,preserveAspectRatio:"xMinYMin slice"});i=er(["hide-tail"],[x],t),i.style.height=V(f),u=r.depth+l+c}else{/cancel/.test(n)?s||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var S,D,_=0;/box/.test(n)?(_=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),S=t.fontMetrics().fboxsep+(n==="colorbox"?0:_),D=S):n==="angl"?(_=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),S=4*_,D=Math.max(0,.25-r.depth)):(S=s?.2:0,D=S),i=v3(r,n,S,D,t),/fbox|boxed|fcolorbox/.test(n)?(i.style.borderStyle="solid",i.style.borderWidth=V(_)):n==="angl"&&_!==.049&&(i.style.borderTopWidth=V(_),i.style.borderRightWidth=V(_)),u=r.depth+D,e.backgroundColor&&(i.style.backgroundColor=e.backgroundColor,e.borderColor&&(i.style.borderColor=e.borderColor))}var N;if(e.backgroundColor)N=Ee({positionType:"individualShift",children:[{type:"elem",elem:i,shift:u},{type:"elem",elem:r,shift:0}]});else{var M=/cancel|phase/.test(n)?["svg-align"]:[];N=Ee({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:i,shift:u,wrapperClasses:M}]})}return/cancel/.test(n)&&(N.height=r.height,N.depth=r.depth),/cancel/.test(n)&&!s?z(["mord","cancel-lap"],[N],t):z(["mord"],[N],t)},_0=(e,t)=>{var r,n=new G(e.label.includes("colorbox")?"mpadded":"menclose",[Ae(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+V(a)+" solid "+e.borderColor)}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};Z({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:u}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=ce(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:u,borderColor:i,body:s}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}});Z({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\sout"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e;r.mode==="math"&&r.settings.reportNonstrict("mathVsSout","LaTeX's \\sout works only in text mode");var a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var _o={};function Nt(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l{var t=e.parser.settings;if(!t.displayMode)throw new Y("{"+e.envName+"} can be used only in display mode.")},q3=new Set(["gather","gather*"]);function Si(e){if(!e.includes("ed"))return!e.includes("*")}function ar(e,t,r){var{hskipBeforeAndAfter:n,addJot:a,cols:i,arraystretch:u,colSeparationType:s,autoTag:l,singleRow:c,emptySingleRow:d,maxNumCols:f,leqno:g}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!u){var p=e.gullet.expandMacroAsText("\\arraystretch");if(p==null)u=1;else if(u=parseFloat(p),!u||u<0)throw new Y("Invalid \\arraystretch: "+p)}e.gullet.beginGroup();var x=[],S=[x],D=[],_=[],N=l!=null?[]:void 0;function M(){l&&e.gullet.macros.set("\\@eqnsw","1",!0)}function W(){N&&(e.gullet.macros.get("\\df@tag")?(N.push(e.subparse([new ot("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):N.push(!!l&&e.gullet.macros.get("\\@eqnsw")==="1"))}for(M(),_.push(Zu(e));;){var j=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup();var L={type:"ordgroup",mode:e.mode,body:j};r&&(L={type:"styling",mode:e.mode,style:r,resetFont:!0,body:[L]}),x.push(L);var ee=e.fetch().text;if(ee==="&"){if(f&&x.length===f){if(c||s)throw new Y("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else if(ee==="\\end"){W(),x.length===1&&L.type==="styling"&&L.body.length===1&&L.body[0].type==="ordgroup"&&L.body[0].body.length===0&&(S.length>1||!d)&&S.pop(),_.length0&&(M+=.25),c.push({pos:M,isDashed:ue[he]})}for(W(u[0]),n=0;n0&&(J+=N,eeue))for(n=0;n=s)){var it=void 0;if(a>0||t.hskipBeforeAndAfter){var Lt,ir;it=(Lt=(ir=C)==null?void 0:ir.pregap)!=null?Lt:g,it!==0&&(X=z(["arraycolsep"],[]),X.style.width=V(it),ne.push(X))}var _n=[];for(n=0;n0){for(var R0=Or("hline",r,d),M0=Or("hdashline",r,d),Vr=[{type:"elem",elem:ur,shift:0}];c.length>0;){var Ln=c.pop(),Rn=Ln.pos-Q;Ln.isDashed?Vr.push({type:"elem",elem:M0,shift:Rn}):Vr.push({type:"elem",elem:R0,shift:Rn})}ur=Ee({positionType:"individualShift",children:Vr})}if(ke.length===0)return z(["mord"],[ur],r);var B=Ee({positionType:"individualShift",children:ke}),$=z(["tag"],[B],r);return Gt([ur,$])},Y3={c:"center ",l:"left ",r:"right "},Ot=function(t,r){for(var n=[],a=new G("mtd",[],["mtr-glue"]),i=new G("mtd",[],["mml-eqn-num"]),u=0;u0){var x=t.cols,S="",D=!1,_=0,N=x.length;x[0].type==="separator"&&(g+="top ",_=1),x[x.length-1].type==="separator"&&(g+="bottom ",N-=1);for(var M=_;M0?"left ":"",g+=K[K.length-1].length>0?"right ":"";for(var R=1;R0&&p&&(D=1),n[x]={type:"align",align:S,pregap:D,postgap:0}}return u.colSeparationType=p?"align":"alignat",u};Nt({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(u){var s=A0(u),l=s.text;if("lcr".includes(l))return{type:"align",align:l};if(l==="|")return{type:"separator",separator:"|"};if(l===":")return{type:"separator",separator:":"};throw new Y("Unknown column alignment: "+l,u)}),i={cols:a,hskipBeforeAndAfter:!0,maxNumCols:a.length};return ar(e.parser,i,wi(e.envName))},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(e.envName.charAt(e.envName.length-1)==="*"){var a=e.parser;if(a.consumeSpaces(),a.fetch().text==="["){if(a.consume(),a.consumeSpaces(),r=a.fetch().text,!"lcr".includes(r))throw new Y("Expected l or c or r",a.nextToken);a.consume(),a.consumeSpaces(),a.expect("]"),a.consume(),n.cols=[{type:"align",align:r}]}}var i=ar(e.parser,n,wi(e.envName)),u=Math.max(0,...i.body.map(s=>s.length));return i.cols=new Array(u).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[i],left:t[0],right:t[1],rightColor:void 0}:i},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t={arraystretch:.5},r=ar(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(s){var l=A0(s),c=l.text;if("lc".includes(c))return{type:"align",align:c};throw new Y("Unknown column alignment: "+c,s)});if(a.length>1)throw new Y("{subarray} can contain only one column");var i={cols:a,hskipBeforeAndAfter:!1,arraystretch:.5},u=ar(e.parser,i,"script");if(u.body.length>0&&u.body[0].length>1)throw new Y("{subarray} can contain only one column");return u},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ar(e.parser,t,wi(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:e.envName.includes("r")?".":"\\{",right:e.envName.includes("r")?"\\}":".",rightColor:void 0}},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){q3.has(e.envName)&&I0(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Si(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){I0(e);var t={autoTag:Si(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["CD"],props:{numArgs:0},handler(e){return I0(e),N3(e.parser)},htmlBuilder:Dt,mathmlBuilder:Ot});E("\\nonumber","\\gdef\\@eqnsw{0}");E("\\notag","\\nonumber");Z({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new Y(e.funcName+" valid only within array environment")}});var es=_o;Z({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];if(a.type!=="ordgroup")throw new Y("Invalid environment name",a);for(var i="",u=0;u{var r=e.font,n=t.withFont(r);return Te(e.body,n)},Oo=(e,t)=>{var r=e.font,n=t.withFont(r);return Ae(e.body,n)},ts={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};Z({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=u0(t[0]),i=n;return i in ts&&(i=ts[i]),{type:"font",mode:r.mode,font:i.slice(1),body:a}},htmlBuilder:Do,mathmlBuilder:Oo});Z({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:S0(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:qt(n)}}});Z({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n,breakOnTokenText:a}=e,{mode:i}=r,u=r.parseExpression(!0,a);return{type:"font",mode:i,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:u}}},htmlBuilder:Do,mathmlBuilder:Oo});var G3=(e,t)=>{var r=t.style,n=r.fracNum(),a=r.fracDen(),i;i=t.havingStyle(n);var u=Te(e.numer,i,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;u.height=u.height0?x=3*g:x=7*g,S=t.fontMetrics().denom1):(f>0?(p=t.fontMetrics().num2,x=g):(p=t.fontMetrics().num3,x=3*g),S=t.fontMetrics().denom2);var D;if(d){var N=t.fontMetrics().axisHeight;p-u.depth-(N+.5*f){var r=new G("mfrac",[Ae(e.numer,t),Ae(e.denom,t)]);if(!e.hasBarLine)r.setAttribute("linethickness","0px");else if(e.barSize){var n=Ie(e.barSize,t);r.setAttribute("linethickness",V(n))}if(e.leftDelim!=null||e.rightDelim!=null){var a=[];if(e.leftDelim!=null){var i=new G("mo",[new Me(e.leftDelim.replace("\\",""))]);i.setAttribute("fence","true"),a.push(i)}if(a.push(r),e.rightDelim!=null){var u=new G("mo",[new Me(e.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),a.push(u)}return yi(a)}return r},Lo=(e,t)=>{if(!t)return e;var r={type:"styling",mode:e.mode,style:t,body:[e]};return r};Z({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=t[1],u,s=null,l=null;switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":u=!0;break;case"\\\\atopfrac":u=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":u=!1,s="(",l=")";break;case"\\\\bracefrac":u=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":u=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}var c=n==="\\cfrac",d=null;return c||n.startsWith("\\d")?d="display":n.startsWith("\\t")&&(d="text"),Lo({type:"genfrac",mode:r.mode,numer:a,denom:i,continued:c,hasBarLine:u,leftDelim:s,rightDelim:l,barSize:null},d)},htmlBuilder:G3,mathmlBuilder:V3});Z({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var{parser:t,funcName:r,token:n}=e,a;switch(r){case"\\over":a="\\frac";break;case"\\choose":a="\\binom";break;case"\\atop":a="\\\\atopfrac";break;case"\\brace":a="\\\\bracefrac";break;case"\\brack":a="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:t.mode,replaceWith:a,token:n}}});var rs=["display","text","script","scriptscript"],ns=function(t){var r=null;return t.length>0&&(r=t,r=r==="."?null:r),r};Z({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var{parser:r}=e,n=t[4],a=t[5],i=u0(t[0]),u=i.type==="atom"&&i.family==="open"?ns(i.text):null,s=u0(t[1]),l=s.type==="atom"&&s.family==="close"?ns(s.text):null,c=ce(t[2],"size"),d,f=null;c.isBlank?d=!0:(f=c.value,d=f.number>0);var g=null,p=t[3];if(p.type==="ordgroup"){if(p.body.length>0){var x=ce(p.body[0],"textord");g=rs[Number(x.text)]}}else p=ce(p,"textord"),g=rs[Number(p.text)];return Lo({type:"genfrac",mode:r.mode,numer:n,denom:a,continued:!1,hasBarLine:d,barSize:f,leftDelim:u,rightDelim:l},g)}});Z({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:n,token:a}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:ce(t[0],"size").value,token:a}}});Z({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=ce(t[1],"infix").size;if(!i)throw new Error("\\\\abovefrac expected size, but got "+String(i));var u=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:u,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null}}});var Ro=(e,t)=>{var r=t.style,n,a;e.type==="supsub"?(n=e.sup?Te(e.sup,t.havingStyle(r.sup()),t):Te(e.sub,t.havingStyle(r.sub()),t),a=ce(e.base,"horizBrace")):a=ce(e,"horizBrace");var i=Te(a.base,t.havingBaseStyle(oe.DISPLAY)),u=v0(a,t),s;if(a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:u,wrapperClasses:["svg-align"]}]}):s=Ee({positionType:"bottom",positionData:i.depth+.1+u.height,children:[{type:"elem",elem:u,wrapperClasses:["svg-align"]},{type:"kern",size:.1},{type:"elem",elem:i}]}),n){var l=z(["minner",a.isOver?"mover":"munder"],[s],t);a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:n}]}):s=Ee({positionType:"bottom",positionData:l.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:l}]})}return z(["minner",a.isOver?"mover":"munder"],[s],t)},j3=(e,t)=>{var r=y0(e.label);return new G(e.isOver?"mover":"munder",[Ae(e.base,t),r])};Z({type:"horizBrace",names:["\\overbrace","\\underbrace","\\overbracket","\\underbracket"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:n.includes("\\over"),base:t[0]}},htmlBuilder:Ro,mathmlBuilder:j3});Z({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[1],a=ce(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:Re(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=He(e.body,t,!1);return i3(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=tr(e.body,t);return r instanceof G||(r=new G("mrow",[r])),r.setAttribute("href",e.href),r}});Z({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=ce(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i{var{parser:r,funcName:n,token:a}=e,i=ce(t[0],"raw").string,u=t[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var s,l={};switch(n){case"\\htmlClass":l.class=i,s={command:"\\htmlClass",class:i};break;case"\\htmlId":l.id=i,s={command:"\\htmlId",id:i};break;case"\\htmlStyle":l.style=i,s={command:"\\htmlStyle",style:i};break;case"\\htmlData":{for(var c=i.split(","),d=0;d{var r=He(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));var a=z(n,r,t);for(var i in e.attributes)i!=="class"&&e.attributes.hasOwnProperty(i)&&a.setAttribute(i,e.attributes[i]);return a},mathmlBuilder:(e,t)=>tr(e.body,t)});Z({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInArgument:!0,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Re(t[0]),mathml:Re(t[1])}},htmlBuilder:(e,t)=>{var r=He(e.html,t,!1);return Gt(r)},mathmlBuilder:(e,t)=>tr(e.mathml,t)});var da=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new Y("Invalid size: '"+t+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!Ql(n))throw new Y("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n};Z({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:n}=e,a={number:0,unit:"em"},i={number:.9,unit:"em"},u={number:0,unit:"em"},s="";if(r[0])for(var l=ce(r[0],"raw").string,c=l.split(","),d=0;d{var r=Ie(e.height,t),n=0;e.totalheight.number>0&&(n=Ie(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=Ie(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var u=new W4(e.src,e.alt,i);return u.height=r,u.depth=n,u},mathmlBuilder:(e,t)=>{var r=new G("mglyph",[]);r.setAttribute("alt",e.alt);var n=Ie(e.height,t),a=0;if(e.totalheight.number>0&&(a=Ie(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=Ie(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}});Z({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=ce(t[0],"size");if(r.settings.strict){var i=n[1]==="m",u=a.value.unit==="mu";i?(u||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+a.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):u&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder(e,t){return ro(e.dimension,t)},mathmlBuilder(e,t){var r=Ie(e.dimension,t);return new lo(r)}});Z({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:(e,t)=>{var r;e.alignment==="clap"?(r=z([],[Te(e.body,t)]),r=z(["inner"],[r],t)):r=z(["inner"],[Te(e.body,t)]);var n=z(["fix"],[]),a=z([e.alignment],[r,n],t),i=z(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=z(["thinbox"],[a],t),z(["mord","vbox"],[a],t)},mathmlBuilder:(e,t)=>{var r=new G("mpadded",[Ae(e.body,t)]);if(e.alignment!=="rlap"){var n=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}});Z({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:n}=e,a=n.mode;n.switchMode("math");var i=r==="\\("?"\\)":"$",u=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",resetFont:!0,body:u}}});Z({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new Y("Mismatched "+e.funcName)}});var as=(e,t)=>{switch(t.style.size){case oe.DISPLAY.size:return e.display;case oe.TEXT.size:return e.text;case oe.SCRIPT.size:return e.script;case oe.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};Z({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Re(t[0]),text:Re(t[1]),script:Re(t[2]),scriptscript:Re(t[3])}},htmlBuilder:(e,t)=>{var r=as(e,t),n=He(r,t,!1);return Gt(n)},mathmlBuilder:(e,t)=>{var r=as(e,t);return tr(r,t)}});var Mo=(e,t,r,n,a,i,u)=>{e=z([],[e]);var s=r&&qt(r),l,c;if(t){var d=Te(t,n.havingStyle(a.sup()),n);c={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-d.depth)}}if(r){var f=Te(r,n.havingStyle(a.sub()),n);l={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-f.height)}}var g;if(c&&l){var p=n.fontMetrics().bigOpSpacing5+l.elem.height+l.elem.depth+l.kern+e.depth+u;g=Ee({positionType:"bottom",positionData:p,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else if(l){var x=e.height-u;g=Ee({positionType:"top",positionData:x,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e}]})}else if(c){var S=e.depth+u;g=Ee({positionType:"bottom",positionData:S,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else return e;var D=[g];if(l&&i!==0&&!s){var _=z(["mspace"],[],n);_.style.marginRight=V(i),D.unshift(_)}return z(["mop","op-limits"],D,n)},Po=new Set(["\\smallint"]),zr=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"op"),a=!0):i=ce(e,"op");var u=t.style,s=!1;u.size===oe.DISPLAY.size&&i.symbol&&!Po.has(i.name)&&(s=!0);var l,c;if(i.symbol){var d=s?"Size2-Regular":"Size1-Regular",f="";if((i.name==="\\oiint"||i.name==="\\oiiint")&&(f=i.name.slice(1),i.name=f==="oiint"?"\\iint":"\\iiint"),l=Qe(i.name,d,"math",t,["mop","op-symbol",s?"large-op":"small-op"]),c=l.italic,f.length>0){var g=ao(f+"Size"+(s?"2":"1"),t);l=Ee({positionType:"individualShift",children:[{type:"elem",elem:l,shift:0},{type:"elem",elem:g,shift:s?.08:0}]}),i.name="\\"+f,l.classes.unshift("mop"),l.italic=c}}else if(i.body){var p=He(i.body,t,!0);p.length===1&&p[0]instanceof ct?(l=p[0],l.classes[0]="mop"):l=z(["mop"],p,t)}else{for(var x=[],S=1;S{var r;if(e.symbol)r=new G("mo",[bt(e.name,e.mode)]),Po.has(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new G("mo",dt(e.body,t));else{r=new G("mi",[new Me(e.name.slice(1))]);var n=new G("mo",[bt("⁡","text")]);e.parentIsSupSub?r=new G("mrow",[r,n]):r=so([r,n])}return r},W3={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Z({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=n;return a.length===1&&(a=W3[a]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Re(n)}},htmlBuilder:zr,mathmlBuilder:Sn});var X3={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Z({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0,allowedInArgument:!0},handler(e){var{parser:t,funcName:r}=e,n=r;return n.length===1&&(n=X3[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:zr,mathmlBuilder:Sn});var Bo=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"operatorname"),a=!0):i=ce(e,"operatorname");var u;if(i.body.length>0){for(var s=i.body.map(f=>{var g="text"in f?f.text:void 0;return typeof g=="string"?{type:"textord",mode:f.mode,text:g}:f}),l=He(s,t.withFont("mathrm"),!0),c=0;c{for(var r=dt(e.body,t.withFont("mathrm")),n=!0,a=0;ad.toText()).join("");r=[new Me(s)]}var l=new G("mi",r);l.setAttribute("mathvariant","normal");var c=new G("mo",[bt("⁡","text")]);return e.parentIsSupSub?new G("mrow",[l,c]):so([l,c])};Z({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"operatorname",mode:r.mode,body:Re(a),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:Bo,mathmlBuilder:$3});E("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");br({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Gt(He(e.body,t,!1)):z(["mord"],He(e.body,t,!0),t)},mathmlBuilder(e,t){return tr(e.body,t,!0)}});Z({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle()),n=Or("overline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*a},{type:"elem",elem:n},{type:"kern",size:a}]});return z(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("mover",[Ae(e.body,t),r]);return n.setAttribute("accent","true"),n}});Z({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"phantom",mode:r.mode,body:Re(n)}},htmlBuilder:(e,t)=>{var r=He(e.body,t.withPhantom(),!1);return Gt(r)},mathmlBuilder:(e,t)=>{var r=dt(e.body,t);return new G("mphantom",r)}});E("\\hphantom","\\smash{\\phantom{#1}}");Z({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{var r=z(["inner"],[Te(e.body,t.withPhantom())]),n=z(["fix"],[]);return z(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{var r=dt(Re(e.body),t),n=new G("mphantom",r),a=new G("mpadded",[n]);return a.setAttribute("width","0px"),a}});Z({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,n=ce(t[0],"size").value,a=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:a}},htmlBuilder(e,t){var r=Te(e.body,t),n=Ie(e.dy,t);return Ee({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}});Z({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}});Z({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){var{parser:n}=e,a=r[0],i=ce(t[0],"size"),u=ce(t[1],"size");return{type:"rule",mode:n.mode,shift:a&&ce(a,"size").value,width:i.value,height:u.value}},htmlBuilder(e,t){var r=z(["mord","rule"],[],t),n=Ie(e.width,t),a=Ie(e.height,t),i=e.shift?Ie(e.shift,t):0;return r.style.borderRightWidth=V(n),r.style.borderTopWidth=V(a),r.style.bottom=V(i),r.width=n,r.height=a+i,r.depth=-i,r.maxFontSize=a*1.125*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=Ie(e.width,t),n=Ie(e.height,t),a=e.shift?Ie(e.shift,t):0,i=t.color&&t.getColor()||"black",u=new G("mspace");u.setAttribute("mathbackground",i),u.setAttribute("width",V(r)),u.setAttribute("height",V(n));var s=new G("mpadded",[u]);return a>=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});function Fo(e,t,r){for(var n=He(e,t,!1),a=t.sizeMultiplier/r.sizeMultiplier,i=0;i{var r=t.havingSize(e.size);return Fo(e.body,r,t)};Z({type:"sizing",names:is,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:is.indexOf(n)+1,body:i}},htmlBuilder:Q3,mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),n=dt(e.body,r),a=new G("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}});Z({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:n}=e,a=!1,i=!1,u=r[0]&&ce(r[0],"ordgroup");if(u)for(var s,l=0;l{var r=z([],[Te(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0),e.smashDepth&&(r.depth=0),e.smashHeight&&e.smashDepth)return z(["mord","smash"],[r],t);if(r.children)for(var n=0;n{var r=new G("mpadded",[Ae(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}});Z({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n}=e,a=r[0],i=t[0];return{type:"sqrt",mode:n.mode,body:i,index:a}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle());r.height===0&&(r.height=t.fontMetrics().xHeight),r=Lr(r,t);var n=t.fontMetrics(),a=n.defaultRuleThickness,i=a;t.style.idr.height+r.depth+u&&(u=(u+f-r.height-r.depth)/2);var g=l.height-r.height-u-c;r.style.paddingLeft=V(d);var p=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+g)},{type:"elem",elem:l},{type:"kern",size:c}]});if(e.index){var x=t.havingStyle(oe.SCRIPTSCRIPT),S=Te(e.index,x,t),D=.6*(p.height-p.depth),_=Ee({positionType:"shift",positionData:-D,children:[{type:"elem",elem:S}]}),N=z(["root"],[_]);return z(["mord","sqrt"],[N,p],t)}else return z(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:n}=e;return n?new G("mroot",[Ae(r,t),Ae(n,t)]):new G("msqrt",[Ae(r,t)])}});var Va={display:oe.DISPLAY,text:oe.TEXT,script:oe.SCRIPT,scriptscript:oe.SCRIPTSCRIPT};function K3(e){return e in Va}Z({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!0,r),u=n.slice(1,n.length-5);if(!K3(u))throw new Error("Unknown style: "+u);return{type:"styling",mode:a.mode,style:u,body:i}},htmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);return e.resetFont&&(n=n.withFont("")),Fo(e.body,n,t)},mathmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);e.resetFont&&(n=n.withFont(""));var a=dt(e.body,n),i=new G("mstyle",a),u={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},s=u[e.style];return i.setAttribute("scriptlevel",s[0]),i.setAttribute("displaystyle",s[1]),i}});var J3=function(t,r){var n=t.base;if(n)if(n.type==="op"){var a=n.limits&&(r.style.size===oe.DISPLAY.size||n.alwaysHandleSupSub);return a?zr:null}else if(n.type==="operatorname"){var i=n.alwaysHandleSupSub&&(r.style.size===oe.DISPLAY.size||n.limits);return i?Bo:null}else{if(n.type==="accent")return qt(n.base)?Ai:null;if(n.type==="horizBrace"){var u=!t.sub;return u===n.isOver?Ro:null}else return null}else return null};br({type:"supsub",htmlBuilder(e,t){var r=J3(e,t);if(r)return r(e,t);var{base:n,sup:a,sub:i}=e,u=Te(n,t),s,l,c=t.fontMetrics(),d=0,f=0,g=n&&qt(n);if(a){var p=t.havingStyle(t.style.sup());s=Te(a,p,t),g||(d=u.height-p.fontMetrics().supDrop*p.sizeMultiplier/t.sizeMultiplier)}if(i){var x=t.havingStyle(t.style.sub());l=Te(i,x,t),g||(f=u.depth+x.fontMetrics().subDrop*x.sizeMultiplier/t.sizeMultiplier)}var S;t.style===oe.DISPLAY?S=c.sup1:t.style.cramped?S=c.sup3:S=c.sup2;var D=t.sizeMultiplier,_=V(.5/c.ptPerEm/D),N=null;if(l){var M=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");if(u instanceof ct||M){var W;N=V(-((W=u.italic)!=null?W:0))}}var j;if(s&&l){d=Math.max(d,S,s.depth+.25*c.xHeight),f=Math.max(f,c.sub2);var L=c.defaultRuleThickness,ee=4*L;if(d-s.depth-(l.height-f)0&&(d+=re,f-=re)}var K=[{type:"elem",elem:l,shift:f,marginRight:_,marginLeft:N},{type:"elem",elem:s,shift:-d,marginRight:_}];j=Ee({positionType:"individualShift",children:K})}else if(l){f=Math.max(f,c.sub1,l.height-.8*c.xHeight);var R=[{type:"elem",elem:l,marginLeft:N,marginRight:_}];j=Ee({positionType:"shift",positionData:f,children:R})}else if(s)d=Math.max(d,S,s.depth+.25*c.xHeight),j=Ee({positionType:"shift",positionData:-d,children:[{type:"elem",elem:s,marginRight:_}]});else throw new Error("supsub must have either sup or sub.");var J=za(u,"right")||"mord";return z([J],[u,z(["msupsub"],[j])],t)},mathmlBuilder(e,t){var r=!1,n,a;e.base&&e.base.type==="horizBrace"&&(a=!!e.sup,a===e.base.isOver&&(r=!0,n=e.base.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var i=[Ae(e.base,t)];e.sub&&i.push(Ae(e.sub,t)),e.sup&&i.push(Ae(e.sup,t));var u;if(r)u=n?"mover":"munder";else if(e.sub)if(e.sup){var c=e.base;c&&c.type==="op"&&c.limits&&t.style===oe.DISPLAY||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(t.style===oe.DISPLAY||c.limits)?u="munderover":u="msubsup"}else{var l=e.base;l&&l.type==="op"&&l.limits&&(t.style===oe.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||t.style===oe.DISPLAY)?u="munder":u="msub"}else{var s=e.base;s&&s.type==="op"&&s.limits&&(t.style===oe.DISPLAY||s.alwaysHandleSupSub)||s&&s.type==="operatorname"&&s.alwaysHandleSupSub&&(s.limits||t.style===oe.DISPLAY)?u="mover":u="msup"}return new G(u,i)}});br({type:"atom",htmlBuilder(e,t){return Ti(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){var r=new G("mo",[bt(e.text,e.mode)]);if(e.family==="bin"){var n=vi(e,t);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});var Ho={mi:"italic",mn:"normal",mtext:"normal"};br({type:"mathord",htmlBuilder(e,t){return x0(e,t,"mathord")},mathmlBuilder(e,t){var r=new G("mi",[bt(e.text,e.mode,t)]),n=vi(e,t)||"italic";return n!==Ho[r.type]&&r.setAttribute("mathvariant",n),r}});br({type:"textord",htmlBuilder(e,t){return x0(e,t,"textord")},mathmlBuilder(e,t){var r=bt(e.text,e.mode,t),n=vi(e,t)||"normal",a;return e.mode==="text"?a=new G("mtext",[r]):/[0-9]/.test(e.text)?a=new G("mn",[r]):e.text==="\\prime"?a=new G("mo",[r]):a=new G("mi",[r]),n!==Ho[a.type]&&a.setAttribute("mathvariant",n),a}});var fa={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ma={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};br({type:"spacing",htmlBuilder(e,t){if(ma.hasOwnProperty(e.text)){var r=ma[e.text].className||"";if(e.mode==="text"){var n=x0(e,t,"textord");return n.classes.push(r),n}else return z(["mspace",r],[Ti(e.text,e.mode,t)],t)}else{if(fa.hasOwnProperty(e.text))return z(["mspace",fa[e.text]],[],t);throw new Y('Unknown type of space "'+e.text+'"')}},mathmlBuilder(e,t){var r;if(ma.hasOwnProperty(e.text))r=new G("mtext",[new Me(" ")]);else{if(fa.hasOwnProperty(e.text))return new G("mspace");throw new Y('Unknown type of space "'+e.text+'"')}return r}});var us=()=>{var e=new G("mtd",[]);return e.setAttribute("width","50%"),e};br({type:"tag",mathmlBuilder(e,t){var r=new G("mtable",[new G("mtr",[us(),new G("mtd",[tr(e.body,t)]),us(),new G("mtd",[tr(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var ss={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ls={"\\textbf":"textbf","\\textmd":"textmd"},Z3={"\\textit":"textit","\\textup":"textup"},os=(e,t)=>{var r=e.font;if(r){if(ss[r])return t.withTextFontFamily(ss[r]);if(ls[r])return t.withTextFontWeight(ls[r]);if(r==="\\emph")return t.fontShape==="textit"?t.withTextFontShape("textup"):t.withTextFontShape("textit")}else return t;return t.withTextFontShape(Z3[r])};Z({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"text",mode:r.mode,body:Re(a),font:n}},htmlBuilder(e,t){var r=os(e,t),n=He(e.body,r,!0);return z(["mord","text"],n,r)},mathmlBuilder(e,t){var r=os(e,t);return tr(e.body,r)}});Z({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=Or("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]});return z(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("munder",[Ae(e.body,t),r]);return n.setAttribute("accentunder","true"),n}});Z({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ee({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)],["vcenter"]);return new G("mrow",[r])}});Z({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new Y("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=cs(e),n=[],a=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"␣":" "),Qt=io,zo=`[ \r - ]`,e6="\\\\[a-zA-Z@]+",t6="\\\\[^\uD800-\uDFFF]",r6="("+e6+")"+zo+"*",n6=`\\\\( -|[ \r ]+ -?)[ \r ]*`,ja="[̀-ͯ]",a6=new RegExp(ja+"+$"),i6="("+zo+"+)|"+(n6+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(ja+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(ja+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+r6)+("|"+t6+")");class hs{constructor(t,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=r,this.tokenRegex=new RegExp(i6,"g"),this.catcodes={"%":14,"~":13}}setCatcode(t,r){this.catcodes[t]=r}lex(){var t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new ot("EOF",new rt(this,r,r));var n=this.tokenRegex.exec(t);if(n===null||n.index!==r)throw new Y("Unexpected character: '"+t[r]+"'",new ot(t[r],new rt(this,r,r+1)));var a=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[a]===14){var i=t.indexOf(` -`,this.tokenRegex.lastIndex);return i===-1?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=i+1,this.lex()}return new ot(a,new rt(this,r,this.tokenRegex.lastIndex))}}class u6{constructor(t,r){t===void 0&&(t={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=t,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Y("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var r in t)t.hasOwnProperty(r)&&(t[r]==null?delete this.current[r]:this.current[r]=t[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,r,n){if(n===void 0&&(n=!1),n){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][t]=r)}else{var i=this.undefStack[this.undefStack.length-1];i&&!i.hasOwnProperty(t)&&(i[t]=this.current[t])}r==null?delete this.current[t]:this.current[t]=r}}var s6=Io;E("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});E("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});E("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});E("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});E("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return t[0].length===1&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});E("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");E("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});var ds={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};E("\\char",function(e){var t=e.popToken(),r,n=0;if(t.text==="'")r=8,t=e.popToken();else if(t.text==='"')r=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")n=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new Y("\\char` missing argument");n=t.text.charCodeAt(0)}else r=10;if(r){if(n=ds[t.text],n==null||n>=r)throw new Y("Invalid base-"+r+" digit "+t.text);for(var a;(a=ds[e.future().text])!=null&&a{var a=e.consumeArg().tokens;if(a.length!==1)throw new Y("\\newcommand's first argument must be a macro name");var i=a[0].text,u=e.isDefined(i);if(u&&!t)throw new Y("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!u&&!r)throw new Y("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(a=e.consumeArg().tokens,a.length===1&&a[0].text==="["){for(var l="",c=e.expandNextToken();c.text!=="]"&&c.text!=="EOF";)l+=c.text,c=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new Y("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return u&&n||e.macros.set(i,{tokens:a,numArgs:s}),""};E("\\newcommand",e=>Ci(e,!1,!0,!1));E("\\renewcommand",e=>Ci(e,!0,!1,!1));E("\\providecommand",e=>Ci(e,!0,!0,!0));E("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(r=>r.text).join("")),""});E("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(r=>r.text).join("")),""});E("\\show",e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Qt[r],we.math[r],we.text[r]),""});E("\\bgroup","{");E("\\egroup","}");E("~","\\nobreakspace");E("\\lq","`");E("\\rq","'");E("\\aa","\\r a");E("\\AA","\\r A");E("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");E("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");E("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");E("ℬ","\\mathscr{B}");E("ℰ","\\mathscr{E}");E("ℱ","\\mathscr{F}");E("ℋ","\\mathscr{H}");E("ℐ","\\mathscr{I}");E("ℒ","\\mathscr{L}");E("ℳ","\\mathscr{M}");E("ℛ","\\mathscr{R}");E("ℭ","\\mathfrak{C}");E("ℌ","\\mathfrak{H}");E("ℨ","\\mathfrak{Z}");E("\\Bbbk","\\Bbb{k}");E("\\llap","\\mathllap{\\textrm{#1}}");E("\\rlap","\\mathrlap{\\textrm{#1}}");E("\\clap","\\mathclap{\\textrm{#1}}");E("\\mathstrut","\\vphantom{(}");E("\\underbar","\\underline{\\text{#1}}");E("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');E("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");E("\\ne","\\neq");E("≠","\\neq");E("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");E("∉","\\notin");E("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");E("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");E("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");E("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");E("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");E("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");E("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");E("⟂","\\perp");E("‼","\\mathclose{!\\mkern-0.8mu!}");E("∌","\\notni");E("⌜","\\ulcorner");E("⌝","\\urcorner");E("⌞","\\llcorner");E("⌟","\\lrcorner");E("©","\\copyright");E("®","\\textregistered");E("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');E("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');E("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');E("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');E("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");E("⋮","\\vdots");E("\\varGamma","\\mathit{\\Gamma}");E("\\varDelta","\\mathit{\\Delta}");E("\\varTheta","\\mathit{\\Theta}");E("\\varLambda","\\mathit{\\Lambda}");E("\\varXi","\\mathit{\\Xi}");E("\\varPi","\\mathit{\\Pi}");E("\\varSigma","\\mathit{\\Sigma}");E("\\varUpsilon","\\mathit{\\Upsilon}");E("\\varPhi","\\mathit{\\Phi}");E("\\varPsi","\\mathit{\\Psi}");E("\\varOmega","\\mathit{\\Omega}");E("\\substack","\\begin{subarray}{c}#1\\end{subarray}");E("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");E("\\boxed","\\fbox{$\\displaystyle{#1}$}");E("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");E("\\implies","\\DOTSB\\;\\Longrightarrow\\;");E("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");E("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");E("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var fs={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},l6=new Set(["bin","rel"]);E("\\dots",function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in fs?t=fs[r]:(r.slice(0,4)==="\\not"||r in we.math&&l6.has(we.math[r].group))&&(t="\\dotsb"),t});var _i={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};E("\\dotso",function(e){var t=e.future().text;return t in _i?"\\ldots\\,":"\\ldots"});E("\\dotsc",function(e){var t=e.future().text;return t in _i&&t!==","?"\\ldots\\,":"\\ldots"});E("\\cdots",function(e){var t=e.future().text;return t in _i?"\\@cdots\\,":"\\@cdots"});E("\\dotsb","\\cdots");E("\\dotsm","\\cdots");E("\\dotsi","\\!\\cdots");E("\\dotsx","\\ldots\\,");E("\\DOTSI","\\relax");E("\\DOTSB","\\relax");E("\\DOTSX","\\relax");E("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");E("\\,","\\tmspace+{3mu}{.1667em}");E("\\thinspace","\\,");E("\\>","\\mskip{4mu}");E("\\:","\\tmspace+{4mu}{.2222em}");E("\\medspace","\\:");E("\\;","\\tmspace+{5mu}{.2777em}");E("\\thickspace","\\;");E("\\!","\\tmspace-{3mu}{.1667em}");E("\\negthinspace","\\!");E("\\negmedspace","\\tmspace-{4mu}{.2222em}");E("\\negthickspace","\\tmspace-{5mu}{.277em}");E("\\enspace","\\kern.5em ");E("\\enskip","\\hskip.5em\\relax");E("\\quad","\\hskip1em\\relax");E("\\qquad","\\hskip2em\\relax");E("\\tag","\\@ifstar\\tag@literal\\tag@paren");E("\\tag@paren","\\tag@literal{({#1})}");E("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new Y("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});E("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");E("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");E("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");E("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");E("\\newline","\\\\\\relax");E("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Uo=V(wt["Main-Regular"][84][1]-.7*wt["Main-Regular"][65][1]);E("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");E("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");E("\\hspace","\\@ifstar\\@hspacer\\@hspace");E("\\@hspace","\\hskip #1\\relax");E("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");E("\\ordinarycolon",":");E("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");E("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');E("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');E("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');E("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');E("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');E("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');E("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');E("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');E("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');E("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');E("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');E("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');E("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');E("∷","\\dblcolon");E("∹","\\eqcolon");E("≔","\\coloneqq");E("≕","\\eqqcolon");E("⩴","\\Coloneqq");E("\\ratio","\\vcentcolon");E("\\coloncolon","\\dblcolon");E("\\colonequals","\\coloneqq");E("\\coloncolonequals","\\Coloneqq");E("\\equalscolon","\\eqqcolon");E("\\equalscoloncolon","\\Eqqcolon");E("\\colonminus","\\coloneq");E("\\coloncolonminus","\\Coloneq");E("\\minuscolon","\\eqcolon");E("\\minuscoloncolon","\\Eqcolon");E("\\coloncolonapprox","\\Colonapprox");E("\\coloncolonsim","\\Colonsim");E("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");E("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");E("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");E("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");E("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");E("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");E("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");E("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");E("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");E("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");E("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");E("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");E("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");E("\\nleqq","\\html@mathml{\\@nleqq}{≰}");E("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");E("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");E("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");E("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");E("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");E("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");E("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");E("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");E("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");E("\\imath","\\html@mathml{\\@imath}{ı}");E("\\jmath","\\html@mathml{\\@jmath}{ȷ}");E("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");E("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");E("⟦","\\llbracket");E("⟧","\\rrbracket");E("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");E("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");E("⦃","\\lBrace");E("⦄","\\rBrace");E("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");E("⦵","\\minuso");E("\\darr","\\downarrow");E("\\dArr","\\Downarrow");E("\\Darr","\\Downarrow");E("\\lang","\\langle");E("\\rang","\\rangle");E("\\uarr","\\uparrow");E("\\uArr","\\Uparrow");E("\\Uarr","\\Uparrow");E("\\N","\\mathbb{N}");E("\\R","\\mathbb{R}");E("\\Z","\\mathbb{Z}");E("\\alef","\\aleph");E("\\alefsym","\\aleph");E("\\Alpha","\\mathrm{A}");E("\\Beta","\\mathrm{B}");E("\\bull","\\bullet");E("\\Chi","\\mathrm{X}");E("\\clubs","\\clubsuit");E("\\cnums","\\mathbb{C}");E("\\Complex","\\mathbb{C}");E("\\Dagger","\\ddagger");E("\\diamonds","\\diamondsuit");E("\\empty","\\emptyset");E("\\Epsilon","\\mathrm{E}");E("\\Eta","\\mathrm{H}");E("\\exist","\\exists");E("\\harr","\\leftrightarrow");E("\\hArr","\\Leftrightarrow");E("\\Harr","\\Leftrightarrow");E("\\hearts","\\heartsuit");E("\\image","\\Im");E("\\infin","\\infty");E("\\Iota","\\mathrm{I}");E("\\isin","\\in");E("\\Kappa","\\mathrm{K}");E("\\larr","\\leftarrow");E("\\lArr","\\Leftarrow");E("\\Larr","\\Leftarrow");E("\\lrarr","\\leftrightarrow");E("\\lrArr","\\Leftrightarrow");E("\\Lrarr","\\Leftrightarrow");E("\\Mu","\\mathrm{M}");E("\\natnums","\\mathbb{N}");E("\\Nu","\\mathrm{N}");E("\\Omicron","\\mathrm{O}");E("\\plusmn","\\pm");E("\\rarr","\\rightarrow");E("\\rArr","\\Rightarrow");E("\\Rarr","\\Rightarrow");E("\\real","\\Re");E("\\reals","\\mathbb{R}");E("\\Reals","\\mathbb{R}");E("\\Rho","\\mathrm{P}");E("\\sdot","\\cdot");E("\\sect","\\S");E("\\spades","\\spadesuit");E("\\sub","\\subset");E("\\sube","\\subseteq");E("\\supe","\\supseteq");E("\\Tau","\\mathrm{T}");E("\\thetasym","\\vartheta");E("\\weierp","\\wp");E("\\Zeta","\\mathrm{Z}");E("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");E("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");E("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");E("\\bra","\\mathinner{\\langle{#1}|}");E("\\ket","\\mathinner{|{#1}\\rangle}");E("\\braket","\\mathinner{\\langle{#1}\\rangle}");E("\\Bra","\\left\\langle#1\\right|");E("\\Ket","\\left|#1\\right\\rangle");var qo=e=>t=>{var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,u=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=f=>g=>{e&&(g.macros.set("|",u),a.length&&g.macros.set("\\|",s));var p=f;if(!f&&a.length){var x=g.future();x.text==="|"&&(g.popToken(),p=!0)}return{tokens:p?a:n,numArgs:0}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var c=t.consumeArg().tokens,d=t.expandTokens([...i,...c,...r]);return t.macros.endGroup(),{tokens:d.reverse(),numArgs:0}};E("\\bra@ket",qo(!1));E("\\bra@set",qo(!0));E("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");E("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");E("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");E("\\angln","{\\angl n}");E("\\blue","\\textcolor{##6495ed}{#1}");E("\\orange","\\textcolor{##ffa500}{#1}");E("\\pink","\\textcolor{##ff00af}{#1}");E("\\red","\\textcolor{##df0030}{#1}");E("\\green","\\textcolor{##28ae7b}{#1}");E("\\gray","\\textcolor{gray}{#1}");E("\\purple","\\textcolor{##9d38bd}{#1}");E("\\blueA","\\textcolor{##ccfaff}{#1}");E("\\blueB","\\textcolor{##80f6ff}{#1}");E("\\blueC","\\textcolor{##63d9ea}{#1}");E("\\blueD","\\textcolor{##11accd}{#1}");E("\\blueE","\\textcolor{##0c7f99}{#1}");E("\\tealA","\\textcolor{##94fff5}{#1}");E("\\tealB","\\textcolor{##26edd5}{#1}");E("\\tealC","\\textcolor{##01d1c1}{#1}");E("\\tealD","\\textcolor{##01a995}{#1}");E("\\tealE","\\textcolor{##208170}{#1}");E("\\greenA","\\textcolor{##b6ffb0}{#1}");E("\\greenB","\\textcolor{##8af281}{#1}");E("\\greenC","\\textcolor{##74cf70}{#1}");E("\\greenD","\\textcolor{##1fab54}{#1}");E("\\greenE","\\textcolor{##0d923f}{#1}");E("\\goldA","\\textcolor{##ffd0a9}{#1}");E("\\goldB","\\textcolor{##ffbb71}{#1}");E("\\goldC","\\textcolor{##ff9c39}{#1}");E("\\goldD","\\textcolor{##e07d10}{#1}");E("\\goldE","\\textcolor{##a75a05}{#1}");E("\\redA","\\textcolor{##fca9a9}{#1}");E("\\redB","\\textcolor{##ff8482}{#1}");E("\\redC","\\textcolor{##f9685d}{#1}");E("\\redD","\\textcolor{##e84d39}{#1}");E("\\redE","\\textcolor{##bc2612}{#1}");E("\\maroonA","\\textcolor{##ffbde0}{#1}");E("\\maroonB","\\textcolor{##ff92c6}{#1}");E("\\maroonC","\\textcolor{##ed5fa6}{#1}");E("\\maroonD","\\textcolor{##ca337c}{#1}");E("\\maroonE","\\textcolor{##9e034e}{#1}");E("\\purpleA","\\textcolor{##ddd7ff}{#1}");E("\\purpleB","\\textcolor{##c6b9fc}{#1}");E("\\purpleC","\\textcolor{##aa87ff}{#1}");E("\\purpleD","\\textcolor{##7854ab}{#1}");E("\\purpleE","\\textcolor{##543b78}{#1}");E("\\mintA","\\textcolor{##f5f9e8}{#1}");E("\\mintB","\\textcolor{##edf2df}{#1}");E("\\mintC","\\textcolor{##e0e5cc}{#1}");E("\\grayA","\\textcolor{##f6f7f7}{#1}");E("\\grayB","\\textcolor{##f0f1f2}{#1}");E("\\grayC","\\textcolor{##e3e5e6}{#1}");E("\\grayD","\\textcolor{##d6d8da}{#1}");E("\\grayE","\\textcolor{##babec2}{#1}");E("\\grayF","\\textcolor{##888d93}{#1}");E("\\grayG","\\textcolor{##626569}{#1}");E("\\grayH","\\textcolor{##3b3e40}{#1}");E("\\grayI","\\textcolor{##21242c}{#1}");E("\\kaBlue","\\textcolor{##314453}{#1}");E("\\kaGreen","\\textcolor{##71B307}{#1}");var Yo={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class o6{constructor(t,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new u6(s6,r.macros),this.mode=n,this.stack=[]}feed(t){this.lexer=new hs(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var r,n,a;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:a,end:n}=this.consumeArg(["]"])}else({tokens:a,start:r,end:n}=this.consumeArg());return this.pushToken(new ot("EOF",n.loc)),this.pushTokens(a),new ot("",rt.range(r,n))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var r=[],n=t&&t.length>0;n||this.consumeSpaces();var a=this.future(),i,u=0,s=0;do{if(i=this.popToken(),r.push(i),i.text==="{")++u;else if(i.text==="}"){if(--u,u===-1)throw new Y("Extra }",i)}else if(i.text==="EOF")throw new Y("Unexpected end of input in a macro argument, expected '"+(t&&n?t[s]:"}")+"'",i);if(t&&n)if((u===0||u===1&&t[s]==="{")&&i.text===t[s]){if(++s,s===t.length){r.splice(-s,s);break}}else s=0}while(u!==0||n);return a.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:a,end:i}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new Y("The length of delimiters doesn't match the number of args!");for(var n=r[0],a=0;athis.settings.maxExpand)throw new Y("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var r=this.popToken(),n=r.text,a=r.noexpand?null:this._getExpansion(n);if(a==null||t&&a.unexpandable){if(t&&a==null&&n[0]==="\\"&&!this.isDefined(n))throw new Y("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var i=a.tokens,u=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs){i=i.slice();for(var s=i.length-1;s>=0;--s){var l=i[s];if(l.text==="#"){if(s===0)throw new Y("Incomplete placeholder at end of macro body",l);if(l=i[--s],l.text==="#")i.splice(s+1,1);else if(/^[1-9]$/.test(l.text))i.splice(s,2,...u[+l.text-1]);else throw new Y("Not a valid argument number",l)}}}return this.pushTokens(i),i.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}}expandMacro(t){return this.macros.has(t)?this.expandTokens([new ot(t)]):void 0}expandTokens(t){var r=[],n=this.stack.length;for(this.pushTokens(t);this.stack.length>n;)if(this.expandOnce(!0)===!1){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),r.push(a)}return this.countExpansion(r.length),r}expandMacroAsText(t){var r=this.expandMacro(t);return r&&r.map(n=>n.text).join("")}_getExpansion(t){var r=this.macros.get(t);if(r==null)return r;if(t.length===1){var n=this.lexer.catcodes[t];if(n!=null&&n!==13)return}var a=typeof r=="function"?r(this):r;if(typeof a=="string"){var i=0;if(a.includes("#"))for(var u=a.replace(/##/g,"");u.includes("#"+(i+1));)++i;for(var s=new hs(a,this.settings),l=[],c=s.lex();c.text!=="EOF";)l.push(c),c=s.lex();l.reverse();var d={tokens:l,numArgs:i};return d}return a}isDefined(t){return this.macros.has(t)||Qt.hasOwnProperty(t)||we.math.hasOwnProperty(t)||we.text.hasOwnProperty(t)||Yo.hasOwnProperty(t)}isExpandable(t){var r=this.macros.get(t);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Qt.hasOwnProperty(t)&&!Qt[t].primitive}}var ms=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,jn=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),pa={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ps={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};let Go=class Vo{constructor(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new o6(t,r,this.mode),this.settings=r,this.leftrightDepth=0,this.nextToken=null}expect(t,r){if(r===void 0&&(r=!0),this.fetch().text!==t)throw new Y("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var r=this.nextToken;this.consume(),this.gullet.pushToken(new ot("}")),this.gullet.pushTokens(t);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(t,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var a=this.fetch();if(Vo.endOfExpression.has(a.text)||r&&a.text===r||t&&Qt[a.text]&&Qt[a.text].infix)break;var i=this.parseAtom(r);if(i){if(i.type==="internal")continue}else break;n.push(i)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){for(var r=-1,n,a=0;a=128)this.settings.strict&&($l(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),t)),u={type:"textord",mode:"text",loc:rt.range(t),text:r};else return null;if(this.consume(),i)for(var d=0;dc&&(c=d):d&&(c!==void 0&&c>-1&&l.push(` -`.repeat(c)||" "),c=-1,l.push(d))}return l.join("")}function ec(e,t,r){return e.type==="element"?F6(e,t,r):e.type==="text"?r.whitespace==="normal"?tc(e,r):H6(e):[]}function F6(e,t,r){const n=rc(e,r),a=e.children||[];let i=-1,u=[];if(P6(e))return u;let s,l;for(Xa(e)||ks(e)&&xs(t,e,ks)?l=` -`:M6(e)?(s=2,l=2):Zo(e)&&(s=1,l=1);++i-1&&i<=t.length){let u=0;for(;;){let s=r[u];if(s===void 0){const l=Ss(t,r[u-1]);s=l===-1?t.length+1:l+1,r[u]=s}if(s>i)return{line:u+1,column:i-(u>0?r[u-1]:0)+1,offset:i};u++}}}function a(i){if(i&&typeof i.line=="number"&&typeof i.column=="number"&&!Number.isNaN(i.line)&&!Number.isNaN(i.column)){for(;r.length1?r[i.line-2]:0)+i.column-1;if(u=55296&&e<=57343}function cp(e){return e>=56320&&e<=57343}function hp(e,t){return(e-55296)*1024+9216+t}function sc(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function lc(e){return e>=64976&&e<=65007||op.has(e)}var P;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(P||(P={}));const dp=65536;class fp{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=dp,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,r){const{line:n,col:a,offset:i}=this,u=a+r,s=i+r;return{code:t,startLine:n,endLine:n,startCol:u,endCol:u,startOffset:s,endOffset:s}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){const r=this.html.charCodeAt(this.pos+1);if(cp(r))return this.pos++,this._addGap(),hp(t,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,T.EOF;return this._err(P.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,r){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,r){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(t,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;const n=this.html.charCodeAt(r);return n===T.CARRIAGE_RETURN?T.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;let t=this.html.charCodeAt(this.pos);return t===T.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,T.LINE_FEED):t===T.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,uc(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===T.LINE_FEED||t===T.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){sc(t)?this._err(P.controlCharacterInInputStream):lc(t)&&this._err(P.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}const mp=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),pp=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function gp(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=pp.get(e))!==null&&t!==void 0?t:e}var qe;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(qe||(qe={}));const bp=32;var Kt;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(Kt||(Kt={}));function $a(e){return e>=qe.ZERO&&e<=qe.NINE}function Ep(e){return e>=qe.UPPER_A&&e<=qe.UPPER_F||e>=qe.LOWER_A&&e<=qe.LOWER_F}function Tp(e){return e>=qe.UPPER_A&&e<=qe.UPPER_Z||e>=qe.LOWER_A&&e<=qe.LOWER_Z||$a(e)}function xp(e){return e===qe.EQUALS||Tp(e)}var Ue;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(Ue||(Ue={}));var Ft;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Ft||(Ft={}));class yp{constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n,this.state=Ue.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Ft.Strict}startEntity(t){this.decodeMode=t,this.state=Ue.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,r){switch(this.state){case Ue.EntityStart:return t.charCodeAt(r)===qe.NUM?(this.state=Ue.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=Ue.NamedEntity,this.stateNamedEntity(t,r));case Ue.NumericStart:return this.stateNumericStart(t,r);case Ue.NumericDecimal:return this.stateNumericDecimal(t,r);case Ue.NumericHex:return this.stateNumericHex(t,r);case Ue.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|bp)===qe.LOWER_X?(this.state=Ue.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=Ue.NumericDecimal,this.stateNumericDecimal(t,r))}addToNumericResult(t,r,n,a){if(r!==n){const i=n-r;this.result=this.result*Math.pow(a,i)+Number.parseInt(t.substr(r,i),a),this.consumed+=i}}stateNumericHex(t,r){const n=r;for(;r>14;for(;r>14,i!==0){if(u===qe.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Ft.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;const{result:r,decodeTree:n}=this,a=(n[r]&Kt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,a,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){const{decodeTree:a}=this;return this.emitCodePoint(r===1?a[t]&~Kt.VALUE_LENGTH:a[t+1],n),r===3&&this.emitCodePoint(a[t+2],n),n}end(){var t;switch(this.state){case Ue.NamedEntity:return this.result!==0&&(this.decodeMode!==Ft.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ue.NumericDecimal:return this.emitNumericEntity(0,2);case Ue.NumericHex:return this.emitNumericEntity(0,3);case Ue.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ue.EntityStart:return 0}}}function vp(e,t,r,n){const a=(t&Kt.BRANCH_LENGTH)>>7,i=t&Kt.JUMP_TABLE;if(a===0)return i!==0&&n===i?r:-1;if(i){const l=n-i;return l<0||l>=a?-1:e[r+l]-1}let u=r,s=u+a-1;for(;u<=s;){const l=u+s>>>1,c=e[l];if(cn)s=l-1;else return e[l+a]}return-1}var H;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(H||(H={}));var mr;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(mr||(mr={}));var pt;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})(pt||(pt={}));var O;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(O||(O={}));var o;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(o||(o={}));const Ap=new Map([[O.A,o.A],[O.ADDRESS,o.ADDRESS],[O.ANNOTATION_XML,o.ANNOTATION_XML],[O.APPLET,o.APPLET],[O.AREA,o.AREA],[O.ARTICLE,o.ARTICLE],[O.ASIDE,o.ASIDE],[O.B,o.B],[O.BASE,o.BASE],[O.BASEFONT,o.BASEFONT],[O.BGSOUND,o.BGSOUND],[O.BIG,o.BIG],[O.BLOCKQUOTE,o.BLOCKQUOTE],[O.BODY,o.BODY],[O.BR,o.BR],[O.BUTTON,o.BUTTON],[O.CAPTION,o.CAPTION],[O.CENTER,o.CENTER],[O.CODE,o.CODE],[O.COL,o.COL],[O.COLGROUP,o.COLGROUP],[O.DD,o.DD],[O.DESC,o.DESC],[O.DETAILS,o.DETAILS],[O.DIALOG,o.DIALOG],[O.DIR,o.DIR],[O.DIV,o.DIV],[O.DL,o.DL],[O.DT,o.DT],[O.EM,o.EM],[O.EMBED,o.EMBED],[O.FIELDSET,o.FIELDSET],[O.FIGCAPTION,o.FIGCAPTION],[O.FIGURE,o.FIGURE],[O.FONT,o.FONT],[O.FOOTER,o.FOOTER],[O.FOREIGN_OBJECT,o.FOREIGN_OBJECT],[O.FORM,o.FORM],[O.FRAME,o.FRAME],[O.FRAMESET,o.FRAMESET],[O.H1,o.H1],[O.H2,o.H2],[O.H3,o.H3],[O.H4,o.H4],[O.H5,o.H5],[O.H6,o.H6],[O.HEAD,o.HEAD],[O.HEADER,o.HEADER],[O.HGROUP,o.HGROUP],[O.HR,o.HR],[O.HTML,o.HTML],[O.I,o.I],[O.IMG,o.IMG],[O.IMAGE,o.IMAGE],[O.INPUT,o.INPUT],[O.IFRAME,o.IFRAME],[O.KEYGEN,o.KEYGEN],[O.LABEL,o.LABEL],[O.LI,o.LI],[O.LINK,o.LINK],[O.LISTING,o.LISTING],[O.MAIN,o.MAIN],[O.MALIGNMARK,o.MALIGNMARK],[O.MARQUEE,o.MARQUEE],[O.MATH,o.MATH],[O.MENU,o.MENU],[O.META,o.META],[O.MGLYPH,o.MGLYPH],[O.MI,o.MI],[O.MO,o.MO],[O.MN,o.MN],[O.MS,o.MS],[O.MTEXT,o.MTEXT],[O.NAV,o.NAV],[O.NOBR,o.NOBR],[O.NOFRAMES,o.NOFRAMES],[O.NOEMBED,o.NOEMBED],[O.NOSCRIPT,o.NOSCRIPT],[O.OBJECT,o.OBJECT],[O.OL,o.OL],[O.OPTGROUP,o.OPTGROUP],[O.OPTION,o.OPTION],[O.P,o.P],[O.PARAM,o.PARAM],[O.PLAINTEXT,o.PLAINTEXT],[O.PRE,o.PRE],[O.RB,o.RB],[O.RP,o.RP],[O.RT,o.RT],[O.RTC,o.RTC],[O.RUBY,o.RUBY],[O.S,o.S],[O.SCRIPT,o.SCRIPT],[O.SEARCH,o.SEARCH],[O.SECTION,o.SECTION],[O.SELECT,o.SELECT],[O.SOURCE,o.SOURCE],[O.SMALL,o.SMALL],[O.SPAN,o.SPAN],[O.STRIKE,o.STRIKE],[O.STRONG,o.STRONG],[O.STYLE,o.STYLE],[O.SUB,o.SUB],[O.SUMMARY,o.SUMMARY],[O.SUP,o.SUP],[O.TABLE,o.TABLE],[O.TBODY,o.TBODY],[O.TEMPLATE,o.TEMPLATE],[O.TEXTAREA,o.TEXTAREA],[O.TFOOT,o.TFOOT],[O.TD,o.TD],[O.TH,o.TH],[O.THEAD,o.THEAD],[O.TITLE,o.TITLE],[O.TR,o.TR],[O.TRACK,o.TRACK],[O.TT,o.TT],[O.U,o.U],[O.UL,o.UL],[O.SVG,o.SVG],[O.VAR,o.VAR],[O.WBR,o.WBR],[O.XMP,o.XMP]]);function qr(e){var t;return(t=Ap.get(e))!==null&&t!==void 0?t:o.UNKNOWN}const U=o,kp={[H.HTML]:new Set([U.ADDRESS,U.APPLET,U.AREA,U.ARTICLE,U.ASIDE,U.BASE,U.BASEFONT,U.BGSOUND,U.BLOCKQUOTE,U.BODY,U.BR,U.BUTTON,U.CAPTION,U.CENTER,U.COL,U.COLGROUP,U.DD,U.DETAILS,U.DIR,U.DIV,U.DL,U.DT,U.EMBED,U.FIELDSET,U.FIGCAPTION,U.FIGURE,U.FOOTER,U.FORM,U.FRAME,U.FRAMESET,U.H1,U.H2,U.H3,U.H4,U.H5,U.H6,U.HEAD,U.HEADER,U.HGROUP,U.HR,U.HTML,U.IFRAME,U.IMG,U.INPUT,U.LI,U.LINK,U.LISTING,U.MAIN,U.MARQUEE,U.MENU,U.META,U.NAV,U.NOEMBED,U.NOFRAMES,U.NOSCRIPT,U.OBJECT,U.OL,U.P,U.PARAM,U.PLAINTEXT,U.PRE,U.SCRIPT,U.SECTION,U.SELECT,U.SOURCE,U.STYLE,U.SUMMARY,U.TABLE,U.TBODY,U.TD,U.TEMPLATE,U.TEXTAREA,U.TFOOT,U.TH,U.THEAD,U.TITLE,U.TR,U.TRACK,U.UL,U.WBR,U.XMP]),[H.MATHML]:new Set([U.MI,U.MO,U.MN,U.MS,U.MTEXT,U.ANNOTATION_XML]),[H.SVG]:new Set([U.TITLE,U.FOREIGN_OBJECT,U.DESC]),[H.XLINK]:new Set,[H.XML]:new Set,[H.XMLNS]:new Set},Qa=new Set([U.H1,U.H2,U.H3,U.H4,U.H5,U.H6]);O.STYLE,O.SCRIPT,O.XMP,O.IFRAME,O.NOEMBED,O.NOFRAMES,O.PLAINTEXT;var y;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(y||(y={}));const De={DATA:y.DATA,RCDATA:y.RCDATA,RAWTEXT:y.RAWTEXT,SCRIPT_DATA:y.SCRIPT_DATA,PLAINTEXT:y.PLAINTEXT,CDATA_SECTION:y.CDATA_SECTION};function Sp(e){return e>=T.DIGIT_0&&e<=T.DIGIT_9}function rn(e){return e>=T.LATIN_CAPITAL_A&&e<=T.LATIN_CAPITAL_Z}function wp(e){return e>=T.LATIN_SMALL_A&&e<=T.LATIN_SMALL_Z}function Xt(e){return wp(e)||rn(e)}function Cs(e){return Xt(e)||Sp(e)}function Wn(e){return e+32}function cc(e){return e===T.SPACE||e===T.LINE_FEED||e===T.TABULATION||e===T.FORM_FEED}function _s(e){return cc(e)||e===T.SOLIDUS||e===T.GREATER_THAN_SIGN}function Cp(e){return e===T.NULL?P.nullCharacterReference:e>1114111?P.characterReferenceOutsideUnicodeRange:uc(e)?P.surrogateCharacterReference:lc(e)?P.noncharacterCharacterReference:sc(e)||e===T.CARRIAGE_RETURN?P.controlCharacterReference:null}class _p{constructor(t,r){this.options=t,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=y.DATA,this.returnState=y.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new fp(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new yp(mp,(n,a)=>{this.preprocessor.pos=this.entityStartPos+a-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(P.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(P.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{const a=Cp(n);a&&this._err(a,1)}}:void 0)}_err(t,r=0){var n,a;(a=(n=this.handler).onParseError)===null||a===void 0||a.call(n,this.preprocessor.getError(t,r))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.())}write(t,r,n){this.active=!0,this.preprocessor.write(t,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let r=0;r0&&this._err(P.endTagWithAttributes),t.selfClosing&&this._err(P.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case de.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case de.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case de.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){const t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:de.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,r)}_emitCodePoint(t){const r=cc(t)?de.WHITESPACE_CHARACTER:t===T.NULL?de.NULL_CHARACTER:de.CHARACTER;this._appendCharToCurrentCharacterToken(r,String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(de.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=y.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Ft.Attribute:Ft.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===y.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case y.DATA:{this._stateData(t);break}case y.RCDATA:{this._stateRcdata(t);break}case y.RAWTEXT:{this._stateRawtext(t);break}case y.SCRIPT_DATA:{this._stateScriptData(t);break}case y.PLAINTEXT:{this._statePlaintext(t);break}case y.TAG_OPEN:{this._stateTagOpen(t);break}case y.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case y.TAG_NAME:{this._stateTagName(t);break}case y.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case y.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case y.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case y.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case y.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case y.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case y.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case y.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case y.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case y.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case y.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case y.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case y.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case y.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case y.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case y.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case y.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case y.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case y.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case y.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case y.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case y.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case y.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case y.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case y.BOGUS_COMMENT:{this._stateBogusComment(t);break}case y.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case y.COMMENT_START:{this._stateCommentStart(t);break}case y.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case y.COMMENT:{this._stateComment(t);break}case y.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case y.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case y.COMMENT_END:{this._stateCommentEnd(t);break}case y.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case y.DOCTYPE:{this._stateDoctype(t);break}case y.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case y.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case y.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case y.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case y.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case y.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case y.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case y.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case y.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case y.CDATA_SECTION:{this._stateCdataSection(t);break}case y.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case y.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case y.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case y.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.TAG_OPEN;break}case T.AMPERSAND:{this._startCharacterReference();break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitCodePoint(t);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case T.AMPERSAND:{this._startCharacterReference();break}case T.LESS_THAN_SIGN:{this.state=y.RCDATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.RAWTEXT_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.SCRIPT_DATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(Xt(t))this._createStartTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.EXCLAMATION_MARK:{this.state=y.MARKUP_DECLARATION_OPEN;break}case T.SOLIDUS:{this.state=y.END_TAG_OPEN;break}case T.QUESTION_MARK:{this._err(P.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=y.BOGUS_COMMENT,this._stateBogusComment(t);break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(P.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=y.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(Xt(t))this._createEndTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.GREATER_THAN_SIGN:{this._err(P.missingEndTagName),this.state=y.DATA;break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===T.SOLIDUS?this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Xt(t)?(this._emitChars("<"),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=y.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){Xt(t)?(this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===T.SOLIDUS?(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(et.SCRIPT,!1)&&_s(this.preprocessor.peek(et.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,r){const n=this._indexOf(t);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(t,r,n){const a=this._indexOf(t)+1;this.items.splice(a,0,r),this.tagIDs.splice(a,0,n),this.stackTop++,a===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,a===this.stackTop)}popUntilTagNamePopped(t){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(t,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==H.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(t){for(;this.stackTop>=t;){const r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(t,r){const n=this._indexOfTagNames(t,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(Lp,H.HTML)}clearBackToTableBodyContext(){this.clearBackTo(Op,H.HTML)}clearBackToTableRowContext(){this.clearBackTo(Dp,H.HTML)}remove(t){const r=this._indexOf(t);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===o.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){const r=this._indexOf(t)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===o.HTML}hasInDynamicScope(t,r){for(let n=this.stackTop;n>=0;n--){const a=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case H.HTML:{if(a===t)return!0;if(r.has(a))return!1;break}case H.SVG:{if(Ds.has(a))return!1;break}case H.MATHML:{if(Ns.has(a))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,s0)}hasInListItemScope(t){return this.hasInDynamicScope(t,Ip)}hasInButtonScope(t){return this.hasInDynamicScope(t,Np)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case H.HTML:{if(Qa.has(r))return!0;if(s0.has(r))return!1;break}case H.SVG:{if(Ds.has(r))return!1;break}case H.MATHML:{if(Ns.has(r))return!1;break}}}return!0}hasInTableScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===H.HTML)switch(this.tagIDs[t]){case o.TBODY:case o.THEAD:case o.TFOOT:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasInSelectScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.OPTION:case o.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&hc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Is.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Is.has(this.currentTagId);)this.pop()}}const ga=3;var St;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(St||(St={}));const Os={type:St.Marker};class Pp{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,r){const n=[],a=r.length,i=this.treeAdapter.getTagName(t),u=this.treeAdapter.getNamespaceURI(t);for(let s=0;s[u.name,u.value]));let i=0;for(let u=0;ua.get(l.name)===l.value)&&(i+=1,i>=ga&&this.entries.splice(s.idx,1))}}insertMarker(){this.entries.unshift(Os)}pushElement(t,r){this._ensureNoahArkCondition(t),this.entries.unshift({type:St.Element,element:t,token:r})}insertElementAfterBookmark(t,r){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:St.Element,element:t,token:r})}removeEntry(t){const r=this.entries.indexOf(t);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){const t=this.entries.indexOf(Os);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){const r=this.entries.find(n=>n.type===St.Marker||this.treeAdapter.getTagName(n.element)===t);return r&&r.type===St.Element?r:null}getElementEntry(t){return this.entries.find(r=>r.type===St.Element&&r.element===t)}}const $t={createDocument(){return{nodeName:"#document",mode:pt.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){const n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,r,n){const a=e.childNodes.find(i=>i.nodeName==="#documentType");if(a)a.name=t,a.publicId=r,a.systemId=n;else{const i={nodeName:"#documentType",name:t,publicId:r,systemId:n,parentNode:null};$t.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const r=e.childNodes[e.childNodes.length-1];if($t.isTextNode(r)){r.value+=t;return}}$t.appendChild(e,$t.createTextNode(t))},insertTextBefore(e,t,r){const n=e.childNodes[e.childNodes.indexOf(r)-1];n&&$t.isTextNode(n)?n.value+=t:$t.insertBefore(e,$t.createTextNode(t),r)},adoptAttributes(e,t){const r=new Set(e.attrs.map(n=>n.name));for(let n=0;ne.startsWith(r))}function qp(e){return e.name===dc&&e.publicId===null&&(e.systemId===null||e.systemId===Bp)}function Yp(e){if(e.name!==dc)return pt.QUIRKS;const{systemId:t}=e;if(t&&t.toLowerCase()===Fp)return pt.QUIRKS;let{publicId:r}=e;if(r!==null){if(r=r.toLowerCase(),zp.has(r))return pt.QUIRKS;let n=t===null?Hp:fc;if(Ls(r,n))return pt.QUIRKS;if(n=t===null?mc:Up,Ls(r,n))return pt.LIMITED_QUIRKS}return pt.NO_QUIRKS}const Rs={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},Gp="definitionurl",Vp="definitionURL",jp=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),Wp=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:H.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:H.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:H.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:H.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:H.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:H.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:H.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:H.XML}],["xml:space",{prefix:"xml",name:"space",namespace:H.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:H.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:H.XMLNS}]]),Xp=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),$p=new Set([o.B,o.BIG,o.BLOCKQUOTE,o.BODY,o.BR,o.CENTER,o.CODE,o.DD,o.DIV,o.DL,o.DT,o.EM,o.EMBED,o.H1,o.H2,o.H3,o.H4,o.H5,o.H6,o.HEAD,o.HR,o.I,o.IMG,o.LI,o.LISTING,o.MENU,o.META,o.NOBR,o.OL,o.P,o.PRE,o.RUBY,o.S,o.SMALL,o.SPAN,o.STRONG,o.STRIKE,o.SUB,o.SUP,o.TABLE,o.TT,o.U,o.UL,o.VAR]);function Qp(e){const t=e.tagID;return t===o.FONT&&e.attrs.some(({name:n})=>n===mr.COLOR||n===mr.SIZE||n===mr.FACE)||$p.has(t)}function pc(e){for(let t=0;t0&&this._setContextModes(t,r)}onItemPop(t,r){var n,a;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(a=(n=this.treeAdapter).onItemPop)===null||a===void 0||a.call(n,t,this.openElements.current),r){let i,u;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,u=this.fragmentContextID):{current:i,currentTagId:u}=this.openElements,this._setContextModes(i,u)}}_setContextModes(t,r){const n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===H.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,t)}_switchToTextParsing(t,r){this._insertElement(t,H.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=k.TEXT}switchToPlaintextParsing(){this.insertionMode=k.TEXT,this.originalInsertionMode=k.IN_BODY,this.tokenizer.state=De.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===O.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==H.HTML))switch(this.fragmentContextID){case o.TITLE:case o.TEXTAREA:{this.tokenizer.state=De.RCDATA;break}case o.STYLE:case o.XMP:case o.IFRAME:case o.NOEMBED:case o.NOFRAMES:case o.NOSCRIPT:{this.tokenizer.state=De.RAWTEXT;break}case o.SCRIPT:{this.tokenizer.state=De.SCRIPT_DATA;break}case o.PLAINTEXT:{this.tokenizer.state=De.PLAINTEXT;break}}}_setDocumentType(t){const r=t.name||"",n=t.publicId||"",a=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,a),t.location){const u=this.treeAdapter.getChildNodes(this.document).find(s=>this.treeAdapter.isDocumentTypeNode(s));u&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}}_attachElementToTree(t,r){if(this.options.sourceCodeLocationInfo){const n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(t,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t)}}_appendElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location)}_insertElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID)}_insertFakeElement(t,r){const n=this.treeAdapter.createElement(t,H.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(t){const r=this.treeAdapter.createElement(t.tagName,H.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,t.location),this.openElements.push(r,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const t=this.treeAdapter.createElement(O.HTML,H.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,o.HTML)}_appendCommentNode(t,r){const n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location)}_insertCharacters(t){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,t.chars,n):this.treeAdapter.insertText(r,t.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,t.chars)),!t.location)return;const a=this.treeAdapter.getChildNodes(r),i=n?a.lastIndexOf(n):a.length,u=a[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(u)){const{endLine:l,endCol:c,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(u,{endLine:l,endCol:c,endOffset:d})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}_adoptNodes(t,r){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(t,r){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&r.location){const n=r.location,a=this.treeAdapter.getTagName(t),i=r.type===de.END_TAG&&a===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,t.tagID===o.SVG&&this.treeAdapter.getTagName(r)===O.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===H.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===o.MGLYPH||t.tagID===o.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,H.HTML)}_processToken(t){switch(t.type){case de.CHARACTER:{this.onCharacter(t);break}case de.NULL_CHARACTER:{this.onNullCharacter(t);break}case de.COMMENT:{this.onComment(t);break}case de.DOCTYPE:{this.onDoctype(t);break}case de.START_TAG:{this._processStartTag(t);break}case de.END_TAG:{this.onEndTag(t);break}case de.EOF:{this.onEof(t);break}case de.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,r,n){const a=this.treeAdapter.getNamespaceURI(r),i=this.treeAdapter.getAttrList(r);return e5(t,a,i,n)}_reconstructActiveFormattingElements(){const t=this.activeFormattingElements.entries.length;if(t){const r=this.activeFormattingElements.entries.findIndex(a=>a.type===St.Marker||this.openElements.contains(a.element)),n=r===-1?t-1:r-1;for(let a=n;a>=0;a--){const i=this.activeFormattingElements.entries[a];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=k.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(o.P),this.openElements.popUntilTagNamePopped(o.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case o.TR:{this.insertionMode=k.IN_ROW;return}case o.TBODY:case o.THEAD:case o.TFOOT:{this.insertionMode=k.IN_TABLE_BODY;return}case o.CAPTION:{this.insertionMode=k.IN_CAPTION;return}case o.COLGROUP:{this.insertionMode=k.IN_COLUMN_GROUP;return}case o.TABLE:{this.insertionMode=k.IN_TABLE;return}case o.BODY:{this.insertionMode=k.IN_BODY;return}case o.FRAMESET:{this.insertionMode=k.IN_FRAMESET;return}case o.SELECT:{this._resetInsertionModeForSelect(t);return}case o.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case o.HTML:{this.insertionMode=this.headElement?k.AFTER_HEAD:k.BEFORE_HEAD;return}case o.TD:case o.TH:{if(t>0){this.insertionMode=k.IN_CELL;return}break}case o.HEAD:{if(t>0){this.insertionMode=k.IN_HEAD;return}break}}this.insertionMode=k.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let r=t-1;r>0;r--){const n=this.openElements.tagIDs[r];if(n===o.TEMPLATE)break;if(n===o.TABLE){this.insertionMode=k.IN_SELECT_IN_TABLE;return}}this.insertionMode=k.IN_SELECT}_isElementCausesFosterParenting(t){return bc.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){const r=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case o.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===H.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case o.TABLE:{const n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){const r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,t,r.beforeElement):this.treeAdapter.appendChild(r.parent,t)}_isSpecialElement(t,r){const n=this.treeAdapter.getNamespaceURI(t);return kp[n].has(r)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){R7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:{Tc(this,t);break}case k.TEXT:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{Sc(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){L7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.TEXT:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){Ka(this,t);return}switch(this.insertionMode){case k.INITIAL:case k.BEFORE_HTML:case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_TEMPLATE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{Ka(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.AFTER_BODY:{h5(this,t);break}case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{d5(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case k.INITIAL:{f5(this,t);break}case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:{this._err(t,P.misplacedDoctype);break}case k.IN_TABLE_TEXT:{en(this,t);break}}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,P.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?M7(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{m5(this,t);break}case k.BEFORE_HEAD:{g5(this,t);break}case k.IN_HEAD:{yt(this,t);break}case k.IN_HEAD_NO_SCRIPT:{T5(this,t);break}case k.AFTER_HEAD:{y5(this,t);break}case k.IN_BODY:{We(this,t);break}case k.IN_TABLE:{Rr(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{b7(this,t);break}case k.IN_COLUMN_GROUP:{Bi(this,t);break}case k.IN_TABLE_BODY:{O0(this,t);break}case k.IN_ROW:{L0(this,t);break}case k.IN_CELL:{x7(this,t);break}case k.IN_SELECT:{_c(this,t);break}case k.IN_SELECT_IN_TABLE:{v7(this,t);break}case k.IN_TEMPLATE:{k7(this,t);break}case k.AFTER_BODY:{w7(this,t);break}case k.IN_FRAMESET:{C7(this,t);break}case k.AFTER_FRAMESET:{I7(this,t);break}case k.AFTER_AFTER_BODY:{D7(this,t);break}case k.AFTER_AFTER_FRAMESET:{O7(this,t);break}}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?P7(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{p5(this,t);break}case k.BEFORE_HEAD:{b5(this,t);break}case k.IN_HEAD:{E5(this,t);break}case k.IN_HEAD_NO_SCRIPT:{x5(this,t);break}case k.AFTER_HEAD:{v5(this,t);break}case k.IN_BODY:{D0(this,t);break}case k.TEXT:{s7(this,t);break}case k.IN_TABLE:{En(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{E7(this,t);break}case k.IN_COLUMN_GROUP:{T7(this,t);break}case k.IN_TABLE_BODY:{Ja(this,t);break}case k.IN_ROW:{Cc(this,t);break}case k.IN_CELL:{y7(this,t);break}case k.IN_SELECT:{Ic(this,t);break}case k.IN_SELECT_IN_TABLE:{A7(this,t);break}case k.IN_TEMPLATE:{S7(this,t);break}case k.AFTER_BODY:{Dc(this,t);break}case k.IN_FRAMESET:{_7(this,t);break}case k.AFTER_FRAMESET:{N7(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onEof(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{Ac(this,t);break}case k.TEXT:{l7(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_TEMPLATE:{Nc(this,t);break}case k.AFTER_BODY:case k.IN_FRAMESET:case k.AFTER_FRAMESET:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Pi(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===T.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.TEXT:case k.IN_COLUMN_GROUP:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{this._insertCharacters(t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:case k.AFTER_BODY:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Ec(this,t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{kc(this,t);break}}}}function i5(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):vc(e,t),r}function u5(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){const a=e.openElements.items[n];if(a===t.element)break;e._isSpecialElement(a,e.openElements.tagIDs[n])&&(r=a)}return r||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),r}function s5(e,t,r){let n=t,a=e.openElements.getCommonAncestor(t);for(let i=0,u=a;u!==r;i++,u=a){a=e.openElements.getCommonAncestor(u);const s=e.activeFormattingElements.getElementEntry(u),l=s&&i>=n5;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(u)):(u=l5(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(u,n),n=u)}return n}function l5(e,t){const r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function o5(e,t,r){const n=e.treeAdapter.getTagName(t),a=qr(n);if(e._isElementCausesFosterParenting(a))e._fosterParentElement(r);else{const i=e.treeAdapter.getNamespaceURI(t);a===o.TEMPLATE&&i===H.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function c5(e,t,r){const n=e.treeAdapter.getNamespaceURI(r.element),{token:a}=r,i=e.treeAdapter.createElement(a.tagName,n,a.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,a),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,i,a.tagID)}function Mi(e,t){for(let r=0;r=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],a=e.treeAdapter.getNodeSourceCodeLocation(n);if(a&&!a.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const i=e.openElements.items[1],u=e.treeAdapter.getNodeSourceCodeLocation(i);u&&!u.endTag&&e._setEndLocation(i,t)}}}}function f5(e,t){e._setDocumentType(t);const r=t.forceQuirks?pt.QUIRKS:Yp(t);qp(t)||e._err(t,P.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=k.BEFORE_HTML}function Zr(e,t){e._err(t,P.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,pt.QUIRKS),e.insertionMode=k.BEFORE_HTML,e._processToken(t)}function m5(e,t){t.tagID===o.HTML?(e._insertElement(t,H.HTML),e.insertionMode=k.BEFORE_HEAD):ln(e,t)}function p5(e,t){const r=t.tagID;(r===o.HTML||r===o.HEAD||r===o.BODY||r===o.BR)&&ln(e,t)}function ln(e,t){e._insertFakeRootElement(),e.insertionMode=k.BEFORE_HEAD,e._processToken(t)}function g5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.HEAD:{e._insertElement(t,H.HTML),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD;break}default:on(e,t)}}function b5(e,t){const r=t.tagID;r===o.HEAD||r===o.BODY||r===o.HTML||r===o.BR?on(e,t):e._err(t,P.endTagWithoutMatchingOpenElement)}function on(e,t){e._insertFakeElement(O.HEAD,o.HEAD),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD,e._processToken(t)}function yt(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.TITLE:{e._switchToTextParsing(t,De.RCDATA);break}case o.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,De.RAWTEXT):(e._insertElement(t,H.HTML),e.insertionMode=k.IN_HEAD_NO_SCRIPT);break}case o.NOFRAMES:case o.STYLE:{e._switchToTextParsing(t,De.RAWTEXT);break}case o.SCRIPT:{e._switchToTextParsing(t,De.SCRIPT_DATA);break}case o.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=k.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(k.IN_TEMPLATE);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:cn(e,t)}}function E5(e,t){switch(t.tagID){case o.HEAD:{e.openElements.pop(),e.insertionMode=k.AFTER_HEAD;break}case o.BODY:case o.BR:case o.HTML:{cn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function Tr(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==o.TEMPLATE&&e._err(t,P.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,P.endTagWithoutMatchingOpenElement)}function cn(e,t){e.openElements.pop(),e.insertionMode=k.AFTER_HEAD,e._processToken(t)}function T5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASEFONT:case o.BGSOUND:case o.HEAD:case o.LINK:case o.META:case o.NOFRAMES:case o.STYLE:{yt(e,t);break}case o.NOSCRIPT:{e._err(t,P.nestedNoscriptInHead);break}default:hn(e,t)}}function x5(e,t){switch(t.tagID){case o.NOSCRIPT:{e.openElements.pop(),e.insertionMode=k.IN_HEAD;break}case o.BR:{hn(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function hn(e,t){const r=t.type===de.EOF?P.openElementsLeftAfterEof:P.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=k.IN_HEAD,e._processToken(t)}function y5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BODY:{e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_BODY;break}case o.FRAMESET:{e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET;break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{e._err(t,P.abandonedHeadElementChild),e.openElements.push(e.headElement,o.HEAD),yt(e,t),e.openElements.remove(e.headElement);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:dn(e,t)}}function v5(e,t){switch(t.tagID){case o.BODY:case o.HTML:case o.BR:{dn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function dn(e,t){e._insertFakeElement(O.BODY,o.BODY),e.insertionMode=k.IN_BODY,N0(e,t)}function N0(e,t){switch(t.type){case de.CHARACTER:{Tc(e,t);break}case de.WHITESPACE_CHARACTER:{Ec(e,t);break}case de.COMMENT:{Ka(e,t);break}case de.START_TAG:{We(e,t);break}case de.END_TAG:{D0(e,t);break}case de.EOF:{Ac(e,t);break}}}function Ec(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function Tc(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function A5(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function k5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}function S5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET)}function w5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function C5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&Qa.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,H.HTML)}function _5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function I5(e,t){const r=e.openElements.tmplCount>0;(!e.formElement||r)&&(e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),r||(e.formElement=e.openElements.current))}function N5(e,t){e.framesetOk=!1;const r=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){const a=e.openElements.tagIDs[n];if(r===o.LI&&a===o.LI||(r===o.DD||r===o.DT)&&(a===o.DD||a===o.DT)){e.openElements.generateImpliedEndTagsWithExclusion(a),e.openElements.popUntilTagNamePopped(a);break}if(a!==o.ADDRESS&&a!==o.DIV&&a!==o.P&&e._isSpecialElement(e.openElements.items[n],a))break}e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function D5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.tokenizer.state=De.PLAINTEXT}function O5(e,t){e.openElements.hasInScope(o.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1}function L5(e,t){const r=e.activeFormattingElements.getElementEntryInScopeWithTagName(O.A);r&&(Mi(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function R5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function M5(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(o.NOBR)&&(Mi(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function P5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function B5(e,t){e.treeAdapter.getDocumentMode(e.document)!==pt.QUIRKS&&e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_TABLE}function xc(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function yc(e){const t=oc(e,mr.TYPE);return t!=null&&t.toLowerCase()===t5}function F5(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),yc(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function H5(e,t){e._appendElement(t,H.HTML),t.ackSelfClosing=!0}function z5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function U5(e,t){t.tagName=O.IMG,t.tagID=o.IMG,xc(e,t)}function q5(e,t){e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.tokenizer.state=De.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=k.TEXT}function Y5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function G5(e,t){e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function Bs(e,t){e._switchToTextParsing(t,De.RAWTEXT)}function V5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===k.IN_TABLE||e.insertionMode===k.IN_CAPTION||e.insertionMode===k.IN_TABLE_BODY||e.insertionMode===k.IN_ROW||e.insertionMode===k.IN_CELL?k.IN_SELECT_IN_TABLE:k.IN_SELECT}function j5(e,t){e.openElements.currentTagId===o.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function W5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,H.HTML)}function X5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(o.RTC),e._insertElement(t,H.HTML)}function $5(e,t){e._reconstructActiveFormattingElements(),pc(t),Ri(t),t.selfClosing?e._appendElement(t,H.MATHML):e._insertElement(t,H.MATHML),t.ackSelfClosing=!0}function Q5(e,t){e._reconstructActiveFormattingElements(),gc(t),Ri(t),t.selfClosing?e._appendElement(t,H.SVG):e._insertElement(t,H.SVG),t.ackSelfClosing=!0}function Fs(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function We(e,t){switch(t.tagID){case o.I:case o.S:case o.B:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.SMALL:case o.STRIKE:case o.STRONG:{R5(e,t);break}case o.A:{L5(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{C5(e,t);break}case o.P:case o.DL:case o.OL:case o.UL:case o.DIV:case o.DIR:case o.NAV:case o.MAIN:case o.MENU:case o.ASIDE:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.DETAILS:case o.ADDRESS:case o.ARTICLE:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{w5(e,t);break}case o.LI:case o.DD:case o.DT:{N5(e,t);break}case o.BR:case o.IMG:case o.WBR:case o.AREA:case o.EMBED:case o.KEYGEN:{xc(e,t);break}case o.HR:{z5(e,t);break}case o.RB:case o.RTC:{W5(e,t);break}case o.RT:case o.RP:{X5(e,t);break}case o.PRE:case o.LISTING:{_5(e,t);break}case o.XMP:{Y5(e,t);break}case o.SVG:{Q5(e,t);break}case o.HTML:{A5(e,t);break}case o.BASE:case o.LINK:case o.META:case o.STYLE:case o.TITLE:case o.SCRIPT:case o.BGSOUND:case o.BASEFONT:case o.TEMPLATE:{yt(e,t);break}case o.BODY:{k5(e,t);break}case o.FORM:{I5(e,t);break}case o.NOBR:{M5(e,t);break}case o.MATH:{$5(e,t);break}case o.TABLE:{B5(e,t);break}case o.INPUT:{F5(e,t);break}case o.PARAM:case o.TRACK:case o.SOURCE:{H5(e,t);break}case o.IMAGE:{U5(e,t);break}case o.BUTTON:{O5(e,t);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{P5(e,t);break}case o.IFRAME:{G5(e,t);break}case o.SELECT:{V5(e,t);break}case o.OPTION:case o.OPTGROUP:{j5(e,t);break}case o.NOEMBED:case o.NOFRAMES:{Bs(e,t);break}case o.FRAMESET:{S5(e,t);break}case o.TEXTAREA:{q5(e,t);break}case o.NOSCRIPT:{e.options.scriptingEnabled?Bs(e,t):Fs(e,t);break}case o.PLAINTEXT:{D5(e,t);break}case o.COL:case o.TH:case o.TD:case o.TR:case o.HEAD:case o.FRAME:case o.TBODY:case o.TFOOT:case o.THEAD:case o.CAPTION:case o.COLGROUP:break;default:Fs(e,t)}}function K5(e,t){if(e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,e.options.sourceCodeLocationInfo)){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}function J5(e,t){e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,Dc(e,t))}function Z5(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function e7(e){const t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(o.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(o.FORM):r&&e.openElements.remove(r))}function t7(e){e.openElements.hasInButtonScope(o.P)||e._insertFakeElement(O.P,o.P),e._closePElement()}function r7(e){e.openElements.hasInListItemScope(o.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(o.LI),e.openElements.popUntilTagNamePopped(o.LI))}function n7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}function a7(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function i7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function u7(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(O.BR,o.BR),e.openElements.pop(),e.framesetOk=!1}function vc(e,t){const r=t.tagName,n=t.tagID;for(let a=e.openElements.stackTop;a>0;a--){const i=e.openElements.items[a],u=e.openElements.tagIDs[a];if(n===u&&(n!==o.UNKNOWN||e.treeAdapter.getTagName(i)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=a&&e.openElements.shortenToLength(a);break}if(e._isSpecialElement(i,u))break}}function D0(e,t){switch(t.tagID){case o.A:case o.B:case o.I:case o.S:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.NOBR:case o.SMALL:case o.STRIKE:case o.STRONG:{Mi(e,t);break}case o.P:{t7(e);break}case o.DL:case o.UL:case o.OL:case o.DIR:case o.DIV:case o.NAV:case o.PRE:case o.MAIN:case o.MENU:case o.ASIDE:case o.BUTTON:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.ADDRESS:case o.ARTICLE:case o.DETAILS:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.LISTING:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{Z5(e,t);break}case o.LI:{r7(e);break}case o.DD:case o.DT:{n7(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{a7(e);break}case o.BR:{u7(e);break}case o.BODY:{K5(e,t);break}case o.HTML:{J5(e,t);break}case o.FORM:{e7(e);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{i7(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:vc(e,t)}}function Ac(e,t){e.tmplInsertionModeStack.length>0?Nc(e,t):Pi(e,t)}function s7(e,t){var r;t.tagID===o.SCRIPT&&((r=e.scriptHandler)===null||r===void 0||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function l7(e,t){e._err(t,P.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function ba(e,t){if(e.openElements.currentTagId!==void 0&&bc.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=k.IN_TABLE_TEXT,t.type){case de.CHARACTER:{Sc(e,t);break}case de.WHITESPACE_CHARACTER:{kc(e,t);break}}else wn(e,t)}function o7(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_CAPTION}function c7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_COLUMN_GROUP}function h7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.COLGROUP,o.COLGROUP),e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t)}function d7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_TABLE_BODY}function f7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.TBODY,o.TBODY),e.insertionMode=k.IN_TABLE_BODY,O0(e,t)}function m7(e,t){e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function p7(e,t){yc(t)?e._appendElement(t,H.HTML):wn(e,t),t.ackSelfClosing=!0}function g7(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,H.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Rr(e,t){switch(t.tagID){case o.TD:case o.TH:case o.TR:{f7(e,t);break}case o.STYLE:case o.SCRIPT:case o.TEMPLATE:{yt(e,t);break}case o.COL:{h7(e,t);break}case o.FORM:{g7(e,t);break}case o.TABLE:{m7(e,t);break}case o.TBODY:case o.TFOOT:case o.THEAD:{d7(e,t);break}case o.INPUT:{p7(e,t);break}case o.CAPTION:{o7(e,t);break}case o.COLGROUP:{c7(e,t);break}default:wn(e,t)}}function En(e,t){switch(t.tagID){case o.TABLE:{e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}case o.BODY:case o.CAPTION:case o.COL:case o.COLGROUP:case o.HTML:case o.TBODY:case o.TD:case o.TFOOT:case o.TH:case o.THEAD:case o.TR:break;default:wn(e,t)}}function wn(e,t){const r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,N0(e,t),e.fosterParentingEnabled=r}function kc(e,t){e.pendingCharacterTokens.push(t)}function Sc(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function en(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r0&&e.openElements.currentTagId===o.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===o.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===o.OPTGROUP&&e.openElements.pop();break}case o.OPTION:{e.openElements.currentTagId===o.OPTION&&e.openElements.pop();break}case o.SELECT:{e.openElements.hasInSelectScope(o.SELECT)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}}}function v7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e._processStartTag(t)):_c(e,t)}function A7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Ic(e,t)}function k7(e,t){switch(t.tagID){case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{yt(e,t);break}case o.CAPTION:case o.COLGROUP:case o.TBODY:case o.TFOOT:case o.THEAD:{e.tmplInsertionModeStack[0]=k.IN_TABLE,e.insertionMode=k.IN_TABLE,Rr(e,t);break}case o.COL:{e.tmplInsertionModeStack[0]=k.IN_COLUMN_GROUP,e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t);break}case o.TR:{e.tmplInsertionModeStack[0]=k.IN_TABLE_BODY,e.insertionMode=k.IN_TABLE_BODY,O0(e,t);break}case o.TD:case o.TH:{e.tmplInsertionModeStack[0]=k.IN_ROW,e.insertionMode=k.IN_ROW,L0(e,t);break}default:e.tmplInsertionModeStack[0]=k.IN_BODY,e.insertionMode=k.IN_BODY,We(e,t)}}function S7(e,t){t.tagID===o.TEMPLATE&&Tr(e,t)}function Nc(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Pi(e,t)}function w7(e,t){t.tagID===o.HTML?We(e,t):o0(e,t)}function Dc(e,t){var r;if(t.tagID===o.HTML){if(e.fragmentContext||(e.insertionMode=k.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===o.HTML){e._setEndLocation(e.openElements.items[0],t);const n=e.openElements.items[1];n&&!(!((r=e.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&e._setEndLocation(n,t)}}else o0(e,t)}function o0(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function C7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.FRAMESET:{e._insertElement(t,H.HTML);break}case o.FRAME:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.NOFRAMES:{yt(e,t);break}}}function _7(e,t){t.tagID===o.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==o.FRAMESET&&(e.insertionMode=k.AFTER_FRAMESET))}function I7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function N7(e,t){t.tagID===o.HTML&&(e.insertionMode=k.AFTER_AFTER_FRAMESET)}function D7(e,t){t.tagID===o.HTML?We(e,t):Jn(e,t)}function Jn(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function O7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function L7(e,t){t.chars=Se,e._insertCharacters(t)}function R7(e,t){e._insertCharacters(t),e.framesetOk=!1}function Oc(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==H.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function M7(e,t){if(Qp(t))Oc(e),e._startTagOutsideForeignContent(t);else{const r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===H.MATHML?pc(t):n===H.SVG&&(Kp(t),gc(t)),Ri(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}function P7(e,t){if(t.tagID===o.P||t.tagID===o.BR){Oc(e),e._endTagOutsideForeignContent(t);return}for(let r=e.openElements.stackTop;r>0;r--){const n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===H.HTML){e._endTagOutsideForeignContent(t);break}const a=e.treeAdapter.getTagName(n);if(a.toLowerCase()===t.tagName){t.tagName=a,e.openElements.shortenToLength(r);break}}}O.AREA,O.BASE,O.BASEFONT,O.BGSOUND,O.BR,O.COL,O.EMBED,O.FRAME,O.HR,O.IMG,O.INPUT,O.KEYGEN,O.LINK,O.META,O.PARAM,O.SOURCE,O.TRACK,O.WBR;const B7=/<(\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\t\n\f\r />])/gi,F7=new Set(["mdxFlowExpression","mdxJsxFlowElement","mdxJsxTextElement","mdxTextExpression","mdxjsEsm"]),Hs={sourceCodeLocationInfo:!0,scriptingEnabled:!1};function Lc(e,t){const r=X7(e),n=_l("type",{handlers:{root:H7,element:z7,text:U7,comment:Mc,doctype:q7,raw:G7},unknown:V7}),a={parser:r?new Ps(Hs):Ps.getFragmentParser(void 0,Hs),handle(s){n(s,a)},stitches:!1,options:t||{}};n(e,a),Yr(a,_t());const i=r?a.parser.document:a.parser.getFragment(),u=$6(i,{file:a.options.file});return a.stitches&&b0(u,"comment",function(s,l,c){const d=s;if(d.value.stitch&&c&&l!==void 0){const f=c.children;return f[l]=d.value.stitch,l}}),u.type==="root"&&u.children.length===1&&u.children[0].type===e.type?u.children[0]:u}function Rc(e,t){let r=-1;if(e)for(;++r4&&(t.parser.tokenizer.state=0);const r={type:de.CHARACTER,chars:e.value,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function q7(e,t){const r={type:de.DOCTYPE,name:"html",forceQuirks:!1,publicId:"",systemId:"",location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function Y7(e,t){t.stitches=!0;const r=$7(e);if("children"in e&&"children"in r){const n=Lc({type:"root",children:e.children},t.options);r.children=n.children}Mc({type:"comment",value:{stitch:r}},t)}function Mc(e,t){const r=e.value,n={type:de.COMMENT,data:r,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function G7(e,t){if(t.parser.tokenizer.preprocessor.html="",t.parser.tokenizer.preprocessor.pos=-1,t.parser.tokenizer.preprocessor.lastGapPos=-2,t.parser.tokenizer.preprocessor.gapStack=[],t.parser.tokenizer.preprocessor.skipNextNewLine=!1,t.parser.tokenizer.preprocessor.lastChunkWritten=!1,t.parser.tokenizer.preprocessor.endOfChunkHit=!1,t.parser.tokenizer.preprocessor.isEol=!1,Pc(t,_t(e)),t.parser.tokenizer.write(t.options.tagfilter?e.value.replace(B7,"<$1$2"):e.value,!1),t.parser.tokenizer._runParsingLoop(),t.parser.tokenizer.state===72||t.parser.tokenizer.state===78){t.parser.tokenizer.preprocessor.lastChunkWritten=!0;const r=t.parser.tokenizer._consume();t.parser.tokenizer._callState(r)}}function V7(e,t){const r=e;if(t.options.passThrough&&t.options.passThrough.includes(r.type))Y7(r,t);else{let n="";throw F7.has(r.type)&&(n=". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax"),new Error("Cannot compile `"+r.type+"` node"+n)}}function Yr(e,t){Pc(e,t);const r=e.parser.tokenizer.currentCharacterToken;r&&r.location&&(r.location.endLine=e.parser.tokenizer.preprocessor.line,r.location.endCol=e.parser.tokenizer.preprocessor.col+1,r.location.endOffset=e.parser.tokenizer.preprocessor.offset+1,e.parser.currentToken=r,e.parser._processToken(e.parser.currentToken)),e.parser.tokenizer.paused=!1,e.parser.tokenizer.inLoop=!1,e.parser.tokenizer.active=!1,e.parser.tokenizer.returnState=De.DATA,e.parser.tokenizer.charRefCode=-1,e.parser.tokenizer.consumedAfterSnapshot=-1,e.parser.tokenizer.currentLocation=null,e.parser.tokenizer.currentCharacterToken=null,e.parser.tokenizer.currentToken=null,e.parser.tokenizer.currentAttr={name:"",value:""}}function Pc(e,t){if(t&&t.offset!==void 0){const r={startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:-1,endCol:-1,endOffset:-1};e.parser.tokenizer.preprocessor.lineStartPos=-t.column+1,e.parser.tokenizer.preprocessor.droppedBufferSize=t.offset,e.parser.tokenizer.preprocessor.line=t.line,e.parser.tokenizer.currentLocation=r}}function j7(e,t){const r=e.tagName.toLowerCase();if(t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,_t(e));const n=t.parser.openElements.current;let a="namespaceURI"in n?n.namespaceURI:Ct.html;a===Ct.html&&r==="svg"&&(a=Ct.svg);const i=ep({...e,children:[]},{space:a===Ct.svg?"svg":"html"}),u={type:de.START_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:"attrs"in i?i.attrs:[],location:Cn(e)};t.parser.currentToken=u,t.parser._processToken(t.parser.currentToken),t.parser.tokenizer.lastStartTagName=r}function W7(e,t){const r=e.tagName.toLowerCase();if(!t.parser.tokenizer.inForeignNode&&lp.includes(r)||t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,d0(e));const n={type:de.END_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:[],location:Cn(e)};t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken),r===t.parser.tokenizer.lastStartTagName&&(t.parser.tokenizer.state===De.RCDATA||t.parser.tokenizer.state===De.RAWTEXT||t.parser.tokenizer.state===De.SCRIPT_DATA)&&(t.parser.tokenizer.state=De.DATA)}function X7(e){const t=e.type==="root"?e.children[0]:e;return!!(t&&(t.type==="doctype"||t.type==="element"&&t.tagName.toLowerCase()==="html"))}function Cn(e){const t=_t(e)||{line:void 0,column:void 0,offset:void 0},r=d0(e)||{line:void 0,column:void 0,offset:void 0};return{startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:r.line,endCol:r.column,endOffset:r.offset}}function $7(e){return"children"in e?Nr({...e,children:[]}):Nr(e)}function Q7(e){return function(t,r){return Lc(t,{...e,file:r})}}function c0(e){return typeof e=="string"?e:typeof e=="number"?String(e):e?Array.isArray(e)?e.map(c0).join(""):typeof e=="object"&&"props"in e?c0(e.props.children):"":""}function K7(e){return e.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function Sr(e){return function({children:r,...n}){const a=c0(r),i=n.id||K7(a);return pe.jsx(e,{...n,id:i,children:r})}}const J7={h1:Sr("h1"),h2:Sr("h2"),h3:Sr("h3"),h4:Sr("h4"),h5:Sr("h5"),h6:Sr("h6")};function a8(){const{id:e}=Bc(),t=zc.find(d=>d.id===e),[r,n]=Xr.useState(""),[a,i]=Xr.useState(null),[u,s]=Xr.useState(null);Xr.useEffect(()=>{if(!t)return;const d=new AbortController,f=t.filename;return fetch(`/blog/${f}`,{signal:d.signal}).then(g=>{if(!g.ok)throw new Error("Failed to load post");return g.text()}).then(g=>{const p=g.replace(/^\s*#[^#\n]*\r?\n/,"");n(p),i(f),s(null)}).catch(g=>{g instanceof DOMException&&g.name==="AbortError"||(console.error(g),i(f),s(f))}),()=>d.abort()},[t]);const l=!!(t&&a!==t.filename),c=!!(t&&u===t.filename);return Xr.useEffect(()=>{function d(f){const p=f.target.closest("a");if(!p)return;const x=p.getAttribute("href");if(!x||!x.startsWith("#"))return;f.preventDefault();const S=document.getElementById(x.slice(1));S&&(S.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",x))}return document.addEventListener("click",d),()=>document.removeEventListener("click",d)},[]),t?pe.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[pe.jsx(Fc,{title:`${t.title} - QECTOR Blog`,description:t.description}),pe.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[pe.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),pe.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),pe.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[pe.jsxs(P0,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[pe.jsx(Uc,{size:18,className:"mr-2"}),"Back to All Articles"]}),pe.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[pe.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[pe.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[pe.jsx(qc,{size:16,className:"mr-2"}),t.date]}),pe.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:t.category}),pe.jsxs("span",{className:"text-sm text-slate-400",children:["By ",pe.jsx(P0,{to:"/guillaume-lessard",className:"hover:text-cyan-300",children:"Guillaume Lessard"}),r?` · ${Math.max(1,Math.round(r.split(/\s+/).length/220))} min read`:""]})]}),pe.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:t.title}),pe.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:t.description})]}),pe.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:l?pe.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[pe.jsx(Yc,{size:48,className:"animate-spin text-cyan-400 mb-4"}),pe.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):c?pe.jsx("div",{className:"py-20 text-center text-red-400",children:pe.jsx("p",{children:"Failed to load the article. Please try again later."})}):pe.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:pe.jsx(Qf,{remarkPlugins:[l4,g6],rehypePlugins:[j6,Q7],components:{...J7,table:d=>{const{node:f,...g}=d;return pe.jsx("div",{className:"overflow-x-auto",children:pe.jsx("table",{...g})})},pre:d=>{const{children:f}=d,g=Fi.Children.toArray(f)[0];let p="",x="text";if(Fi.isValidElement(g)){const S=g.props,D=/language-([\w-]+)/.exec(S.className||"");D&&(x=D[1]),p=c0(S.children).replace(/\n$/,"")}return pe.jsx(Hc,{code:p,language:x,className:"not-prose"})},img:d=>{const f=d.width!=null&&d.height!=null;return pe.jsx("img",{...d,className:f?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:r})})})]})]})]}):pe.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:pe.jsxs("div",{className:"text-center",children:[pe.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),pe.jsx(P0,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{a8 as default}; diff --git a/assets/BlogPost-dRWncRqa.css b/assets/BlogPost-dRWncRqa.css deleted file mode 100644 index 7018f44a..00000000 --- a/assets/BlogPost-dRWncRqa.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2) format("woff2"),url(/assets/KaTeX_AMS-Regular-DMm9YOAa.woff) format("woff"),url(/assets/KaTeX_AMS-Regular-DRggAlZN.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff) format("woff"),url(/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff) format("woff"),url(/assets/KaTeX_Fraktur-Regular-CB_wures.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2) format("woff2"),url(/assets/KaTeX_Main-Bold-Jm3AIy58.woff) format("woff"),url(/assets/KaTeX_Main-Bold-waoOVXN0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2) format("woff2"),url(/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff) format("woff"),url(/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2) format("woff2"),url(/assets/KaTeX_Main-Italic-BMLOBm91.woff) format("woff"),url(/assets/KaTeX_Main-Italic-3WenGoN9.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2) format("woff2"),url(/assets/KaTeX_Main-Regular-Dr94JaBh.woff) format("woff"),url(/assets/KaTeX_Main-Regular-ypZvNtVU.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2) format("woff2"),url(/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff) format("woff"),url(/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2) format("woff2"),url(/assets/KaTeX_Math-Italic-DA0__PXp.woff) format("woff"),url(/assets/KaTeX_Math-Italic-flOr_0UB.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff) format("woff"),url(/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff) format("woff"),url(/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff) format("woff"),url(/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2) format("woff2"),url(/assets/KaTeX_Script-Regular-D5yQViql.woff) format("woff"),url(/assets/KaTeX_Script-Regular-C5JkGWo-.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2) format("woff2"),url(/assets/KaTeX_Size1-Regular-C195tn64.woff) format("woff"),url(/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2) format("woff2"),url(/assets/KaTeX_Size2-Regular-oD1tc_U0.woff) format("woff"),url(/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmfttwI4mBo1EG15fxJhUiCLbiiyCf/ZA6MFAhg3pGIZGdGIVjtPn6UcMk9A/UUr9PhoNsCENw1APAq0gpH73e+M+0ueyHbabc3vkbcdtzcf/fiy+NxQEjf9ud/ELBHAXJ0nk4z+MXH2Ev/kWyV4k7SkvpPc9Qr38F6RPWnM9cN6DJ0AdD1BhtgABtmoRoFCvPsBAumNm6soZG2Gk5GyVTo2sJncSyp0jQTYoR6WDvTwaaEcHsxHfvuWhHA3a6bN7twRKtcGok6NsCi7jYRrM2jExsUFMxMQYuJbMhuWNOumEJy9hi29Dmg5zMp/A5+hhPG19j1vBrq8JTLr8ki5VLPmG/PynJHVul440bxg5xuymHUFPBshC+nA9I1FmwbRBTNHAcik3Oae0cxKoI3MOriM42UrPe51nsaGxJ+WfXubAsP84aabUlQSJ1IiE0iPETLUU4CATgfXSCSpuRFRmCGbO+wSpAnzaeaCYW1VNEysRtuXCEL1kUFUbbtMv3Tilt/1c11jt3Q5bbMa84cpWipp8Elw3MZhOHsOlwwVUQM3lAR35JiFQbaYCRnMF2lxAWoOg2gyoIV4PouX8HytNIfLhqpJtXB4vjiViUI8IJ7bkC4ikkQvKksnOTKICwnqWSZ9YS5f0WCxmpgjbIq7EJcM4aI2nmhLNY2JIUgOjXZFWBHb+x5oh6cwb0Tv1ackHdKi0I9OO2wE9aogIOn540CCCziyhN+IaejtgAONKznHlHyutPrHGwCx9S6B8kfS4Mfi4Eyv7OU730bT1SCBjt834cXsf43zVjPUqqJjgrjeGnBxSG4aYAKFuVbeCfkDIjAqMb6yLNIbCuvXhMH2/+k2vkNpkORhR59N1CkzoOENvneIosjYmuTxlhUzaGEJQ/iWqx4dmwpmKjrwTiTGTCVozNAYqk/zXOndWxuWSmJkQpJw3pK5KX6QrLt5LATMqpmPAQhkhK6PUjzHUn7E0gHE0kPE0iKkolgkUx9SZmVAdDgpffdyJKg3k7VmzYGCwVXGz/tXmkOIp+vcWs+EMuhhvN0h9uhfzWJziBQmCREGSIFmQIkgVpAnSBRmC//6hkLZwaVhwxlrJSOdqlFtOYxlau9F2QN5Y98xmIAsiM1HVp2VFX+DHHGg6Ecjh3vmqtidX3qHI2qycTk/iwxSt5UzTmEP92ZBnEWTk4Mx8Mpl78ZDokxg/KWb+Q0QkvdKVmq3TMW+RXEgrsziSAfNXFMhDc60N5N9jQzjfO0kBKpUZl0ZmwJ41j/B9Hz6wmRaJB84niNmQrzp9eSlQCDDzazGDdVi3P36VZQ+Jy4f9UBNp+3zTjqI4abaFAm+GShVaXlsGdF3FYzZcDI6cori4kMxUECl9IjJZpzkvitAoxKue+90pDMvcKRxLl53TmOKCmV/xRolNKSqqUxc6LStOETmFOiLZZptlZepcKiAzteG8PEdpnQpbOMNcMsR4RR2Bs0cKFEvSmIjAFcnarqwUL4lDhHmnVkwu1IwshbiCcgvOheZuYyOteufZZwlcTlLgnZ3o/WcYdzZHW/WGaqaVfmTZ1aWCceJjkbZqsfbkOtcFlUZM/jy+hXHDbaUobWqqXaeWobbLO99yG5N3U4wxco0rQGGcOLASFMXeJoham8M+/x6O2WywK2l4HGbq1CoUyC/IZikQhdq3SiuNrvAEj0AVu9x2x3lp/xWzahaxidezFVtdcb5uEnzyl0ZmYiuKI0exvCd4Xc9CV1KB0db00z92wDPde0kukbvZIWN6jUWFTmPIC/Y4UPCm8UfDTFZpZNon1qLFTkBhxzB+FjQRA2Q/YRJT8pQigslMaUpFyAG8TMlXigiqmAZX4xgijKjRlGpLE0GdplRfCaJo0JQaSxNBk6ZmMzcya0FmrcisDdn0Q3HI2sWSppYigmlM1XT/kLQZSNpMJG0WkjYbSZuDpM1F0uYhFc1HxU4m1QJjDK6iL0S5uSj5rgXc3RejEigtcRBtqYPQsiTskmO5vosV+q4VGIKbOkDg0jtRrq+Em1YloaTFar3EGr1EUC8R0kus1Uus00usL97ABr2BjXoDm/QGNhuWtMVBKOwg/i78lT7hBsAvDmwHc/ao3vmUbBmhjeYySZNWvGkfZAgISDSaDo1SVpzGDsAEkF8B+gEapViUoZgUWXcRIGFZNm6gWbAKk0bp0k1MHG9fLYtV4iS2SmLEQFARzRcnf9PUS0LVn05/J9MiRRBU3v2IrvW974v4N00L7ZMk0wXP1409CHo/an8zTRHD3eSJ6m8D4YMkZNl3M79sqeuAsr/m3f+8/yl7A50aiAEJgeBeMWzu7ui9UfUBCe2TIqZIoOd/3/udRBOQidQZUERzb2/VwZN1H/Sju82ew2H2Wfr6qvfVf3hqwDvAIpkQVFy4B9Pe9e4/XvPeceu7h3dvO56iJPf0+A6cqA2ip18ER+iFgggiuOkvj24bby0N9j2UHIkgqIt+sVgfodC4YghLSMjSZbH0VR/6dMDrYJeKHilKTemt6v6kvzvn3/RrdWtr0GoN/xL+Sex/cPYLUpepx9cz/D46UPU5KXgAQa+NDps1v6J3xP1i2HtaDB0M9aX2deA7SYff//+gUCovMmIK/qfsFcOk+4Y5ZN97XlG6zebqtMbKgeRFi51vnxTQYBUik2rS/Cn6PC8ADR8FGxsRPB82dzfND90gIcshOcYUkfjherBz53odpm6TP8txlwOZ71xmfHHOvq053qFF/MRlS3jP0ELudrf2OeN8DHvp6ZceLe8qKYvWz/7yp0u4dKPfli3CYq0O13Ih71mylJ80tOi10On8wi+F4+LWgDPeJ30msSQt9/vkmHq9/Lvo2b461mP801v3W4xTcs6CbvF9UDdrSt+A8OUbpSh55qAUFXWznBBfdeJ8a4d7ugT5tvxUza3h9m4H7ptTqiG4z0g5dc0X29OcGlhpGFMpQo9ytTS+NViZpNdvU4kWx+LKxNY10kQ1yqGXrhe4/1nvP7E+nd5A92TtaRplbHSqoIdOqtRWti+fkB5/n1+/VvCmz12pG1kpQWsfi1ftlBobm0bpngs16CHkbIwdLnParxtTV3QYRlfJ0KFskH7pdN/YDn+yRuSd7sNH3aO0DYPggk6uWuXrfOc+fa3VTxFVvKaNxHsiHmsXyCLIE5yuOeN3/Jdf8HBL/5M6shjyhxHx9BjB1O0+4NLOnjLLSxwO7ukN4jMbOIcD879KLSi6Pk61Oqm2377n8079PXEEQ7cy7OKEC9nbpet118fxweTafpt69x/Bt8UqGzNQt7aelpc44dn5cqhwf71+qKp/Zf/+a0zcizOUWpl/iBcSXip0pplkatCchoH5c5aUM8I7/dWxAej8WicPL1URFZ9BDJelUwEwTkGqUhgSlydVes95YdXvhh9Gfz/aeFWvgVb4tuLbcv4+wLdutVZv/cUonwBD/6eDlE0aSiKK/uoH3+J1wDE/jMVqY2ysGufN84oIXB0sPzy8ollX/LegY74DgJXJR57sn+VGza0x3DnuIgABFM15LmajjjsNlYj+JEZGbuRYcAMOWxFkPN2w6Wd46xo4gVWQR/X4lyI/R6K/YK0110GzudPRW7Y+UOBGTfNNzHeYT0fiH0taunBpq9HEW8OKSaBGj21L0MqenEmNRWBAWDWAk4CpNoEZJ2tTaPFgbQYj8HxtFilErs3BTRwT8uO1NXQaWfIotchmPkAF5mMBAliEmZiOGVgCG9LgRzpscMAOOwowlT3JhusdazXGSC/hxR3UlmWVwWHpOIKheqONvjyhSiTHIkVUco5bnji8m//zL7PKaT1Vl5I6UE609f+gkr6MZKVyKc7zJRmCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC) format("woff2"),url(/assets/KaTeX_Size3-Regular-CTq5MqoE.woff) format("woff"),url(/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2) format("woff2"),url(/assets/KaTeX_Size4-Regular-BF-4gkZK.woff) format("woff"),url(/assets/KaTeX_Size4-Regular-DWFBv043.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2) format("woff2"),url(/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff) format("woff"),url(/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.47"}.katex .katex-mathml{border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/assets/BlogPost-fQplgej1.js b/assets/BlogPost-fQplgej1.js deleted file mode 100644 index 5253a632..00000000 --- a/assets/BlogPost-fQplgej1.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as j}from"./vendor-react-BiHfrq0e.js";import{S as k,C as E}from"./index-_BpMZhV3.js";import{b as C}from"./blogData-OjR2ZtNr.js";import{M as A,r as L,a as B,b as P,c as z}from"./vendor-md-CLKxNZoa.js";import{C as F,L as y}from"./vendor-PiU4YGcH.js";import{m as S,k as $,n as R}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function M(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||M(h);return e.jsx(t,{...m,id:p,children:x})}}const I={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=F(),r=C.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[w,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const v=!!(r&&h!==r.filename),N=!!(r&&w===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(k,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(y,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(S,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx($,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:v?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx(R,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):N?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(A,{remarkPlugins:[P,z],rehypePlugins:[L,B],components:{...I,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{node:n,children:a}=s,o=j.Children.toArray(a)[0];let l="",c="text";if(j.isValidElement(o)){const g=o.props,b=/language-([\w-]+)/.exec(g.className||"");b&&(c=b[1]),l=u(g.children).replace(/\n$/,"")}return e.jsx(E,{code:l,language:c,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(y,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-jAaJWhIm.js b/assets/BlogPost-jAaJWhIm.js deleted file mode 100644 index fa52279d..00000000 --- a/assets/BlogPost-jAaJWhIm.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,C as k}from"./index-CpdATiEY.js";import{b as E}from"./blogData-OjR2ZtNr.js";import{M as C,r as A,a as L,b as B,c as P}from"./vendor-md-CLKxNZoa.js";import{C as z,L as j}from"./vendor-PiU4YGcH.js";import{m as F,k as S,n as $}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function u(t){return typeof t=="string"?t:typeof t=="number"?String(t):t?Array.isArray(t)?t.map(u).join(""):typeof t=="object"&&"props"in t?u(t.props.children):"":""}function R(t){return t.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function i(t){return function({children:x,...m}){const h=u(x),p=m.id||R(h);return e.jsx(t,{...m,id:p,children:x})}}const M={h1:i("h1"),h2:i("h2"),h3:i("h3"),h4:i("h4"),h5:i("h5"),h6:i("h6")};function G(){const{id:t}=z(),r=E.find(s=>s.id===t),[x,m]=d.useState(""),[h,p]=d.useState(null),[y,f]=d.useState(null);d.useEffect(()=>{if(!r)return;const s=new AbortController,n=r.filename;return fetch(`/blog/${n}`,{signal:s.signal}).then(a=>{if(!a.ok)throw new Error("Failed to load post");return a.text()}).then(a=>{const o=a.replace(/^\s*#[^#\n]*\r?\n/,"");m(o),p(n),f(null)}).catch(a=>{a instanceof DOMException&&a.name==="AbortError"||(console.error(a),p(n),f(n))}),()=>s.abort()},[r]);const w=!!(r&&h!==r.filename),v=!!(r&&y===r.filename);return d.useEffect(()=>{function s(n){const o=n.target.closest("a");if(!o)return;const l=o.getAttribute("href");if(!l||!l.startsWith("#"))return;n.preventDefault();const c=document.getElementById(l.slice(1));c&&(c.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",l))}return document.addEventListener("click",s),()=>document.removeEventListener("click",s)},[]),r?e.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[e.jsx(N,{title:`${r.title} - QECTOR Blog`,description:r.description}),e.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),e.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[e.jsxs(j,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[e.jsx(F,{size:18,className:"mr-2"}),"Back to All Articles"]}),e.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[e.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[e.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[e.jsx(S,{size:16,className:"mr-2"}),r.date]}),e.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:r.category})]}),e.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:r.title}),e.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:r.description})]}),e.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:w?e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[e.jsx($,{size:48,className:"animate-spin text-cyan-400 mb-4"}),e.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):v?e.jsx("div",{className:"py-20 text-center text-red-400",children:e.jsx("p",{children:"Failed to load the article. Please try again later."})}):e.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:e.jsx(C,{remarkPlugins:[B,P],rehypePlugins:[A,L],components:{...M,table:s=>{const{node:n,...a}=s;return e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...a})})},pre:s=>{const{children:n}=s,a=b.Children.toArray(n)[0];let o="",l="text";if(b.isValidElement(a)){const c=a.props,g=/language-([\w-]+)/.exec(c.className||"");g&&(l=g[1]),o=u(c.children).replace(/\n$/,"")}return e.jsx(k,{code:o,language:l,className:"not-prose"})},img:s=>{const n=s.width!=null&&s.height!=null;return e.jsx("img",{...s,className:n?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:x})})})]})]})]}):e.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),e.jsx(j,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{G as default}; diff --git a/assets/BlogPost-rTIQ9Y3E.js b/assets/BlogPost-rTIQ9Y3E.js deleted file mode 100644 index 86b0a5cd..00000000 --- a/assets/BlogPost-rTIQ9Y3E.js +++ /dev/null @@ -1,292 +0,0 @@ -import{g as zs,j as pe,r as Xr,R as Fi}from"./vendor-react-BiHfrq0e.js";import{b as Bc,L as P0,S as Fc,C as Hc}from"./index-c1PDYu0j.js";import{b as zc}from"./blogData-OjR2ZtNr.js";import{m as Uc,k as qc,n as Yc}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function Hi(e){const t=[],r=String(e||"");let n=r.indexOf(","),a=0,i=!1;for(;!i;){n===-1&&(n=r.length,i=!0);const u=r.slice(a,n).trim();(u||!i)&&t.push(u),a=n+1,n=r.indexOf(",",a)}return t}function Us(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const Gc=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Vc=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,jc={};function zi(e,t){return(jc.jsx?Vc:Gc).test(e)}const Wc=/[ \t\n\f\r]/g;function Xc(e){return typeof e=="object"?e.type==="text"?Ui(e.value):!1:Ui(e)}function Ui(e){return e.replace(Wc,"")===""}class Tn{constructor(t,r,n){this.normal=r,this.property=t,n&&(this.space=n)}}Tn.prototype.normal={};Tn.prototype.property={};Tn.prototype.space=void 0;function qs(e,t){const r={},n={};for(const a of e)Object.assign(r,a.property),Object.assign(n,a.normal);return new Tn(r,n,t)}function fn(e){return e.toLowerCase()}class nt{constructor(t,r){this.attribute=r,this.property=t}}nt.prototype.attribute="";nt.prototype.booleanish=!1;nt.prototype.boolean=!1;nt.prototype.commaOrSpaceSeparated=!1;nt.prototype.commaSeparated=!1;nt.prototype.defined=!1;nt.prototype.mustUseProperty=!1;nt.prototype.number=!1;nt.prototype.overloadedBoolean=!1;nt.prototype.property="";nt.prototype.spaceSeparated=!1;nt.prototype.space=void 0;let $c=0;const le=gr(),Le=gr(),Ea=gr(),q=gr(),ye=gr(),fr=gr(),st=gr();function gr(){return 2**++$c}const Ta=Object.freeze(Object.defineProperty({__proto__:null,boolean:le,booleanish:Le,commaOrSpaceSeparated:st,commaSeparated:fr,number:q,overloadedBoolean:Ea,spaceSeparated:ye},Symbol.toStringTag,{value:"Module"})),B0=Object.keys(Ta);class Za extends nt{constructor(t,r,n,a){let i=-1;if(super(t,r),qi(this,"space",a),typeof n=="number")for(;++i4&&r.slice(0,4)==="data"&&e1.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(Yi,r1);n="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!Yi.test(i)){let u=i.replace(Zc,t1);u.charAt(0)!=="-"&&(u="-"+u),t="data"+u}}a=Za}return new a(n,t)}function t1(e){return"-"+e.toLowerCase()}function r1(e){return e.charAt(1).toUpperCase()}const xn=qs([Ys,Qc,js,Ws,Xs],"html"),rr=qs([Ys,Kc,js,Ws,Xs],"svg");function Gi(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function $s(e){return e.join(" ").trim()}var Ar={},F0,Vi;function n1(){if(Vi)return F0;Vi=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,n=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,i=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,s=/^\s+|\s+$/g,l=` -`,c="/",d="*",f="",g="comment",p="declaration";function x(D,_){if(typeof D!="string")throw new TypeError("First argument must be a string");if(!D)return[];_=_||{};var N=1,M=1;function W(ne){var X=ne.match(t);X&&(N+=X.length);var me=ne.lastIndexOf(l);M=~me?ne.length-me:M+ne.length}function j(){var ne={line:N,column:M};return function(X){return X.position=new L(ne),K(),X}}function L(ne){this.start=ne,this.end={line:N,column:M},this.source=_.source}L.prototype.content=D;function ee(ne){var X=new Error(_.source+":"+N+":"+M+": "+ne);if(X.reason=ne,X.filename=_.source,X.line=N,X.column=M,X.source=D,!_.silent)throw X}function re(ne){var X=ne.exec(D);if(X){var me=X[0];return W(me),D=D.slice(me.length),X}}function K(){re(r)}function R(ne){var X;for(ne=ne||[];X=J();)X!==!1&&ne.push(X);return ne}function J(){var ne=j();if(!(c!=D.charAt(0)||d!=D.charAt(1))){for(var X=2;f!=D.charAt(X)&&(d!=D.charAt(X)||c!=D.charAt(X+1));)++X;if(X+=2,f===D.charAt(X-1))return ee("End of comment missing");var me=D.slice(2,X-2);return M+=2,W(me),D=D.slice(X),M+=2,ne({type:g,comment:me})}}function Q(){var ne=j(),X=re(n);if(X){if(J(),!re(a))return ee("property missing ':'");var me=re(i),ke=ne({type:p,property:S(X[0].replace(e,f)),value:me?S(me[0].replace(e,f)):f});return re(u),ke}}function be(){var ne=[];R(ne);for(var X;X=Q();)X!==!1&&(ne.push(X),R(ne));return ne}return K(),be()}function S(D){return D?D.replace(s,f):f}return F0=x,F0}var ji;function a1(){if(ji)return Ar;ji=1;var e=Ar&&Ar.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Ar,"__esModule",{value:!0}),Ar.default=r;const t=e(n1());function r(n,a){let i=null;if(!n||typeof n!="string")return i;const u=(0,t.default)(n),s=typeof a=="function";return u.forEach(l=>{if(l.type!=="declaration")return;const{property:c,value:d}=l;s?a(c,d,l):d&&(i=i||{},i[c]=d)}),i}return Ar}var $r={},Wi;function i1(){if(Wi)return $r;Wi=1,Object.defineProperty($r,"__esModule",{value:!0}),$r.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,n=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,i=function(c){return!c||r.test(c)||e.test(c)},u=function(c,d){return d.toUpperCase()},s=function(c,d){return"".concat(d,"-")},l=function(c,d){return d===void 0&&(d={}),i(c)?c:(c=c.toLowerCase(),d.reactCompat?c=c.replace(a,s):c=c.replace(n,s),c.replace(t,u))};return $r.camelCase=l,$r}var Qr,Xi;function u1(){if(Xi)return Qr;Xi=1;var e=Qr&&Qr.__importDefault||function(a){return a&&a.__esModule?a:{default:a}},t=e(a1()),r=i1();function n(a,i){var u={};return!a||typeof a!="string"||(0,t.default)(a,function(s,l){s&&l&&(u[(0,r.camelCase)(s,i)]=l)}),u}return n.default=n,Qr=n,Qr}var s1=u1();const l1=zs(s1),d0=Qs("end"),_t=Qs("start");function Qs(e){return t;function t(r){const n=r&&r.position&&r.position[e]||{};if(typeof n.line=="number"&&n.line>0&&typeof n.column=="number"&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset=="number"&&n.offset>-1?n.offset:void 0}}}function o1(e){const t=_t(e),r=d0(e);if(t&&r)return{start:t,end:r}}function nn(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?$i(e.position):"start"in e||"end"in e?$i(e):"line"in e||"column"in e?xa(e):""}function xa(e){return Qi(e&&e.line)+":"+Qi(e&&e.column)}function $i(e){return xa(e&&e.start)+"-"+xa(e&&e.end)}function Qi(e){return e&&typeof e=="number"?e:1}class je extends Error{constructor(t,r,n){super(),typeof r=="string"&&(n=r,r=void 0);let a="",i={},u=!1;if(r&&("line"in r&&"column"in r?i={place:r}:"start"in r&&"end"in r?i={place:r}:"type"in r?i={ancestors:[r],place:r.position}:i={...r}),typeof t=="string"?a=t:!i.cause&&t&&(u=!0,a=t.message,i.cause=t),!i.ruleId&&!i.source&&typeof n=="string"){const l=n.indexOf(":");l===-1?i.ruleId=n:(i.source=n.slice(0,l),i.ruleId=n.slice(l+1))}if(!i.place&&i.ancestors&&i.ancestors){const l=i.ancestors[i.ancestors.length-1];l&&(i.place=l.position)}const s=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=s?s.line:void 0,this.name=nn(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=u&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}je.prototype.file="";je.prototype.name="";je.prototype.reason="";je.prototype.message="";je.prototype.stack="";je.prototype.column=void 0;je.prototype.line=void 0;je.prototype.ancestors=void 0;je.prototype.cause=void 0;je.prototype.fatal=void 0;je.prototype.place=void 0;je.prototype.ruleId=void 0;je.prototype.source=void 0;const ei={}.hasOwnProperty,c1=new Map,h1=/[A-Z]/g,d1=new Set(["table","tbody","thead","tfoot","tr"]),f1=new Set(["td","th"]),Ks="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function m1(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let n;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=v1(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=y1(r,t.jsx,t.jsxs)}const a={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:n,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?rr:xn,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},i=Js(a,e,void 0);return i&&typeof i!="string"?i:a.create(e,a.Fragment,{children:i||void 0},void 0)}function Js(e,t,r){if(t.type==="element")return p1(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return g1(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return E1(e,t,r);if(t.type==="mdxjsEsm")return b1(e,t);if(t.type==="root")return T1(e,t,r);if(t.type==="text")return x1(e,t)}function p1(e,t,r){const n=e.schema;let a=n;t.tagName.toLowerCase()==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=el(e,t.tagName,!1),u=A1(e,t);let s=ri(e,t);return d1.has(t.tagName)&&(s=s.filter(function(l){return typeof l=="string"?!Xc(l):!0})),Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function g1(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}mn(e,t.position)}function b1(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);mn(e,t.position)}function E1(e,t,r){const n=e.schema;let a=n;t.name==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=t.name===null?e.Fragment:el(e,t.name,!0),u=k1(e,t),s=ri(e,t);return Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function T1(e,t,r){const n={};return ti(n,ri(e,t)),e.create(t,e.Fragment,n,r)}function x1(e,t){return t.value}function Zs(e,t,r,n){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=n)}function ti(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function y1(e,t,r){return n;function n(a,i,u,s){const c=Array.isArray(u.children)?r:t;return s?c(i,u,s):c(i,u)}}function v1(e,t){return r;function r(n,a,i,u){const s=Array.isArray(i.children),l=_t(n);return t(a,i,u,s,{columnNumber:l?l.column-1:void 0,fileName:e,lineNumber:l?l.line:void 0},void 0)}}function A1(e,t){const r={};let n,a;for(a in t.properties)if(a!=="children"&&ei.call(t.properties,a)){const i=S1(e,a,t.properties[a]);if(i){const[u,s]=i;e.tableCellAlignToStyle&&u==="align"&&typeof s=="string"&&f1.has(t.tagName)?n=s:r[u]=s}}if(n){const i=r.style||(r.style={});i[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function k1(e,t){const r={};for(const n of t.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&e.evaluater){const i=n.data.estree.body[0];i.type;const u=i.expression;u.type;const s=u.properties[0];s.type,Object.assign(r,e.evaluater.evaluateExpression(s.argument))}else mn(e,t.position);else{const a=n.name;let i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&e.evaluater){const s=n.value.data.estree.body[0];s.type,i=e.evaluater.evaluateExpression(s.expression)}else mn(e,t.position);else i=n.value===null?!0:n.value;r[a]=i}return r}function ri(e,t){const r=[];let n=-1;const a=e.passKeys?new Map:c1;for(;++na?0:a+t:t=t>a?a:t,r=r>0?r:0,n.length<1e4)u=Array.from(n),u.unshift(t,r),e.splice(...u);else for(r&&e.splice(t,r);i0?(lt(e,e.length,0,t),e):t}const Zi={}.hasOwnProperty;function rl(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function xt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ke=nr(/[A-Za-z]/),Ge=nr(/[\dA-Za-z]/),R1=nr(/[#-'*+\--9=?A-Z^-~]/);function Zn(e){return e!==null&&(e<32||e===127)}const ya=nr(/\d/),M1=nr(/[\dA-Fa-f]/),P1=nr(/[!-/:-@[-`{-~]/);function ae(e){return e!==null&&e<-2}function ve(e){return e!==null&&(e<0||e===32)}function ge(e){return e===-2||e===-1||e===32}const f0=nr(new RegExp("\\p{P}|\\p{S}","u")),pr=nr(/\s/);function nr(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function Pr(e){const t=[];let r=-1,n=0,a=0;for(;++r55295&&i<57344){const s=e.charCodeAt(r+1);i<56320&&s>56319&&s<57344?(u=String.fromCharCode(i,s),a=1):u="�"}else u=String.fromCharCode(i);u&&(t.push(e.slice(n,r),encodeURIComponent(u)),n=r+a+1,u=""),a&&(r+=a,a=0)}return t.join("")+e.slice(n)}function fe(e,t,r,n){const a=n?n-1:Number.POSITIVE_INFINITY;let i=0;return u;function u(l){return ge(l)?(e.enter(r),s(l)):t(l)}function s(l){return ge(l)&&i++u))return;const ee=t.events.length;let re=ee,K,R;for(;re--;)if(t.events[re][0]==="exit"&&t.events[re][1].type==="chunkFlow"){if(K){R=t.events[re][1].end;break}K=!0}for(_(n),L=ee;LM;){const j=r[W];t.containerState=j[1],j[0].exit.call(t,e)}r.length=M}function N(){a.write([null]),i=void 0,a=void 0,t.containerState._closeFlow=void 0}}function U1(e,t,r){return fe(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ir(e){if(e===null||ve(e)||pr(e))return 1;if(f0(e))return 2}function m0(e,t,r){const n=[];let a=-1;for(;++a1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const f={...e[n][1].end},g={...e[r][1].start};tu(f,-l),tu(g,l),u={type:l>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},s={type:l>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:g},i={type:l>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[r][1].start}},a={type:l>1?"strong":"emphasis",start:{...u.start},end:{...s.end}},e[n][1].end={...u.start},e[r][1].start={...s.end},c=[],e[n][1].end.offset-e[n][1].start.offset&&(c=mt(c,[["enter",e[n][1],t],["exit",e[n][1],t]])),c=mt(c,[["enter",a,t],["enter",u,t],["exit",u,t],["enter",i,t]]),c=mt(c,m0(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),c=mt(c,[["exit",i,t],["enter",s,t],["exit",s,t],["exit",a,t]]),e[r][1].end.offset-e[r][1].start.offset?(d=2,c=mt(c,[["enter",e[r][1],t],["exit",e[r][1],t]])):d=0,lt(e,n-1,r-n+3,c),r=n+c.length-d-2;break}}for(r=-1;++r0&&ge(L)?fe(e,N,"linePrefix",i+1)(L):N(L)}function N(L){return L===null||ae(L)?e.check(ru,S,W)(L):(e.enter("codeFlowValue"),M(L))}function M(L){return L===null||ae(L)?(e.exit("codeFlowValue"),N(L)):(e.consume(L),M)}function W(L){return e.exit("codeFenced"),t(L)}function j(L,ee,re){let K=0;return R;function R(X){return L.enter("lineEnding"),L.consume(X),L.exit("lineEnding"),J}function J(X){return L.enter("codeFencedFence"),ge(X)?fe(L,Q,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(X):Q(X)}function Q(X){return X===s?(L.enter("codeFencedFenceSequence"),be(X)):re(X)}function be(X){return X===s?(K++,L.consume(X),be):K>=u?(L.exit("codeFencedFenceSequence"),ge(X)?fe(L,ne,"whitespace")(X):ne(X)):re(X)}function ne(X){return X===null||ae(X)?(L.exit("codeFencedFence"),ee(X)):re(X)}}}function Z1(e,t,r){const n=this;return a;function a(u){return u===null?r(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}const z0={name:"codeIndented",tokenize:th},eh={partial:!0,tokenize:rh};function th(e,t,r){const n=this;return a;function a(c){return e.enter("codeIndented"),fe(e,i,"linePrefix",5)(c)}function i(c){const d=n.events[n.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?u(c):r(c)}function u(c){return c===null?l(c):ae(c)?e.attempt(eh,u,l)(c):(e.enter("codeFlowValue"),s(c))}function s(c){return c===null||ae(c)?(e.exit("codeFlowValue"),u(c)):(e.consume(c),s)}function l(c){return e.exit("codeIndented"),t(c)}}function rh(e,t,r){const n=this;return a;function a(u){return n.parser.lazy[n.now().line]?r(u):ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),a):fe(e,i,"linePrefix",5)(u)}function i(u){const s=n.events[n.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(u):ae(u)?a(u):r(u)}}const nh={name:"codeText",previous:ih,resolve:ah,tokenize:uh};function ah(e){let t=e.length-4,r=3,n,a;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(t,r,n){const a=r||0;this.setCursor(Math.trunc(t));const i=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return n&&Kr(this.left,n),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Kr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Kr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(u):e.interrupt(n.parser.constructs.flow,r,t)(u)}}function ll(e,t,r,n,a,i,u,s,l){const c=l||Number.POSITIVE_INFINITY;let d=0;return f;function f(_){return _===60?(e.enter(n),e.enter(a),e.enter(i),e.consume(_),e.exit(i),g):_===null||_===32||_===41||Zn(_)?r(_):(e.enter(n),e.enter(u),e.enter(s),e.enter("chunkString",{contentType:"string"}),S(_))}function g(_){return _===62?(e.enter(i),e.consume(_),e.exit(i),e.exit(a),e.exit(n),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(_))}function p(_){return _===62?(e.exit("chunkString"),e.exit(s),g(_)):_===null||_===60||ae(_)?r(_):(e.consume(_),_===92?x:p)}function x(_){return _===60||_===62||_===92?(e.consume(_),p):p(_)}function S(_){return!d&&(_===null||_===41||ve(_))?(e.exit("chunkString"),e.exit(s),e.exit(u),e.exit(n),t(_)):d999||p===null||p===91||p===93&&!l||p===94&&!s&&"_hiddenFootnoteSupport"in u.parser.constructs?r(p):p===93?(e.exit(i),e.enter(a),e.consume(p),e.exit(a),e.exit(n),t):ae(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),f(p))}function f(p){return p===null||p===91||p===93||ae(p)||s++>999?(e.exit("chunkString"),d(p)):(e.consume(p),l||(l=!ge(p)),p===92?g:f)}function g(p){return p===91||p===92||p===93?(e.consume(p),s++,f):f(p)}}function cl(e,t,r,n,a,i){let u;return s;function s(g){return g===34||g===39||g===40?(e.enter(n),e.enter(a),e.consume(g),e.exit(a),u=g===40?41:g,l):r(g)}function l(g){return g===u?(e.enter(a),e.consume(g),e.exit(a),e.exit(n),t):(e.enter(i),c(g))}function c(g){return g===u?(e.exit(i),l(u)):g===null?r(g):ae(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),fe(e,c,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(g))}function d(g){return g===u||g===null||ae(g)?(e.exit("chunkString"),c(g)):(e.consume(g),g===92?f:d)}function f(g){return g===u||g===92?(e.consume(g),d):d(g)}}function an(e,t){let r;return n;function n(a){return ae(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,n):ge(a)?fe(e,n,r?"linePrefix":"lineSuffix")(a):t(a)}}const mh={name:"definition",tokenize:gh},ph={partial:!0,tokenize:bh};function gh(e,t,r){const n=this;let a;return i;function i(p){return e.enter("definition"),u(p)}function u(p){return ol.call(n,e,s,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return a=xt(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):r(p)}function l(p){return ve(p)?an(e,c)(p):c(p)}function c(p){return ll(e,d,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function d(p){return e.attempt(ph,f,f)(p)}function f(p){return ge(p)?fe(e,g,"whitespace")(p):g(p)}function g(p){return p===null||ae(p)?(e.exit("definition"),n.parser.defined.push(a),t(p)):r(p)}}function bh(e,t,r){return n;function n(s){return ve(s)?an(e,a)(s):r(s)}function a(s){return cl(e,i,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function i(s){return ge(s)?fe(e,u,"whitespace")(s):u(s)}function u(s){return s===null||ae(s)?t(s):r(s)}}const Eh={name:"hardBreakEscape",tokenize:Th};function Th(e,t,r){return n;function n(i){return e.enter("hardBreakEscape"),e.consume(i),a}function a(i){return ae(i)?(e.exit("hardBreakEscape"),t(i)):r(i)}}const xh={name:"headingAtx",resolve:yh,tokenize:vh};function yh(e,t){let r=e.length-2,n=3,a,i;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(a={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},i={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},lt(e,n,r-n+1,[["enter",a,t],["enter",i,t],["exit",i,t],["exit",a,t]])),e}function vh(e,t,r){let n=0;return a;function a(d){return e.enter("atxHeading"),i(d)}function i(d){return e.enter("atxHeadingSequence"),u(d)}function u(d){return d===35&&n++<6?(e.consume(d),u):d===null||ve(d)?(e.exit("atxHeadingSequence"),s(d)):r(d)}function s(d){return d===35?(e.enter("atxHeadingSequence"),l(d)):d===null||ae(d)?(e.exit("atxHeading"),t(d)):ge(d)?fe(e,s,"whitespace")(d):(e.enter("atxHeadingText"),c(d))}function l(d){return d===35?(e.consume(d),l):(e.exit("atxHeadingSequence"),s(d))}function c(d){return d===null||d===35||ve(d)?(e.exit("atxHeadingText"),s(d)):(e.consume(d),c)}}const Ah=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],au=["pre","script","style","textarea"],kh={concrete:!0,name:"htmlFlow",resolveTo:Ch,tokenize:_h},Sh={partial:!0,tokenize:Nh},wh={partial:!0,tokenize:Ih};function Ch(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function _h(e,t,r){const n=this;let a,i,u,s,l;return c;function c(C){return d(C)}function d(C){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(C),f}function f(C){return C===33?(e.consume(C),g):C===47?(e.consume(C),i=!0,S):C===63?(e.consume(C),a=3,n.interrupt?t:w):Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function g(C){return C===45?(e.consume(C),a=2,p):C===91?(e.consume(C),a=5,s=0,x):Ke(C)?(e.consume(C),a=4,n.interrupt?t:w):r(C)}function p(C){return C===45?(e.consume(C),n.interrupt?t:w):r(C)}function x(C){const Ye="CDATA[";return C===Ye.charCodeAt(s++)?(e.consume(C),s===Ye.length?n.interrupt?t:Q:x):r(C)}function S(C){return Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function D(C){if(C===null||C===47||C===62||ve(C)){const Ye=C===47,vt=u.toLowerCase();return!Ye&&!i&&au.includes(vt)?(a=1,n.interrupt?t(C):Q(C)):Ah.includes(u.toLowerCase())?(a=6,Ye?(e.consume(C),_):n.interrupt?t(C):Q(C)):(a=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(C):i?N(C):M(C))}return C===45||Ge(C)?(e.consume(C),u+=String.fromCharCode(C),D):r(C)}function _(C){return C===62?(e.consume(C),n.interrupt?t:Q):r(C)}function N(C){return ge(C)?(e.consume(C),N):R(C)}function M(C){return C===47?(e.consume(C),R):C===58||C===95||Ke(C)?(e.consume(C),W):ge(C)?(e.consume(C),M):R(C)}function W(C){return C===45||C===46||C===58||C===95||Ge(C)?(e.consume(C),W):j(C)}function j(C){return C===61?(e.consume(C),L):ge(C)?(e.consume(C),j):M(C)}function L(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),l=C,ee):ge(C)?(e.consume(C),L):re(C)}function ee(C){return C===l?(e.consume(C),l=null,K):C===null||ae(C)?r(C):(e.consume(C),ee)}function re(C){return C===null||C===34||C===39||C===47||C===60||C===61||C===62||C===96||ve(C)?j(C):(e.consume(C),re)}function K(C){return C===47||C===62||ge(C)?M(C):r(C)}function R(C){return C===62?(e.consume(C),J):r(C)}function J(C){return C===null||ae(C)?Q(C):ge(C)?(e.consume(C),J):r(C)}function Q(C){return C===45&&a===2?(e.consume(C),me):C===60&&a===1?(e.consume(C),ke):C===62&&a===4?(e.consume(C),Oe):C===63&&a===3?(e.consume(C),w):C===93&&a===5?(e.consume(C),at):ae(C)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(Sh,Xe,be)(C)):C===null||ae(C)?(e.exit("htmlFlowData"),be(C)):(e.consume(C),Q)}function be(C){return e.check(wh,ne,Xe)(C)}function ne(C){return e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),X}function X(C){return C===null||ae(C)?be(C):(e.enter("htmlFlowData"),Q(C))}function me(C){return C===45?(e.consume(C),w):Q(C)}function ke(C){return C===47?(e.consume(C),u="",ze):Q(C)}function ze(C){if(C===62){const Ye=u.toLowerCase();return au.includes(Ye)?(e.consume(C),Oe):Q(C)}return Ke(C)&&u.length<8?(e.consume(C),u+=String.fromCharCode(C),ze):Q(C)}function at(C){return C===93?(e.consume(C),w):Q(C)}function w(C){return C===62?(e.consume(C),Oe):C===45&&a===2?(e.consume(C),w):Q(C)}function Oe(C){return C===null||ae(C)?(e.exit("htmlFlowData"),Xe(C)):(e.consume(C),Oe)}function Xe(C){return e.exit("htmlFlow"),t(C)}}function Ih(e,t,r){const n=this;return a;function a(u){return ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i):r(u)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}function Nh(e,t,r){return n;function n(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(yn,t,r)}}const Dh={name:"htmlText",tokenize:Oh};function Oh(e,t,r){const n=this;let a,i,u;return s;function s(w){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(w),l}function l(w){return w===33?(e.consume(w),c):w===47?(e.consume(w),j):w===63?(e.consume(w),M):Ke(w)?(e.consume(w),re):r(w)}function c(w){return w===45?(e.consume(w),d):w===91?(e.consume(w),i=0,x):Ke(w)?(e.consume(w),N):r(w)}function d(w){return w===45?(e.consume(w),p):r(w)}function f(w){return w===null?r(w):w===45?(e.consume(w),g):ae(w)?(u=f,ke(w)):(e.consume(w),f)}function g(w){return w===45?(e.consume(w),p):f(w)}function p(w){return w===62?me(w):w===45?g(w):f(w)}function x(w){const Oe="CDATA[";return w===Oe.charCodeAt(i++)?(e.consume(w),i===Oe.length?S:x):r(w)}function S(w){return w===null?r(w):w===93?(e.consume(w),D):ae(w)?(u=S,ke(w)):(e.consume(w),S)}function D(w){return w===93?(e.consume(w),_):S(w)}function _(w){return w===62?me(w):w===93?(e.consume(w),_):S(w)}function N(w){return w===null||w===62?me(w):ae(w)?(u=N,ke(w)):(e.consume(w),N)}function M(w){return w===null?r(w):w===63?(e.consume(w),W):ae(w)?(u=M,ke(w)):(e.consume(w),M)}function W(w){return w===62?me(w):M(w)}function j(w){return Ke(w)?(e.consume(w),L):r(w)}function L(w){return w===45||Ge(w)?(e.consume(w),L):ee(w)}function ee(w){return ae(w)?(u=ee,ke(w)):ge(w)?(e.consume(w),ee):me(w)}function re(w){return w===45||Ge(w)?(e.consume(w),re):w===47||w===62||ve(w)?K(w):r(w)}function K(w){return w===47?(e.consume(w),me):w===58||w===95||Ke(w)?(e.consume(w),R):ae(w)?(u=K,ke(w)):ge(w)?(e.consume(w),K):me(w)}function R(w){return w===45||w===46||w===58||w===95||Ge(w)?(e.consume(w),R):J(w)}function J(w){return w===61?(e.consume(w),Q):ae(w)?(u=J,ke(w)):ge(w)?(e.consume(w),J):K(w)}function Q(w){return w===null||w===60||w===61||w===62||w===96?r(w):w===34||w===39?(e.consume(w),a=w,be):ae(w)?(u=Q,ke(w)):ge(w)?(e.consume(w),Q):(e.consume(w),ne)}function be(w){return w===a?(e.consume(w),a=void 0,X):w===null?r(w):ae(w)?(u=be,ke(w)):(e.consume(w),be)}function ne(w){return w===null||w===34||w===39||w===60||w===61||w===96?r(w):w===47||w===62||ve(w)?K(w):(e.consume(w),ne)}function X(w){return w===47||w===62||ve(w)?K(w):r(w)}function me(w){return w===62?(e.consume(w),e.exit("htmlTextData"),e.exit("htmlText"),t):r(w)}function ke(w){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),ze}function ze(w){return ge(w)?fe(e,at,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):at(w)}function at(w){return e.enter("htmlTextData"),u(w)}}const ii={name:"labelEnd",resolveAll:Ph,resolveTo:Bh,tokenize:Fh},Lh={tokenize:Hh},Rh={tokenize:zh},Mh={tokenize:Uh};function Ph(e){let t=-1;const r=[];for(;++t=3&&(c===null||ae(c))?(e.exit("thematicBreak"),t(c)):r(c)}function l(c){return c===a?(e.consume(c),n++,l):(e.exit("thematicBreakSequence"),ge(c)?fe(e,s,"whitespace")(c):s(c))}}const tt={continuation:{tokenize:Kh},exit:Zh,name:"list",tokenize:Qh},Xh={partial:!0,tokenize:ed},$h={partial:!0,tokenize:Jh};function Qh(e,t,r){const n=this,a=n.events[n.events.length-1];let i=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,u=0;return s;function s(p){const x=n.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(x==="listUnordered"?!n.containerState.marker||p===n.containerState.marker:ya(p)){if(n.containerState.type||(n.containerState.type=x,e.enter(x,{_container:!0})),x==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Xn,r,c)(p):c(p);if(!n.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return r(p)}function l(p){return ya(p)&&++u<10?(e.consume(p),l):(!n.interrupt||u<2)&&(n.containerState.marker?p===n.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),c(p)):r(p)}function c(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||p,e.check(yn,n.interrupt?r:d,e.attempt(Xh,g,f))}function d(p){return n.containerState.initialBlankLine=!0,i++,g(p)}function f(p){return ge(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),g):r(p)}function g(p){return n.containerState.size=i+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function Kh(e,t,r){const n=this;return n.containerState._closeFlow=void 0,e.check(yn,a,i);function a(s){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,fe(e,t,"listItemIndent",n.containerState.size+1)(s)}function i(s){return n.containerState.furtherBlankLines||!ge(s)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,u(s)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt($h,t,u)(s))}function u(s){return n.containerState._closeFlow=!0,n.interrupt=void 0,fe(e,e.attempt(tt,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function Jh(e,t,r){const n=this;return fe(e,a,"listItemIndent",n.containerState.size+1);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===n.containerState.size?t(i):r(i)}}function Zh(e){e.exit(this.containerState.type)}function ed(e,t,r){const n=this;return fe(e,a,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(i){const u=n.events[n.events.length-1];return!ge(i)&&u&&u[1].type==="listItemPrefixWhitespace"?t(i):r(i)}}const iu={name:"setextUnderline",resolveTo:td,tokenize:rd};function td(e,t){let r=e.length,n,a,i;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&e.splice(r,1),!i&&e[r][1].type==="definition"&&(i=r);const u={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",i?(e.splice(a,0,["enter",u,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=u,e.push(["exit",u,t]),e}function rd(e,t,r){const n=this;let a;return i;function i(c){let d=n.events.length,f;for(;d--;)if(n.events[d][1].type!=="lineEnding"&&n.events[d][1].type!=="linePrefix"&&n.events[d][1].type!=="content"){f=n.events[d][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||f)?(e.enter("setextHeadingLine"),a=c,u(c)):r(c)}function u(c){return e.enter("setextHeadingLineSequence"),s(c)}function s(c){return c===a?(e.consume(c),s):(e.exit("setextHeadingLineSequence"),ge(c)?fe(e,l,"lineSuffix")(c):l(c))}function l(c){return c===null||ae(c)?(e.exit("setextHeadingLine"),t(c)):r(c)}}const nd={tokenize:ad};function ad(e){const t=this,r=e.attempt(yn,n,e.attempt(this.parser.constructs.flowInitial,a,fe(e,e.attempt(this.parser.constructs.flow,a,e.attempt(oh,a)),"linePrefix")));return r;function n(i){if(i===null){e.consume(i);return}return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function a(i){if(i===null){e.consume(i);return}return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const id={resolveAll:dl()},ud=hl("string"),sd=hl("text");function hl(e){return{resolveAll:dl(e==="text"?ld:void 0),tokenize:t};function t(r){const n=this,a=this.parser.constructs[e],i=r.attempt(a,u,s);return u;function u(d){return c(d)?i(d):s(d)}function s(d){if(d===null){r.consume(d);return}return r.enter("data"),r.consume(d),l}function l(d){return c(d)?(r.exit("data"),i(d)):(r.consume(d),l)}function c(d){if(d===null)return!0;const f=a[d];let g=-1;if(f)for(;++g-1){const s=u[0];typeof s=="string"?u[0]=s.slice(n):u.shift()}i>0&&u.push(e[a].slice(0,i))}return u}function yd(e,t){let r=-1;const n=[];let a;for(;++r0){const Tt=ue.tokenStack[ue.tokenStack.length-1];(Tt[1]||su).call(ue,void 0,Tt[0])}for($.position={start:Vt(B.length>0?B[0][1].start:{line:1,column:1,offset:0}),end:Vt(B.length>0?B[B.length-2][1].end:{line:1,column:1,offset:0})},xe=-1;++xe0&&(n.className=["language-"+a[0]]);let i={type:"element",tagName:"code",properties:n,children:[{type:"text",value:r}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i=e.applyData(t,i),i={type:"element",tagName:"pre",properties:{},children:[i]},e.patch(t,i),i}function Md(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Pd(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Bd(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=String(t.identifier).toUpperCase(),a=Pr(n.toLowerCase()),i=e.footnoteOrder.indexOf(n);let u,s=e.footnoteCounts.get(n);s===void 0?(s=0,e.footnoteOrder.push(n),u=e.footnoteOrder.length):u=i+1,s+=1,e.footnoteCounts.set(n,s);const l={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(t,l);const c={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,c),e.applyData(t,c)}function Fd(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Hd(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function pl(e,t){const r=t.referenceType;let n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+n}];const a=e.all(t),i=a[0];i&&i.type==="text"?i.value="["+i.value:a.unshift({type:"text",value:"["});const u=a[a.length-1];return u&&u.type==="text"?u.value+=n:a.push({type:"text",value:n}),a}function zd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={src:Pr(n.url||""),alt:t.alt};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,i),e.applyData(t,i)}function Ud(e,t){const r={src:Pr(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function qd(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function Yd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={href:Pr(n.url||"")};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function Gd(e,t){const r={href:Pr(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Vd(e,t,r){const n=e.all(t),a=r?jd(r):gl(t),i={},u=[];if(typeof t.checked=="boolean"){const d=n[0];let f;d&&d.type==="element"&&d.tagName==="p"?f=d:(f={type:"element",tagName:"p",properties:{},children:[]},n.unshift(f)),f.children.length>0&&f.children.unshift({type:"text",value:" "}),f.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let s=-1;for(;++s1}function Wd(e,t){const r={},n=e.all(t);let a=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++a0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},s=_t(t.children[1]),l=d0(t.children[t.children.length-1]);s&&l&&(u.position={start:s,end:l}),a.push(u)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(t,i),e.applyData(t,i)}function Jd(e,t,r){const n=r?r.children:void 0,i=(n?n.indexOf(t):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,s=u?u.length:t.children.length;let l=-1;const c=[];for(;++l0,!0),n[0]),a=n.index+n[0].length,n=r.exec(t);return i.push(cu(t.slice(a),a>0,!1)),i.join("")}function cu(e,t,r){let n=0,a=e.length;if(t){let i=e.codePointAt(n);for(;i===lu||i===ou;)n++,i=e.codePointAt(n)}if(r){let i=e.codePointAt(a-1);for(;i===lu||i===ou;)a--,i=e.codePointAt(a-1)}return a>n?e.slice(n,a):""}function tf(e,t){const r={type:"text",value:ef(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function rf(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const nf={blockquote:Od,break:Ld,code:Rd,delete:Md,emphasis:Pd,footnoteReference:Bd,heading:Fd,html:Hd,imageReference:zd,image:Ud,inlineCode:qd,linkReference:Yd,link:Gd,listItem:Vd,list:Wd,paragraph:Xd,root:$d,strong:Qd,table:Kd,tableCell:Zd,tableRow:Jd,text:tf,thematicBreak:rf,toml:Mn,yaml:Mn,definition:Mn,footnoteDefinition:Mn};function Mn(){}const bl=-1,p0=0,un=1,e0=2,ui=3,si=4,li=5,oi=6,El=7,Tl=8,xl=typeof self=="object"?self:globalThis,hu=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new xl[e](t)},af=(e,t)=>{const r=(a,i)=>(e.set(i,a),a),n=a=>{if(e.has(a))return e.get(a);const[i,u]=t[a];switch(i){case p0:case bl:return r(u,a);case un:{const s=r([],a);for(const l of u)s.push(n(l));return s}case e0:{const s=r({},a);for(const[l,c]of u)s[n(l)]=n(c);return s}case ui:return r(new Date(u),a);case si:{const{source:s,flags:l}=u;return r(new RegExp(s,l),a)}case li:{const s=r(new Map,a);for(const[l,c]of u)s.set(n(l),n(c));return s}case oi:{const s=r(new Set,a);for(const l of u)s.add(n(l));return s}case El:{const{name:s,message:l}=u;return r(typeof xl[s]=="function"?hu(s,l):new Error(l),a)}case Tl:return r(BigInt(u),a);case"BigInt":return r(Object(BigInt(u)),a);case"ArrayBuffer":return r(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:s}=new Uint8Array(u);return r(new DataView(s),u)}}return r(hu(i,u),a)};return n},du=e=>af(new Map,e)(0),hr="",{toString:uf}={},{keys:sf}=Object,Jr=e=>{const t=typeof e;if(t!=="object"||!e)return[p0,t];const r=uf.call(e).slice(8,-1);switch(r){case"Array":return[un,hr];case"Object":return[e0,hr];case"Date":return[ui,hr];case"RegExp":return[si,hr];case"Map":return[li,hr];case"Set":return[oi,hr];case"DataView":return[un,r]}return r.includes("Array")?[un,r]:e instanceof Error?[El,e.name||"Error"]:[e0,r]},Pn=([e,t])=>e===p0&&(t==="function"||t==="symbol"),lf=(e,t,r,n)=>{const a=(u,s)=>{const l=n.push(u)-1;return r.set(s,l),l},i=u=>{if(r.has(u))return r.get(u);let[s,l]=Jr(u);switch(s){case p0:{let d=u;switch(l){case"bigint":s=Tl,d=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+l);d=null;break;case"undefined":return a([bl],u)}return a([s,d],u)}case un:{if(l){let g=u;return l==="DataView"?g=new Uint8Array(u.buffer):l==="ArrayBuffer"&&(g=new Uint8Array(u)),a([l,[...g]],u)}const d=[],f=a([s,d],u);for(const g of u)d.push(i(g));return f}case e0:{if(l)switch(l){case"BigInt":return a([l,u.toString()],u);case"Boolean":case"Number":case"String":return a([l,u.valueOf()],u)}if(t&&"toJSON"in u)return i(u.toJSON());const d=[],f=a([s,d],u);for(const g of sf(u))(e||!Pn(Jr(u[g])))&&d.push([i(g),i(u[g])]);return f}case ui:return a([s,isNaN(u.getTime())?hr:u.toISOString()],u);case si:{const{source:d,flags:f}=u;return a([s,{source:d,flags:f}],u)}case li:{const d=[],f=a([s,d],u);for(const[g,p]of u)(e||!(Pn(Jr(g))||Pn(Jr(p))))&&d.push([i(g),i(p)]);return f}case oi:{const d=[],f=a([s,d],u);for(const g of u)(e||!Pn(Jr(g)))&&d.push(i(g));return f}}const{message:c}=u;return a([s,{name:l,message:c}],u)};return i},fu=(e,{json:t,lossy:r}={})=>{const n=[];return lf(!(t||r),!!t,new Map,n)(e),n},Nr=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?du(fu(e,t)):structuredClone(e):(e,t)=>du(fu(e,t));function of(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function cf(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function hf(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||of,n=e.options.footnoteBackLabel||cf,a=e.options.footnoteLabel||"Footnotes",i=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let l=-1;for(;++l0&&x.push({type:"text",value:" "});let N=typeof r=="string"?r:r(l,p);typeof N=="string"&&(N={type:"text",value:N}),x.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof n=="string"?n:n(l,p),className:["data-footnote-backref"]},children:Array.isArray(N)?N:[N]})}const D=d[d.length-1];if(D&&D.type==="element"&&D.tagName==="p"){const N=D.children[D.children.length-1];N&&N.type==="text"?N.value+=" ":D.children.push({type:"text",value:" "}),D.children.push(...x)}else d.push(...x);const _={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(d,!0)};e.patch(c,_),s.push(_)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...Nr(u),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` -`}]}}const vn=(function(e){if(e==null)return pf;if(typeof e=="function")return g0(e);if(typeof e=="object")return Array.isArray(e)?df(e):ff(e);if(typeof e=="string")return mf(e);throw new Error("Expected function, string, or object as test")});function df(e){const t=[];let r=-1;for(;++r":""))+")"})}return g;function g(){let p=yl,x,S,D;if((!t||i(l,c,d[d.length-1]||void 0))&&(p=Ef(r(l,d)),p[0]===Aa))return p;if("children"in l&&l.children){const _=l;if(_.children&&p[0]!==vl)for(S=(n?_.children.length:-1)+u,D=d.concat(_);S>-1&&S<_.children.length;){const N=_.children[S];if(x=s(N,S,D)(),x[0]===Aa)return x;S=typeof x[1]=="number"?x[1]:S+u}}return p}}}function Ef(e){return Array.isArray(e)?e:typeof e=="number"?[bf,e]:e==null?yl:[e]}function b0(e,t,r,n){let a,i,u;typeof t=="function"&&typeof r!="function"?(i=void 0,u=t,a=r):(i=t,u=r,a=n),ci(e,i,s,a);function s(l,c){const d=c[c.length-1],f=d?d.children.indexOf(l):void 0;return u(l,f,d)}}const ka={}.hasOwnProperty,Tf={};function xf(e,t){const r=t||Tf,n=new Map,a=new Map,i=new Map,u={...nf,...r.handlers},s={all:c,applyData:vf,definitionById:n,footnoteById:a,footnoteCounts:i,footnoteOrder:[],handlers:u,one:l,options:r,patch:yf,wrap:kf};return b0(e,function(d){if(d.type==="definition"||d.type==="footnoteDefinition"){const f=d.type==="definition"?n:a,g=String(d.identifier).toUpperCase();f.has(g)||f.set(g,d)}}),s;function l(d,f){const g=d.type,p=s.handlers[g];if(ka.call(s.handlers,g)&&p)return p(s,d,f);if(s.options.passThrough&&s.options.passThrough.includes(g)){if("children"in d){const{children:S,...D}=d,_=Nr(D);return _.children=s.all(d),_}return Nr(d)}return(s.options.unknownHandler||Af)(s,d,f)}function c(d){const f=[];if("children"in d){const g=d.children;let p=-1;for(;++p0&&r.push({type:"text",value:` -`}),r}function mu(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function pu(e,t){const r=xf(e,t),n=r.one(e,void 0),a=hf(r),i=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return a&&i.children.push({type:"text",value:` -`},a),i}function Sf(e,t){return e&&"run"in e?async function(r,n){const a=pu(r,{file:n,...t});await e.run(a,n)}:function(r,n){return pu(r,{file:n,...e||t})}}function gu(e){if(e)throw e}var q0,bu;function wf(){if(bu)return q0;bu=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=function(c){return typeof Array.isArray=="function"?Array.isArray(c):t.call(c)==="[object Array]"},i=function(c){if(!c||t.call(c)!=="[object Object]")return!1;var d=e.call(c,"constructor"),f=c.constructor&&c.constructor.prototype&&e.call(c.constructor.prototype,"isPrototypeOf");if(c.constructor&&!d&&!f)return!1;var g;for(g in c);return typeof g>"u"||e.call(c,g)},u=function(c,d){r&&d.name==="__proto__"?r(c,d.name,{enumerable:!0,configurable:!0,value:d.newValue,writable:!0}):c[d.name]=d.newValue},s=function(c,d){if(d==="__proto__")if(e.call(c,d)){if(n)return n(c,d).value}else return;return c[d]};return q0=function l(){var c,d,f,g,p,x,S=arguments[0],D=1,_=arguments.length,N=!1;for(typeof S=="boolean"&&(N=S,S=arguments[1]||{},D=2),(S==null||typeof S!="object"&&typeof S!="function")&&(S={});D<_;++D)if(c=arguments[D],c!=null)for(d in c)f=s(S,d),g=s(c,d),S!==g&&(N&&g&&(i(g)||(p=a(g)))?(p?(p=!1,x=f&&a(f)?f:[]):x=f&&i(f)?f:{},u(S,{name:d,newValue:l(N,x,g)})):typeof g<"u"&&u(S,{name:d,newValue:g}));return S},q0}var Cf=wf();const Y0=zs(Cf);function Sa(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function _f(){const e=[],t={run:r,use:n};return t;function r(...a){let i=-1;const u=a.pop();if(typeof u!="function")throw new TypeError("Expected function as last argument, not "+u);s(null,...a);function s(l,...c){const d=e[++i];let f=-1;if(l){u(l);return}for(;++fu.length;let l;s&&u.push(a);try{l=e.apply(this,u)}catch(c){const d=c;if(s&&r)throw d;return a(d)}s||(l&&l.then&&typeof l.then=="function"?l.then(i,a):l instanceof Error?a(l):i(l))}function a(u,...s){r||(r=!0,t(u,...s))}function i(u){a(null,u)}}const At={basename:Nf,dirname:Df,extname:Of,join:Lf,sep:"/"};function Nf(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');An(e);let r=0,n=-1,a=e.length,i;if(t===void 0||t.length===0||t.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else n<0&&(i=!0,n=a+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let u=-1,s=t.length-1;for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else u<0&&(i=!0,u=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(n=a):(s=-1,n=u));return r===n?n=u:n<0&&(n=e.length),e.slice(r,n)}function Df(e){if(An(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function Of(e){An(e);let t=e.length,r=-1,n=0,a=-1,i=0,u;for(;t--;){const s=e.codePointAt(t);if(s===47){if(u){n=t+1;break}continue}r<0&&(u=!0,r=t+1),s===46?a<0?a=t:i!==1&&(i=1):a>-1&&(i=-1)}return a<0||r<0||i===0||i===1&&a===r-1&&a===n+1?"":e.slice(a,r)}function Lf(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function Mf(e,t){let r="",n=0,a=-1,i=0,u=-1,s,l;for(;++u<=e.length;){if(u2){if(l=r.lastIndexOf("/"),l!==r.length-1){l<0?(r="",n=0):(r=r.slice(0,l),n=r.length-1-r.lastIndexOf("/")),a=u,i=0;continue}}else if(r.length>0){r="",n=0,a=u,i=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(a+1,u):r=e.slice(a+1,u),n=u-a-1;a=u,i=0}else s===46&&i>-1?i++:i=-1}return r}function An(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Pf={cwd:Bf};function Bf(){return"/"}function wa(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function Ff(e){if(typeof e=="string")e=new URL(e);else if(!wa(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return Hf(e)}function Hf(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r0){let[p,...x]=d;const S=n[g][1];Sa(S)&&Sa(p)&&(p=Y0(!0,S,p)),n[g]=[c,p,...x]}}}}const Yf=new hi().freeze();function W0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function X0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function $0(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Tu(e){if(!Sa(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function xu(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Bn(e){return Gf(e)?e:new Al(e)}function Gf(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function Vf(e){return typeof e=="string"||jf(e)}function jf(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Wf="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",yu=[],vu={allowDangerousHtml:!0},Xf=/^(https?|ircs?|mailto|xmpp)$/i,$f=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Qf(e){const t=Kf(e),r=Jf(e);return Zf(t.runSync(t.parse(r),r),e)}function Kf(e){const t=e.rehypePlugins||yu,r=e.remarkPlugins||yu,n=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...vu}:vu;return Yf().use(Dd).use(r).use(Sf,n).use(t)}function Jf(e){const t=e.children||"",r=new Al;return typeof t=="string"&&(r.value=t),r}function Zf(e,t){const r=t.allowedElements,n=t.allowElement,a=t.components,i=t.disallowedElements,u=t.skipHtml,s=t.unwrapDisallowed,l=t.urlTransform||em;for(const d of $f)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+Wf+d.id,void 0);return b0(e,c),m1(e,{Fragment:pe.Fragment,components:a,ignoreInvalidStyle:!0,jsx:pe.jsx,jsxs:pe.jsxs,passKeys:!0,passNode:!0});function c(d,f,g){if(d.type==="raw"&&g&&typeof f=="number")return u?g.children.splice(f,1):g.children[f]={type:"text",value:d.value},f;if(d.type==="element"){let p;for(p in H0)if(Object.hasOwn(H0,p)&&Object.hasOwn(d.properties,p)){const x=d.properties[p],S=H0[p];(S===null||S.includes(d.tagName))&&(d.properties[p]=l(String(x||""),p,d))}}if(d.type==="element"){let p=r?!r.includes(d.tagName):i?i.includes(d.tagName):!1;if(!p&&n&&typeof f=="number"&&(p=!n(d,f,g)),p&&g&&typeof f=="number")return s&&d.children?g.children.splice(f,1,...d.children):g.children.splice(f,1),f}}}function em(e){const t=e.indexOf(":"),r=e.indexOf("?"),n=e.indexOf("#"),a=e.indexOf("/");return t===-1||a!==-1&&t>a||r!==-1&&t>r||n!==-1&&t>n||Xf.test(e.slice(0,t))?e:""}function Au(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let n=0,a=r.indexOf(t);for(;a!==-1;)n++,a=r.indexOf(t,a+t.length);return n}function tm(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function rm(e,t,r){const a=vn((r||{}).ignore||[]),i=nm(t);let u=-1;for(;++u0?{type:"text",value:L}:void 0),L===!1?g.lastIndex=W+1:(x!==W&&N.push({type:"text",value:c.value.slice(x,W)}),Array.isArray(L)?N.push(...L):L&&N.push(L),x=W+M[0].length,_=!0),!g.global)break;M=g.exec(c.value)}return _?(x?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],n=r.indexOf(")");const a=Au(e,"(");let i=Au(e,")");for(;n!==-1&&a>i;)e+=r.slice(0,n+1),r=r.slice(n+1),n=r.indexOf(")"),i++;return[e,r]}function kl(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||pr(r)||f0(r))&&(!t||r!==47)}Sl.peek=wm;function Em(){this.buffer()}function Tm(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function xm(){this.buffer()}function ym(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function vm(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Am(e){this.exit(e)}function km(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Sm(e){this.exit(e)}function wm(){return"["}function Sl(e,t,r,n){const a=r.createTracker(n);let i=a.move("[^");const u=r.enter("footnoteReference"),s=r.enter("reference");return i+=a.move(r.safe(r.associationId(e),{after:"]",before:i})),s(),u(),i+=a.move("]"),i}function Cm(){return{enter:{gfmFootnoteCallString:Em,gfmFootnoteCall:Tm,gfmFootnoteDefinitionLabelString:xm,gfmFootnoteDefinition:ym},exit:{gfmFootnoteCallString:vm,gfmFootnoteCall:Am,gfmFootnoteDefinitionLabelString:km,gfmFootnoteDefinition:Sm}}}function _m(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:Sl},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(n,a,i,u){const s=i.createTracker(u);let l=s.move("[^");const c=i.enter("footnoteDefinition"),d=i.enter("label");return l+=s.move(i.safe(i.associationId(n),{before:l,after:"]"})),d(),l+=s.move("]:"),n.children&&n.children.length>0&&(s.shift(4),l+=s.move((t?` -`:" ")+i.indentLines(i.containerFlow(n,s.current()),t?wl:Im))),c(),l}}function Im(e,t,r){return t===0?e:wl(e,t,r)}function wl(e,t,r){return(r?"":" ")+e}const Nm=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Cl.peek=Mm;function Dm(){return{canContainEols:["delete"],enter:{strikethrough:Lm},exit:{strikethrough:Rm}}}function Om(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Nm}],handlers:{delete:Cl}}}function Lm(e){this.enter({type:"delete",children:[]},e)}function Rm(e){this.exit(e)}function Cl(e,t,r,n){const a=r.createTracker(n),i=r.enter("strikethrough");let u=a.move("~~");return u+=r.containerPhrasing(e,{...a.current(),before:u,after:"~"}),u+=a.move("~~"),i(),u}function Mm(){return"~"}function Pm(e){return e.length}function Bm(e,t){const r=t||{},n=(r.align||[]).concat(),a=r.stringLength||Pm,i=[],u=[],s=[],l=[];let c=0,d=-1;for(;++dc&&(c=e[d].length);++_l[_])&&(l[_]=M)}S.push(N)}u[d]=S,s[d]=D}let f=-1;if(typeof n=="object"&&"length"in n)for(;++fl[f]&&(l[f]=N),p[f]=N),g[f]=M}u.splice(1,0,g),s.splice(1,0,p),d=-1;const x=[];for(;++d "),i.shift(2);const u=r.indentLines(r.containerFlow(e,i.current()),zm);return a(),u}function zm(e,t,r){return">"+(r?"":" ")+e}function Um(e,t){return wu(e,t.inConstruct,!0)&&!wu(e,t.notInConstruct,!1)}function wu(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let n=-1;for(;++nu&&(u=i):i=1,a=n+t.length,n=r.indexOf(t,a);return u}function qm(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Ym(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function Gm(e,t,r,n){const a=Ym(r),i=e.value||"",u=a==="`"?"GraveAccent":"Tilde";if(qm(e,r)){const f=r.enter("codeIndented"),g=r.indentLines(i,Vm);return f(),g}const s=r.createTracker(n),l=a.repeat(Math.max(Il(i,a)+1,3)),c=r.enter("codeFenced");let d=s.move(l);if(e.lang){const f=r.enter(`codeFencedLang${u}`);d+=s.move(r.safe(e.lang,{before:d,after:" ",encode:["`"],...s.current()})),f()}if(e.lang&&e.meta){const f=r.enter(`codeFencedMeta${u}`);d+=s.move(" "),d+=s.move(r.safe(e.meta,{before:d,after:` -`,encode:["`"],...s.current()})),f()}return d+=s.move(` -`),i&&(d+=s.move(i+` -`)),d+=s.move(l),c(),d}function Vm(e,t,r){return(r?"":" ")+e}function di(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function jm(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("definition");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("[");return c+=l.move(r.safe(r.associationId(e),{before:c,after:"]",...l.current()})),c+=l.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":` -`,...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),u(),c}function Wm(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function pn(e){return"&#x"+e.toString(16).toUpperCase()+";"}function t0(e,t,r){const n=Ir(e),a=Ir(t);return n===void 0?a===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:n===1?a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Nl.peek=Xm;function Nl(e,t,r,n){const a=Wm(r),i=r.enter("emphasis"),u=r.createTracker(n),s=u.move(a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function Xm(e,t,r){return r.options.emphasis||"*"}function $m(e,t){let r=!1;return b0(e,function(n){if("value"in n&&/\r?\n|\r/.test(n.value)||n.type==="break")return r=!0,Aa}),!!((!e.depth||e.depth<3)&&ni(e)&&(t.options.setext||r))}function Qm(e,t,r,n){const a=Math.max(Math.min(6,e.depth||1),1),i=r.createTracker(n);if($m(e,r)){const d=r.enter("headingSetext"),f=r.enter("phrasing"),g=r.containerPhrasing(e,{...i.current(),before:` -`,after:` -`});return f(),d(),g+` -`+(a===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` -`))+1))}const u="#".repeat(a),s=r.enter("headingAtx"),l=r.enter("phrasing");i.move(u+" ");let c=r.containerPhrasing(e,{before:"# ",after:` -`,...i.current()});return/^[\t ]/.test(c)&&(c=pn(c.charCodeAt(0))+c.slice(1)),c=c?u+" "+c:u,r.options.closeAtx&&(c+=" "+u),l(),s(),c}Dl.peek=Km;function Dl(e){return e.value||""}function Km(){return"<"}Ol.peek=Jm;function Ol(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("image");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("![");return c+=l.move(r.safe(e.alt,{before:c,after:"]",...l.current()})),c+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),c+=l.move(")"),u(),c}function Jm(){return"!"}Ll.peek=Zm;function Ll(e,t,r,n){const a=e.referenceType,i=r.enter("imageReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("![");const c=r.safe(e.alt,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function Zm(){return"!"}Rl.peek=e2;function Rl(e,t,r){let n=e.value||"",a="`",i=-1;for(;new RegExp("(^|[^`])"+a+"([^`]|$)").test(n);)a+="`";for(/[^ \r\n]/.test(n)&&(/^[ \r\n]/.test(n)&&/[ \r\n]$/.test(n)||/^`|`$/.test(n))&&(n=" "+n+" ");++i\u007F]/.test(e.url))}Pl.peek=t2;function Pl(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.createTracker(n);let s,l;if(Ml(e,r)){const d=r.stack;r.stack=[],s=r.enter("autolink");let f=u.move("<");return f+=u.move(r.containerPhrasing(e,{before:f,after:">",...u.current()})),f+=u.move(">"),s(),r.stack=d,f}s=r.enter("link"),l=r.enter("label");let c=u.move("[");return c+=u.move(r.containerPhrasing(e,{before:c,after:"](",...u.current()})),c+=u.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=r.enter("destinationLiteral"),c+=u.move("<"),c+=u.move(r.safe(e.url,{before:c,after:">",...u.current()})),c+=u.move(">")):(l=r.enter("destinationRaw"),c+=u.move(r.safe(e.url,{before:c,after:e.title?" ":")",...u.current()}))),l(),e.title&&(l=r.enter(`title${i}`),c+=u.move(" "+a),c+=u.move(r.safe(e.title,{before:c,after:a,...u.current()})),c+=u.move(a),l()),c+=u.move(")"),s(),c}function t2(e,t,r){return Ml(e,r)?"<":"["}Bl.peek=r2;function Bl(e,t,r,n){const a=e.referenceType,i=r.enter("linkReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("[");const c=r.containerPhrasing(e,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function r2(){return"["}function fi(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function n2(e){const t=fi(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function a2(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Fl(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function i2(e,t,r,n){const a=r.enter("list"),i=r.bulletCurrent;let u=e.ordered?a2(r):fi(r);const s=e.ordered?u==="."?")":".":n2(r);let l=t&&r.bulletLastUsed?u===r.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((u==="*"||u==="-")&&d&&(!d.children||!d.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(l=!0),Fl(r)===u&&d){let f=-1;for(;++f-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+i);let u=i.length+1;(a==="tab"||a==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(u=Math.ceil(u/4)*4);const s=r.createTracker(n);s.move(i+" ".repeat(u-i.length)),s.shift(u);const l=r.enter("listItem"),c=r.indentLines(r.containerFlow(e,s.current()),d);return l(),c;function d(f,g,p){return g?(p?"":" ".repeat(u))+f:(p?i:i+" ".repeat(u-i.length))+f}}function l2(e,t,r,n){const a=r.enter("paragraph"),i=r.enter("phrasing"),u=r.containerPhrasing(e,n);return i(),a(),u}const o2=vn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function c2(e,t,r,n){return(e.children.some(function(u){return o2(u)})?r.containerPhrasing:r.containerFlow).call(r,e,n)}function h2(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}Hl.peek=d2;function Hl(e,t,r,n){const a=h2(r),i=r.enter("strong"),u=r.createTracker(n),s=u.move(a+a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a+a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function d2(e,t,r){return r.options.strong||"*"}function f2(e,t,r,n){return r.safe(e.value,n)}function m2(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function p2(e,t,r){const n=(Fl(r)+(r.options.ruleSpaces?" ":"")).repeat(m2(r));return r.options.ruleSpaces?n.slice(0,-1):n}const zl={blockquote:Hm,break:Cu,code:Gm,definition:jm,emphasis:Nl,hardBreak:Cu,heading:Qm,html:Dl,image:Ol,imageReference:Ll,inlineCode:Rl,link:Pl,linkReference:Bl,list:i2,listItem:s2,paragraph:l2,root:c2,strong:Hl,text:f2,thematicBreak:p2};function g2(){return{enter:{table:b2,tableData:_u,tableHeader:_u,tableRow:T2},exit:{codeText:x2,table:E2,tableData:Z0,tableHeader:Z0,tableRow:Z0}}}function b2(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function E2(e){this.exit(e),this.data.inTable=void 0}function T2(e){this.enter({type:"tableRow",children:[]},e)}function Z0(e){this.exit(e)}function _u(e){this.enter({type:"tableCell",children:[]},e)}function x2(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,y2));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function y2(e,t){return t==="|"?t:e}function v2(e){const t=e||{},r=t.tableCellPadding,n=t.tablePipeAlign,a=t.stringLength,i=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:u,tableCell:l,tableRow:s}};function u(p,x,S,D){return c(d(p,S,D),p.align)}function s(p,x,S,D){const _=f(p,S,D),N=c([_]);return N.slice(0,N.indexOf(` -`))}function l(p,x,S,D){const _=S.enter("tableCell"),N=S.enter("phrasing"),M=S.containerPhrasing(p,{...D,before:i,after:i});return N(),_(),M}function c(p,x){return Bm(p,{align:x,alignDelimiters:n,padding:r,stringLength:a})}function d(p,x,S){const D=p.children;let _=-1;const N=[],M=x.enter("table");for(;++_0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const z2={tokenize:X2,partial:!0};function U2(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:V2,continuation:{tokenize:j2},exit:W2}},text:{91:{name:"gfmFootnoteCall",tokenize:G2},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:q2,resolveTo:Y2}}}}function q2(e,t,r){const n=this;let a=n.events.length;const i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let u;for(;a--;){const l=n.events[a][1];if(l.type==="labelImage"){u=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!u||!u._balanced)return r(l);const c=xt(n.sliceSerialize({start:u.end,end:n.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?r(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),t(l))}}function Y2(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const n={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},s=[e[r+1],e[r+2],["enter",n,t],e[r+3],e[r+4],["enter",a,t],["exit",a,t],["enter",i,t],["enter",u,t],["exit",u,t],["exit",i,t],e[e.length-2],e[e.length-1],["exit",n,t]];return e.splice(r,e.length-r+1,...s),e}function G2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i=0,u;return s;function s(f){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),l}function l(f){return f!==94?r(f):(e.enter("gfmFootnoteCallMarker"),e.consume(f),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(f){if(i>999||f===93&&!u||f===null||f===91||ve(f))return r(f);if(f===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return a.includes(xt(n.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(f)}return ve(f)||(u=!0),i++,e.consume(f),f===92?d:c}function d(f){return f===91||f===92||f===93?(e.consume(f),i++,c):c(f)}}function V2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i,u=0,s;return l;function l(x){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(x){return x===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):r(x)}function d(x){if(u>999||x===93&&!s||x===null||x===91||ve(x))return r(x);if(x===93){e.exit("chunkString");const S=e.exit("gfmFootnoteDefinitionLabelString");return i=xt(n.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return ve(x)||(s=!0),u++,e.consume(x),x===92?f:d}function f(x){return x===91||x===92||x===93?(e.consume(x),u++,d):d(x)}function g(x){return x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),a.includes(i)||a.push(i),fe(e,p,"gfmFootnoteDefinitionWhitespace")):r(x)}function p(x){return t(x)}}function j2(e,t,r){return e.check(yn,t,e.attempt(z2,t,r))}function W2(e){e.exit("gfmFootnoteDefinition")}function X2(e,t,r){const n=this;return fe(e,a,"gfmFootnoteDefinitionIndent",5);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="gfmFootnoteDefinitionIndent"&&u[2].sliceSerialize(u[1],!0).length===4?t(i):r(i)}}function $2(e){let r=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:i,resolveAll:a};return r==null&&(r=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function a(u,s){let l=-1;for(;++l1?l(x):(u.consume(x),f++,p);if(f<2&&!r)return l(x);const D=u.exit("strikethroughSequenceTemporary"),_=Ir(x);return D._open=!_||_===2&&!!S,D._close=!S||S===2&&!!_,s(x)}}}class Q2{constructor(){this.map=[]}add(t,r,n){K2(this,t,r,n)}consume(t){if(this.map.sort(function(i,u){return i[0]-u[0]}),this.map.length===0)return;let r=this.map.length;const n=[];for(;r>0;)r-=1,n.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];n.push(t.slice()),t.length=0;let a=n.pop();for(;a;){for(const i of a)t.push(i);a=n.pop()}this.map.length=0}}function K2(e,t,r,n){let a=0;if(!(r===0&&n.length===0)){for(;a-1;){const ne=n.events[J][1].type;if(ne==="lineEnding"||ne==="linePrefix")J--;else break}const Q=J>-1?n.events[J][1].type:null,be=Q==="tableHead"||Q==="tableRow"?L:l;return be===L&&n.parser.lazy[n.now().line]?r(R):be(R)}function l(R){return e.enter("tableHead"),e.enter("tableRow"),c(R)}function c(R){return R===124||(u=!0,i+=1),d(R)}function d(R){return R===null?r(R):ae(R)?i>1?(i=0,n.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),p):r(R):ge(R)?fe(e,d,"whitespace")(R):(i+=1,u&&(u=!1,a+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),u=!0,d):(e.enter("data"),f(R)))}function f(R){return R===null||R===124||ve(R)?(e.exit("data"),d(R)):(e.consume(R),R===92?g:f)}function g(R){return R===92||R===124?(e.consume(R),f):f(R)}function p(R){return n.interrupt=!1,n.parser.lazy[n.now().line]?r(R):(e.enter("tableDelimiterRow"),u=!1,ge(R)?fe(e,x,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):x(R))}function x(R){return R===45||R===58?D(R):R===124?(u=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),S):j(R)}function S(R){return ge(R)?fe(e,D,"whitespace")(R):D(R)}function D(R){return R===58?(i+=1,u=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),_):R===45?(i+=1,_(R)):R===null||ae(R)?W(R):j(R)}function _(R){return R===45?(e.enter("tableDelimiterFiller"),N(R)):j(R)}function N(R){return R===45?(e.consume(R),N):R===58?(u=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),M):(e.exit("tableDelimiterFiller"),M(R))}function M(R){return ge(R)?fe(e,W,"whitespace")(R):W(R)}function W(R){return R===124?x(R):R===null||ae(R)?!u||a!==i?j(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):j(R)}function j(R){return r(R)}function L(R){return e.enter("tableRow"),ee(R)}function ee(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),ee):R===null||ae(R)?(e.exit("tableRow"),t(R)):ge(R)?fe(e,ee,"whitespace")(R):(e.enter("data"),re(R))}function re(R){return R===null||R===124||ve(R)?(e.exit("data"),ee(R)):(e.consume(R),R===92?K:re)}function K(R){return R===92||R===124?(e.consume(R),re):re(R)}}function t4(e,t){let r=-1,n=!0,a=0,i=[0,0,0,0],u=[0,0,0,0],s=!1,l=0,c,d,f;const g=new Q2;for(;++rr[2]+1){const x=r[2]+1,S=r[3]-r[2]-1;e.add(x,S,[])}}e.add(r[3]+1,0,[["exit",f,t]])}return a!==void 0&&(i.end=Object.assign({},wr(t.events,a)),e.add(a,0,[["exit",i,t]]),i=void 0),i}function Nu(e,t,r,n,a){const i=[],u=wr(t.events,r);a&&(a.end=Object.assign({},u),i.push(["exit",a,t])),n.end=Object.assign({},u),i.push(["exit",n,t]),e.add(r+1,0,i)}function wr(e,t){const r=e[t],n=r[0]==="enter"?"start":"end";return r[1][n]}const r4={name:"tasklistCheck",tokenize:a4};function n4(){return{text:{91:r4}}}function a4(e,t,r){const n=this;return a;function a(l){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?r(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),i)}function i(l){return ve(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),u):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),u):r(l)}function u(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):r(l)}function s(l){return ae(l)?t(l):ge(l)?e.check({tokenize:i4},t,r)(l):r(l)}}function i4(e,t,r){return fe(e,n,"whitespace");function n(a){return a===null?r(a):t(a)}}function u4(e){return rl([D2(),U2(),$2(e),Z2(),n4()])}const s4={};function l4(e){const t=this,r=e||s4,n=t.data(),a=n.micromarkExtensions||(n.micromarkExtensions=[]),i=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),u=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);a.push(u4(r)),i.push(C2()),u.push(_2(r))}function o4(){return{enter:{mathFlow:e,mathFlowFenceMeta:t,mathText:i},exit:{mathFlow:a,mathFlowFence:n,mathFlowFenceMeta:r,mathFlowValue:s,mathText:u,mathTextData:s}};function e(l){const c={type:"element",tagName:"code",properties:{className:["language-math","math-display"]},children:[]};this.enter({type:"math",meta:null,value:"",data:{hName:"pre",hChildren:[c]}},l)}function t(){this.buffer()}function r(){const l=this.resume(),c=this.stack[this.stack.length-1];c.type,c.meta=l}function n(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function a(l){const c=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c;const f=d.data.hChildren[0];f.type,f.tagName,f.children.push({type:"text",value:c}),this.data.mathFlowInside=void 0}function i(l){this.enter({type:"inlineMath",value:"",data:{hName:"code",hProperties:{className:["language-math","math-inline"]},hChildren:[]}},l),this.buffer()}function u(l){const c=this.resume(),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c,d.data.hChildren.push({type:"text",value:c})}function s(l){this.config.enter.data.call(this,l),this.config.exit.data.call(this,l)}}function c4(e){let t=(e||{}).singleDollarTextMath;return t==null&&(t=!0),n.peek=a,{unsafe:[{character:"\r",inConstruct:"mathFlowMeta"},{character:` -`,inConstruct:"mathFlowMeta"},{character:"$",after:t?void 0:"\\$",inConstruct:"phrasing"},{character:"$",inConstruct:"mathFlowMeta"},{atBreak:!0,character:"$",after:"\\$"}],handlers:{math:r,inlineMath:n}};function r(i,u,s,l){const c=i.value||"",d=s.createTracker(l),f="$".repeat(Math.max(Il(c,"$")+1,2)),g=s.enter("mathFlow");let p=d.move(f);if(i.meta){const x=s.enter("mathFlowMeta");p+=d.move(s.safe(i.meta,{after:` -`,before:p,encode:["$"],...d.current()})),x()}return p+=d.move(` -`),c&&(p+=d.move(c+` -`)),p+=d.move(f),g(),p}function n(i,u,s){let l=i.value||"",c=1;for(t||c++;new RegExp("(^|[^$])"+"\\$".repeat(c)+"([^$]|$)").test(l);)c++;const d="$".repeat(c);/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^\$|\$$/.test(l))&&(l=" "+l+" ");let f=-1;for(;++f15?c="…"+s.slice(a-15,a):c=s.slice(0,a);var d;i+15e.replace(E4,"-$1").toLowerCase(),x4={"&":"&",">":">","<":"<",'"':""","'":"'"},y4=/[&><"']/g,Ve=e=>String(e).replace(y4,t=>x4[t]),$n=e=>e.type==="ordgroup"||e.type==="color"?e.body.length===1?$n(e.body[0]):e:e.type==="font"?$n(e.body):e,v4=new Set(["mathord","textord","atom"]),qt=e=>v4.has($n(e).type),A4=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},_a={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function k4(e){if(typeof e!="string")return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}function S4(e){if(e.default!==void 0)return e.default;var t=Array.isArray(e.type)?e.type[0]:e.type;return k4(t)}function w4(e,t,r,n){var a=r[t];e[t]=a!==void 0?n.processor?n.processor(a):a:S4(n)}class pi{constructor(t){t===void 0&&(t={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,t=t||{};for(var r of Object.keys(_a)){var n=_a[r];n&&w4(this,r,t,n)}}reportNonstrict(t,r,n){var a=this.strict;if(typeof a=="function"&&(a=a(t,r,n)),!(!a||a==="ignore")){if(a===!0||a==="error")throw new Y("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+t+"]"),n);a==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]"))}}useStrictBehavior(t,r,n){var a=this.strict;if(typeof a=="function")try{a=a(t,r,n)}catch{a="error"}return!a||a==="ignore"?!1:a===!0||a==="error"?!0:a==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]")),!1)}isTrusted(t){if("url"in t&&t.url&&!t.protocol){var r=A4(t.url);if(r==null)return!1;t.protocol=r}var n=typeof this.trust=="function"?this.trust(t):this.trust;return!!n}}class jt{constructor(t,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=n}sup(){return kt[C4[this.id]]}sub(){return kt[_4[this.id]]}fracNum(){return kt[I4[this.id]]}fracDen(){return kt[N4[this.id]]}cramp(){return kt[D4[this.id]]}text(){return kt[O4[this.id]]}isTight(){return this.size>=2}}var gi=0,r0=1,_r=2,Ht=3,gn=4,gt=5,Dr=6,Je=7,kt=[new jt(gi,0,!1),new jt(r0,0,!0),new jt(_r,1,!1),new jt(Ht,1,!0),new jt(gn,2,!1),new jt(gt,2,!0),new jt(Dr,3,!1),new jt(Je,3,!0)],C4=[gn,gt,gn,gt,Dr,Je,Dr,Je],_4=[gt,gt,gt,gt,Je,Je,Je,Je],I4=[_r,Ht,gn,gt,Dr,Je,Dr,Je],N4=[Ht,Ht,gt,gt,Je,Je,Je,Je],D4=[r0,r0,Ht,Ht,gt,gt,Je,Je],O4=[gi,r0,_r,Ht,_r,Ht,_r,Ht],oe={DISPLAY:kt[gi],TEXT:kt[_r],SCRIPT:kt[gn],SCRIPTSCRIPT:kt[Dr]},Ia=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function L4(e){for(var t=0;t=a[0]&&e<=a[1])return r.name}return null}var Qn=[];Ia.forEach(e=>e.blocks.forEach(t=>Qn.push(...t)));function $l(e){for(var t=0;t=Qn[t]&&e<=Qn[t+1])return!0;return!1}var Fe=e=>e+" "+e,kr=80,R4=function(t,r){return"M95,"+(622+t+r)+` -c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 -c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 -c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 -s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 -c69,-144,104.5,-217.7,106.5,-221 -l`+t/2.075+" -"+t+` -c5.3,-9.3,12,-14,20,-14 -H400000v`+(40+t)+`H845.2724 -s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 -c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},M4=function(t,r){return"M263,"+(601+t+r)+`c0.7,0,18,39.7,52,119 -c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 -c340,-704.7,510.7,-1060.3,512,-1067 -l`+t/2.084+" -"+t+` -c4.7,-7.3,11,-11,19,-11 -H40000v`+(40+t)+`H1012.3 -s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 -c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 -s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 -c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},P4=function(t,r){return"M983 "+(10+t+r)+` -l`+t/3.13+" -"+t+` -c4,-6.7,10,-10,18,-10 H400000v`+(40+t)+` -H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 -s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 -c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 -c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 -c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 -c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},B4=function(t,r){return"M424,"+(2398+t+r)+` -c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 -c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 -s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 -s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 -l`+t/4.223+" -"+t+`c4,-6.7,10,-10,18,-10 H400000 -v`+(40+t)+`H1014.6 -s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 -c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2z M`+(1001+t)+" "+r+` -h400000v`+(40+t)+"h-400000z"},F4=function(t,r){return"M473,"+(2713+t+r)+` -c339.3,-1799.3,509.3,-2700,510,-2702 l`+t/5.298+" -"+t+` -c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+t)+`H1017.7 -s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 -c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 -s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+t)+" "+r+"h400000v"+(40+t)+"H1017.7z"},H4=function(t){var r=t/2;return"M400000 "+t+" H0 L"+r+" 0 l65 45 L145 "+(t-80)+" H400000z"},z4=function(t,r,n){var a=n-54-r-t;return"M702 "+(t+r)+"H400000"+(40+t)+` -H742v`+a+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 -h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 -c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+r+"H400000v"+(40+t)+"H742z"},U4=function(t,r,n){r=1e3*r;var a="";switch(t){case"sqrtMain":a=R4(r,kr);break;case"sqrtSize1":a=M4(r,kr);break;case"sqrtSize2":a=P4(r,kr);break;case"sqrtSize3":a=B4(r,kr);break;case"sqrtSize4":a=F4(r,kr);break;case"sqrtTall":a=z4(r,kr,n)}return a},q4=function(t,r){switch(t){case"⎜":return Fe("M291 0 H417 V"+r+" H291z");case"∣":return Fe("M145 0 H188 V"+r+" H145z");case"∥":return Fe("M145 0 H188 V"+r+" H145z")+Fe("M367 0 H410 V"+r+" H367z");case"⎟":return Fe("M457 0 H583 V"+r+" H457z");case"⎢":return Fe("M319 0 H403 V"+r+" H319z");case"⎥":return Fe("M263 0 H347 V"+r+" H263z");case"⎪":return Fe("M384 0 H504 V"+r+" H384z");case"⏐":return Fe("M312 0 H355 V"+r+" H312z");case"‖":return Fe("M257 0 H300 V"+r+" H257z")+Fe("M478 0 H521 V"+r+" H478z");default:return""}},Ou={doubleleftarrow:`M262 157 -l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 - 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 - 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 -c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 - 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 --86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 --2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z -m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l --10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 - 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 --33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 --17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 --13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 -c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 --107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 - 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 --5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 -c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 - 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 - 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 - l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 --45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 - 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 - 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 - 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 --331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 -H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 - 435 0h399565z`,leftgroupunder:`M400000 262 -H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 - 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 --3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 --18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 --196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 - 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 --4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 --10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z -m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 - 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 - 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 --152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 - 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 --2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 -v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 --83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 --68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 - 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:Fe("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),leftbracketunder:Fe("M0 0 h120 V290 H399995 v120 H0z"),leftbracketover:Fe("M0 440 h120 V150 H399995 v-120 H0z"),leftmapsto:Fe("M40 281 V448H0V74H40V241H400000v40z"),leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 --.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 -c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 - 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:Fe("M0 50 h400000 v40H0z m0 194h40000v40H0z"),midbrace:`M200428 334 -c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 --53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 - 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 - 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 -c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 - 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 - 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 --5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 --320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z -m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 -60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 --451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z -m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 -c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 --480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z -m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 -85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 --707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z -m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 -c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 --16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 - 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 - 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 --40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 - 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l --6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 -s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 -c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 - 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 --174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 - 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 - 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 --3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 --10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 - 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 --18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 - 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z -m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 - 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 --7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 --27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 - 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 - 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 --64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z -m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 - 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 --13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 - 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:Fe("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),rightbracketunder:Fe("M399995 0 h-120 V290 H0 v120 H400000z"),rightbracketover:Fe("M399995 440 h-120 V150 H0 v-120 H399995z"),rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 - 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 --52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 --167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 - 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 --70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 --40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 --37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 - 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 -c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 - 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 - 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 --19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 - 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 --2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 - 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 - 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 --68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 --8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 - 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 -c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 - 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 --11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 - 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 - 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 - -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 --11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 - 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 - 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 - -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 -3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 -10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 --1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 --7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 -H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 -c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 -c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, --5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 -c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 -c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 -s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 -121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 -s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 -c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z -M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 --27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 -13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 --84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 --119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 -151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 -c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 -c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 -c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z -M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, -1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, --152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z -M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Y4=function(t,r){switch(t){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 v84 h347 v-84 -H403z M403 1759 V0 H319 V1759 v`+r+" v1759 v84 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z -M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z -M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z -M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z -M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 -c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, --36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, -949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 -c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, --544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 -l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, --210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, -63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 -c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` -c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 -c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 -c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 -c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 -l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};function G4(e){return"toText"in e}class Br{constructor(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(t){return this.classes.includes(t)}toNode(){for(var t=document.createDocumentFragment(),r=0;r{if(G4(t))return t.toText();throw new Error("Expected MathDomNode with toText, got "+t.constructor.name)}).join("")}}var Na={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},V4={ex:!0,em:!0,mu:!0},Ql=function(t){return typeof t!="string"&&(t=t.unit),t in Na||t in V4||t==="ex"},Ie=function(t,r){var n;if(t.unit in Na)n=Na[t.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(t.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var a;if(r.style.isTight()?a=r.havingStyle(r.style.text()):a=r,t.unit==="ex")n=a.fontMetrics().xHeight;else if(t.unit==="em")n=a.fontMetrics().quad;else throw new Y("Invalid unit: '"+t.unit+"'");a!==r&&(n*=a.sizeMultiplier/r.sizeMultiplier)}return Math.min(t.number*n,r.maxSize)},V=function(t){return+t.toFixed(4)+"em"},Jt=function(t){return t.filter(r=>r).join(" ")},bi=function(t){var r="";for(var n of Object.keys(t)){var a=t[n];a!==void 0&&(r+=T4(n)+":"+a+";")}return r},Kl=function(t,r,n){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var a=r.getColor();a&&(this.style.color=a)}},Jl=function(t){var r=document.createElement(t);r.className=Jt(this.classes),Object.assign(r.style,this.style);for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,Zl=function(t){var r="<"+t;this.classes.length&&(r+=' class="'+Ve(Jt(this.classes))+'"');var n=bi(this.style);n&&(r+=' style="'+Ve(n)+'"');for(var a of Object.keys(this.attributes)){if(j4.test(a))throw new Y("Invalid attribute name '"+a+"'");r+=" "+a+'="'+Ve(this.attributes[a])+'"'}r+=">";for(var i=0;i",r};class Fr{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,this.italic=void 0,Kl.call(this,t,n,a),this.children=r||[]}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"span")}toMarkup(){return Zl.call(this,"span")}}class E0{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Kl.call(this,r,a),this.children=n||[],this.setAttribute("href",t)}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"a")}toMarkup(){return Zl.call(this,"a")}}class W4{constructor(t,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=t,this.classes=["mord"],this.height=0,this.depth=0,this.maxFontSize=0,this.style=n}hasClass(t){return this.classes.includes(t)}toNode(){var t=document.createElement("img");return t.src=this.src,t.alt=this.alt,t.className="mord",Object.assign(t.style,this.style),t}toMarkup(){var t=''+Ve(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=V(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=Jt(this.classes)),Object.keys(this.style).length>0&&(r=r||document.createElement("span"),Object.assign(r.style,this.style)),r?(r.appendChild(t),r):t}toMarkup(){var t=!1,r="0&&(n+="margin-right:"+V(this.italic)+";"),n+=bi(this.style),n&&(t=!0,r+=' style="'+Ve(n)+'"');var a=Ve(this.text);return t?(r+=">",r+=a,r+="",r):a}}class zt{constructor(t,r){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=r||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"svg");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a':''}}class Da{constructor(t){this.attributes=void 0,this.attributes=t||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"line");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var t=" but got "+String(e)+".")}var K4=e=>e instanceof Fr||e instanceof E0||e instanceof Br,wt={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Hn={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Lu={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function J4(e,t){wt[e]=t}function Ei(e,t,r){if(!wt[t])throw new Error("Font metrics not found for font: "+t+".");var n=e.charCodeAt(0),a=wt[t][n];if(!a&&e[0]in Lu&&(n=Lu[e[0]].charCodeAt(0),a=wt[t][n]),!a&&r==="text"&&$l(n)&&(a=wt[t][77]),a)return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}var ea={};function Z4(e){var t;if(e>=5?t=0:e>=3?t=1:t=2,!ea[t]){var r=ea[t]={cssEmPerMu:Hn.quad[t]/18};for(var n in Hn)Hn.hasOwnProperty(n)&&(r[n]=Hn[n][t])}return ea[t]}var we={math:{},text:{}};function h(e,t,r,n,a,i){we[e][a]={font:t,group:r,replace:n},i&&n&&(we[e][n]=we[e][a])}var m="math",F="text",b="main",v="ams",Ce="accent-token",te="bin",Ze="close",Hr="inner",ie="mathord",Pe="op-token",ht="open",kn="punct",A="rel",Yt="spacing",I="textord";h(m,b,A,"≡","\\equiv",!0);h(m,b,A,"≺","\\prec",!0);h(m,b,A,"≻","\\succ",!0);h(m,b,A,"∼","\\sim",!0);h(m,b,A,"⊥","\\perp");h(m,b,A,"⪯","\\preceq",!0);h(m,b,A,"⪰","\\succeq",!0);h(m,b,A,"≃","\\simeq",!0);h(m,b,A,"∣","\\mid",!0);h(m,b,A,"≪","\\ll",!0);h(m,b,A,"≫","\\gg",!0);h(m,b,A,"≍","\\asymp",!0);h(m,b,A,"∥","\\parallel");h(m,b,A,"⋈","\\bowtie",!0);h(m,b,A,"⌣","\\smile",!0);h(m,b,A,"⊑","\\sqsubseteq",!0);h(m,b,A,"⊒","\\sqsupseteq",!0);h(m,b,A,"≐","\\doteq",!0);h(m,b,A,"⌢","\\frown",!0);h(m,b,A,"∋","\\ni",!0);h(m,b,A,"∝","\\propto",!0);h(m,b,A,"⊢","\\vdash",!0);h(m,b,A,"⊣","\\dashv",!0);h(m,b,A,"∋","\\owns");h(m,b,kn,".","\\ldotp");h(m,b,kn,"⋅","\\cdotp");h(m,b,kn,"⋅","·");h(F,b,I,"⋅","·");h(m,b,I,"#","\\#");h(F,b,I,"#","\\#");h(m,b,I,"&","\\&");h(F,b,I,"&","\\&");h(m,b,I,"ℵ","\\aleph",!0);h(m,b,I,"∀","\\forall",!0);h(m,b,I,"ℏ","\\hbar",!0);h(m,b,I,"∃","\\exists",!0);h(m,b,I,"∇","\\nabla",!0);h(m,b,I,"♭","\\flat",!0);h(m,b,I,"ℓ","\\ell",!0);h(m,b,I,"♮","\\natural",!0);h(m,b,I,"♣","\\clubsuit",!0);h(m,b,I,"℘","\\wp",!0);h(m,b,I,"♯","\\sharp",!0);h(m,b,I,"♢","\\diamondsuit",!0);h(m,b,I,"ℜ","\\Re",!0);h(m,b,I,"♡","\\heartsuit",!0);h(m,b,I,"ℑ","\\Im",!0);h(m,b,I,"♠","\\spadesuit",!0);h(m,b,I,"§","\\S",!0);h(F,b,I,"§","\\S");h(m,b,I,"¶","\\P",!0);h(F,b,I,"¶","\\P");h(m,b,I,"†","\\dag");h(F,b,I,"†","\\dag");h(F,b,I,"†","\\textdagger");h(m,b,I,"‡","\\ddag");h(F,b,I,"‡","\\ddag");h(F,b,I,"‡","\\textdaggerdbl");h(m,b,Ze,"⎱","\\rmoustache",!0);h(m,b,ht,"⎰","\\lmoustache",!0);h(m,b,Ze,"⟯","\\rgroup",!0);h(m,b,ht,"⟮","\\lgroup",!0);h(m,b,te,"∓","\\mp",!0);h(m,b,te,"⊖","\\ominus",!0);h(m,b,te,"⊎","\\uplus",!0);h(m,b,te,"⊓","\\sqcap",!0);h(m,b,te,"∗","\\ast");h(m,b,te,"⊔","\\sqcup",!0);h(m,b,te,"◯","\\bigcirc",!0);h(m,b,te,"∙","\\bullet",!0);h(m,b,te,"‡","\\ddagger");h(m,b,te,"≀","\\wr",!0);h(m,b,te,"⨿","\\amalg");h(m,b,te,"&","\\And");h(m,b,A,"⟵","\\longleftarrow",!0);h(m,b,A,"⇐","\\Leftarrow",!0);h(m,b,A,"⟸","\\Longleftarrow",!0);h(m,b,A,"⟶","\\longrightarrow",!0);h(m,b,A,"⇒","\\Rightarrow",!0);h(m,b,A,"⟹","\\Longrightarrow",!0);h(m,b,A,"↔","\\leftrightarrow",!0);h(m,b,A,"⟷","\\longleftrightarrow",!0);h(m,b,A,"⇔","\\Leftrightarrow",!0);h(m,b,A,"⟺","\\Longleftrightarrow",!0);h(m,b,A,"↦","\\mapsto",!0);h(m,b,A,"⟼","\\longmapsto",!0);h(m,b,A,"↗","\\nearrow",!0);h(m,b,A,"↩","\\hookleftarrow",!0);h(m,b,A,"↪","\\hookrightarrow",!0);h(m,b,A,"↘","\\searrow",!0);h(m,b,A,"↼","\\leftharpoonup",!0);h(m,b,A,"⇀","\\rightharpoonup",!0);h(m,b,A,"↙","\\swarrow",!0);h(m,b,A,"↽","\\leftharpoondown",!0);h(m,b,A,"⇁","\\rightharpoondown",!0);h(m,b,A,"↖","\\nwarrow",!0);h(m,b,A,"⇌","\\rightleftharpoons",!0);h(m,v,A,"≮","\\nless",!0);h(m,v,A,"","\\@nleqslant");h(m,v,A,"","\\@nleqq");h(m,v,A,"⪇","\\lneq",!0);h(m,v,A,"≨","\\lneqq",!0);h(m,v,A,"","\\@lvertneqq");h(m,v,A,"⋦","\\lnsim",!0);h(m,v,A,"⪉","\\lnapprox",!0);h(m,v,A,"⊀","\\nprec",!0);h(m,v,A,"⋠","\\npreceq",!0);h(m,v,A,"⋨","\\precnsim",!0);h(m,v,A,"⪹","\\precnapprox",!0);h(m,v,A,"≁","\\nsim",!0);h(m,v,A,"","\\@nshortmid");h(m,v,A,"∤","\\nmid",!0);h(m,v,A,"⊬","\\nvdash",!0);h(m,v,A,"⊭","\\nvDash",!0);h(m,v,A,"⋪","\\ntriangleleft");h(m,v,A,"⋬","\\ntrianglelefteq",!0);h(m,v,A,"⊊","\\subsetneq",!0);h(m,v,A,"","\\@varsubsetneq");h(m,v,A,"⫋","\\subsetneqq",!0);h(m,v,A,"","\\@varsubsetneqq");h(m,v,A,"≯","\\ngtr",!0);h(m,v,A,"","\\@ngeqslant");h(m,v,A,"","\\@ngeqq");h(m,v,A,"⪈","\\gneq",!0);h(m,v,A,"≩","\\gneqq",!0);h(m,v,A,"","\\@gvertneqq");h(m,v,A,"⋧","\\gnsim",!0);h(m,v,A,"⪊","\\gnapprox",!0);h(m,v,A,"⊁","\\nsucc",!0);h(m,v,A,"⋡","\\nsucceq",!0);h(m,v,A,"⋩","\\succnsim",!0);h(m,v,A,"⪺","\\succnapprox",!0);h(m,v,A,"≆","\\ncong",!0);h(m,v,A,"","\\@nshortparallel");h(m,v,A,"∦","\\nparallel",!0);h(m,v,A,"⊯","\\nVDash",!0);h(m,v,A,"⋫","\\ntriangleright");h(m,v,A,"⋭","\\ntrianglerighteq",!0);h(m,v,A,"","\\@nsupseteqq");h(m,v,A,"⊋","\\supsetneq",!0);h(m,v,A,"","\\@varsupsetneq");h(m,v,A,"⫌","\\supsetneqq",!0);h(m,v,A,"","\\@varsupsetneqq");h(m,v,A,"⊮","\\nVdash",!0);h(m,v,A,"⪵","\\precneqq",!0);h(m,v,A,"⪶","\\succneqq",!0);h(m,v,A,"","\\@nsubseteqq");h(m,v,te,"⊴","\\unlhd");h(m,v,te,"⊵","\\unrhd");h(m,v,A,"↚","\\nleftarrow",!0);h(m,v,A,"↛","\\nrightarrow",!0);h(m,v,A,"⇍","\\nLeftarrow",!0);h(m,v,A,"⇏","\\nRightarrow",!0);h(m,v,A,"↮","\\nleftrightarrow",!0);h(m,v,A,"⇎","\\nLeftrightarrow",!0);h(m,v,A,"△","\\vartriangle");h(m,v,I,"ℏ","\\hslash");h(m,v,I,"▽","\\triangledown");h(m,v,I,"◊","\\lozenge");h(m,v,I,"Ⓢ","\\circledS");h(m,v,I,"®","\\circledR");h(F,v,I,"®","\\circledR");h(m,v,I,"∡","\\measuredangle",!0);h(m,v,I,"∄","\\nexists");h(m,v,I,"℧","\\mho");h(m,v,I,"Ⅎ","\\Finv",!0);h(m,v,I,"⅁","\\Game",!0);h(m,v,I,"‵","\\backprime");h(m,v,I,"▲","\\blacktriangle");h(m,v,I,"▼","\\blacktriangledown");h(m,v,I,"■","\\blacksquare");h(m,v,I,"⧫","\\blacklozenge");h(m,v,I,"★","\\bigstar");h(m,v,I,"∢","\\sphericalangle",!0);h(m,v,I,"∁","\\complement",!0);h(m,v,I,"ð","\\eth",!0);h(F,b,I,"ð","ð");h(m,v,I,"╱","\\diagup");h(m,v,I,"╲","\\diagdown");h(m,v,I,"□","\\square");h(m,v,I,"□","\\Box");h(m,v,I,"◊","\\Diamond");h(m,v,I,"¥","\\yen",!0);h(F,v,I,"¥","\\yen",!0);h(m,v,I,"✓","\\checkmark",!0);h(F,v,I,"✓","\\checkmark");h(m,v,I,"ℶ","\\beth",!0);h(m,v,I,"ℸ","\\daleth",!0);h(m,v,I,"ℷ","\\gimel",!0);h(m,v,I,"ϝ","\\digamma",!0);h(m,v,I,"ϰ","\\varkappa");h(m,v,ht,"┌","\\@ulcorner",!0);h(m,v,Ze,"┐","\\@urcorner",!0);h(m,v,ht,"└","\\@llcorner",!0);h(m,v,Ze,"┘","\\@lrcorner",!0);h(m,v,A,"≦","\\leqq",!0);h(m,v,A,"⩽","\\leqslant",!0);h(m,v,A,"⪕","\\eqslantless",!0);h(m,v,A,"≲","\\lesssim",!0);h(m,v,A,"⪅","\\lessapprox",!0);h(m,v,A,"≊","\\approxeq",!0);h(m,v,te,"⋖","\\lessdot");h(m,v,A,"⋘","\\lll",!0);h(m,v,A,"≶","\\lessgtr",!0);h(m,v,A,"⋚","\\lesseqgtr",!0);h(m,v,A,"⪋","\\lesseqqgtr",!0);h(m,v,A,"≑","\\doteqdot");h(m,v,A,"≓","\\risingdotseq",!0);h(m,v,A,"≒","\\fallingdotseq",!0);h(m,v,A,"∽","\\backsim",!0);h(m,v,A,"⋍","\\backsimeq",!0);h(m,v,A,"⫅","\\subseteqq",!0);h(m,v,A,"⋐","\\Subset",!0);h(m,v,A,"⊏","\\sqsubset",!0);h(m,v,A,"≼","\\preccurlyeq",!0);h(m,v,A,"⋞","\\curlyeqprec",!0);h(m,v,A,"≾","\\precsim",!0);h(m,v,A,"⪷","\\precapprox",!0);h(m,v,A,"⊲","\\vartriangleleft");h(m,v,A,"⊴","\\trianglelefteq");h(m,v,A,"⊨","\\vDash",!0);h(m,v,A,"⊪","\\Vvdash",!0);h(m,v,A,"⌣","\\smallsmile");h(m,v,A,"⌢","\\smallfrown");h(m,v,A,"≏","\\bumpeq",!0);h(m,v,A,"≎","\\Bumpeq",!0);h(m,v,A,"≧","\\geqq",!0);h(m,v,A,"⩾","\\geqslant",!0);h(m,v,A,"⪖","\\eqslantgtr",!0);h(m,v,A,"≳","\\gtrsim",!0);h(m,v,A,"⪆","\\gtrapprox",!0);h(m,v,te,"⋗","\\gtrdot");h(m,v,A,"⋙","\\ggg",!0);h(m,v,A,"≷","\\gtrless",!0);h(m,v,A,"⋛","\\gtreqless",!0);h(m,v,A,"⪌","\\gtreqqless",!0);h(m,v,A,"≖","\\eqcirc",!0);h(m,v,A,"≗","\\circeq",!0);h(m,v,A,"≜","\\triangleq",!0);h(m,v,A,"∼","\\thicksim");h(m,v,A,"≈","\\thickapprox");h(m,v,A,"⫆","\\supseteqq",!0);h(m,v,A,"⋑","\\Supset",!0);h(m,v,A,"⊐","\\sqsupset",!0);h(m,v,A,"≽","\\succcurlyeq",!0);h(m,v,A,"⋟","\\curlyeqsucc",!0);h(m,v,A,"≿","\\succsim",!0);h(m,v,A,"⪸","\\succapprox",!0);h(m,v,A,"⊳","\\vartriangleright");h(m,v,A,"⊵","\\trianglerighteq");h(m,v,A,"⊩","\\Vdash",!0);h(m,v,A,"∣","\\shortmid");h(m,v,A,"∥","\\shortparallel");h(m,v,A,"≬","\\between",!0);h(m,v,A,"⋔","\\pitchfork",!0);h(m,v,A,"∝","\\varpropto");h(m,v,A,"◀","\\blacktriangleleft");h(m,v,A,"∴","\\therefore",!0);h(m,v,A,"∍","\\backepsilon");h(m,v,A,"▶","\\blacktriangleright");h(m,v,A,"∵","\\because",!0);h(m,v,A,"⋘","\\llless");h(m,v,A,"⋙","\\gggtr");h(m,v,te,"⊲","\\lhd");h(m,v,te,"⊳","\\rhd");h(m,v,A,"≂","\\eqsim",!0);h(m,b,A,"⋈","\\Join");h(m,v,A,"≑","\\Doteq",!0);h(m,v,te,"∔","\\dotplus",!0);h(m,v,te,"∖","\\smallsetminus");h(m,v,te,"⋒","\\Cap",!0);h(m,v,te,"⋓","\\Cup",!0);h(m,v,te,"⩞","\\doublebarwedge",!0);h(m,v,te,"⊟","\\boxminus",!0);h(m,v,te,"⊞","\\boxplus",!0);h(m,v,te,"⋇","\\divideontimes",!0);h(m,v,te,"⋉","\\ltimes",!0);h(m,v,te,"⋊","\\rtimes",!0);h(m,v,te,"⋋","\\leftthreetimes",!0);h(m,v,te,"⋌","\\rightthreetimes",!0);h(m,v,te,"⋏","\\curlywedge",!0);h(m,v,te,"⋎","\\curlyvee",!0);h(m,v,te,"⊝","\\circleddash",!0);h(m,v,te,"⊛","\\circledast",!0);h(m,v,te,"⋅","\\centerdot");h(m,v,te,"⊺","\\intercal",!0);h(m,v,te,"⋒","\\doublecap");h(m,v,te,"⋓","\\doublecup");h(m,v,te,"⊠","\\boxtimes",!0);h(m,v,A,"⇢","\\dashrightarrow",!0);h(m,v,A,"⇠","\\dashleftarrow",!0);h(m,v,A,"⇇","\\leftleftarrows",!0);h(m,v,A,"⇆","\\leftrightarrows",!0);h(m,v,A,"⇚","\\Lleftarrow",!0);h(m,v,A,"↞","\\twoheadleftarrow",!0);h(m,v,A,"↢","\\leftarrowtail",!0);h(m,v,A,"↫","\\looparrowleft",!0);h(m,v,A,"⇋","\\leftrightharpoons",!0);h(m,v,A,"↶","\\curvearrowleft",!0);h(m,v,A,"↺","\\circlearrowleft",!0);h(m,v,A,"↰","\\Lsh",!0);h(m,v,A,"⇈","\\upuparrows",!0);h(m,v,A,"↿","\\upharpoonleft",!0);h(m,v,A,"⇃","\\downharpoonleft",!0);h(m,b,A,"⊶","\\origof",!0);h(m,b,A,"⊷","\\imageof",!0);h(m,v,A,"⊸","\\multimap",!0);h(m,v,A,"↭","\\leftrightsquigarrow",!0);h(m,v,A,"⇉","\\rightrightarrows",!0);h(m,v,A,"⇄","\\rightleftarrows",!0);h(m,v,A,"↠","\\twoheadrightarrow",!0);h(m,v,A,"↣","\\rightarrowtail",!0);h(m,v,A,"↬","\\looparrowright",!0);h(m,v,A,"↷","\\curvearrowright",!0);h(m,v,A,"↻","\\circlearrowright",!0);h(m,v,A,"↱","\\Rsh",!0);h(m,v,A,"⇊","\\downdownarrows",!0);h(m,v,A,"↾","\\upharpoonright",!0);h(m,v,A,"⇂","\\downharpoonright",!0);h(m,v,A,"⇝","\\rightsquigarrow",!0);h(m,v,A,"⇝","\\leadsto");h(m,v,A,"⇛","\\Rrightarrow",!0);h(m,v,A,"↾","\\restriction");h(m,b,I,"‘","`");h(m,b,I,"$","\\$");h(F,b,I,"$","\\$");h(F,b,I,"$","\\textdollar");h(m,b,I,"%","\\%");h(F,b,I,"%","\\%");h(m,b,I,"_","\\_");h(F,b,I,"_","\\_");h(F,b,I,"_","\\textunderscore");h(m,b,I,"∠","\\angle",!0);h(m,b,I,"∞","\\infty",!0);h(m,b,I,"′","\\prime");h(m,b,I,"△","\\triangle");h(m,b,I,"Γ","\\Gamma",!0);h(m,b,I,"Δ","\\Delta",!0);h(m,b,I,"Θ","\\Theta",!0);h(m,b,I,"Λ","\\Lambda",!0);h(m,b,I,"Ξ","\\Xi",!0);h(m,b,I,"Π","\\Pi",!0);h(m,b,I,"Σ","\\Sigma",!0);h(m,b,I,"Υ","\\Upsilon",!0);h(m,b,I,"Φ","\\Phi",!0);h(m,b,I,"Ψ","\\Psi",!0);h(m,b,I,"Ω","\\Omega",!0);h(m,b,I,"A","Α");h(m,b,I,"B","Β");h(m,b,I,"E","Ε");h(m,b,I,"Z","Ζ");h(m,b,I,"H","Η");h(m,b,I,"I","Ι");h(m,b,I,"K","Κ");h(m,b,I,"M","Μ");h(m,b,I,"N","Ν");h(m,b,I,"O","Ο");h(m,b,I,"P","Ρ");h(m,b,I,"T","Τ");h(m,b,I,"X","Χ");h(m,b,I,"¬","\\neg",!0);h(m,b,I,"¬","\\lnot");h(m,b,I,"⊤","\\top");h(m,b,I,"⊥","\\bot");h(m,b,I,"∅","\\emptyset");h(m,v,I,"∅","\\varnothing");h(m,b,ie,"α","\\alpha",!0);h(m,b,ie,"β","\\beta",!0);h(m,b,ie,"γ","\\gamma",!0);h(m,b,ie,"δ","\\delta",!0);h(m,b,ie,"ϵ","\\epsilon",!0);h(m,b,ie,"ζ","\\zeta",!0);h(m,b,ie,"η","\\eta",!0);h(m,b,ie,"θ","\\theta",!0);h(m,b,ie,"ι","\\iota",!0);h(m,b,ie,"κ","\\kappa",!0);h(m,b,ie,"λ","\\lambda",!0);h(m,b,ie,"μ","\\mu",!0);h(m,b,ie,"ν","\\nu",!0);h(m,b,ie,"ξ","\\xi",!0);h(m,b,ie,"ο","\\omicron",!0);h(m,b,ie,"π","\\pi",!0);h(m,b,ie,"ρ","\\rho",!0);h(m,b,ie,"σ","\\sigma",!0);h(m,b,ie,"τ","\\tau",!0);h(m,b,ie,"υ","\\upsilon",!0);h(m,b,ie,"ϕ","\\phi",!0);h(m,b,ie,"χ","\\chi",!0);h(m,b,ie,"ψ","\\psi",!0);h(m,b,ie,"ω","\\omega",!0);h(m,b,ie,"ε","\\varepsilon",!0);h(m,b,ie,"ϑ","\\vartheta",!0);h(m,b,ie,"ϖ","\\varpi",!0);h(m,b,ie,"ϱ","\\varrho",!0);h(m,b,ie,"ς","\\varsigma",!0);h(m,b,ie,"φ","\\varphi",!0);h(m,b,te,"∗","*",!0);h(m,b,te,"+","+");h(m,b,te,"−","-",!0);h(m,b,te,"⋅","\\cdot",!0);h(m,b,te,"∘","\\circ",!0);h(m,b,te,"÷","\\div",!0);h(m,b,te,"±","\\pm",!0);h(m,b,te,"×","\\times",!0);h(m,b,te,"∩","\\cap",!0);h(m,b,te,"∪","\\cup",!0);h(m,b,te,"∖","\\setminus",!0);h(m,b,te,"∧","\\land");h(m,b,te,"∨","\\lor");h(m,b,te,"∧","\\wedge",!0);h(m,b,te,"∨","\\vee",!0);h(m,b,I,"√","\\surd");h(m,b,ht,"⟨","\\langle",!0);h(m,b,ht,"∣","\\lvert");h(m,b,ht,"∥","\\lVert");h(m,b,Ze,"?","?");h(m,b,Ze,"!","!");h(m,b,Ze,"⟩","\\rangle",!0);h(m,b,Ze,"∣","\\rvert");h(m,b,Ze,"∥","\\rVert");h(m,b,A,"=","=");h(m,b,A,":",":");h(m,b,A,"≈","\\approx",!0);h(m,b,A,"≅","\\cong",!0);h(m,b,A,"≥","\\ge");h(m,b,A,"≥","\\geq",!0);h(m,b,A,"←","\\gets");h(m,b,A,">","\\gt",!0);h(m,b,A,"∈","\\in",!0);h(m,b,A,"","\\@not");h(m,b,A,"⊂","\\subset",!0);h(m,b,A,"⊃","\\supset",!0);h(m,b,A,"⊆","\\subseteq",!0);h(m,b,A,"⊇","\\supseteq",!0);h(m,v,A,"⊈","\\nsubseteq",!0);h(m,v,A,"⊉","\\nsupseteq",!0);h(m,b,A,"⊨","\\models");h(m,b,A,"←","\\leftarrow",!0);h(m,b,A,"≤","\\le");h(m,b,A,"≤","\\leq",!0);h(m,b,A,"<","\\lt",!0);h(m,b,A,"→","\\rightarrow",!0);h(m,b,A,"→","\\to");h(m,v,A,"≱","\\ngeq",!0);h(m,v,A,"≰","\\nleq",!0);h(m,b,Yt," ","\\ ");h(m,b,Yt," ","\\space");h(m,b,Yt," ","\\nobreakspace");h(F,b,Yt," ","\\ ");h(F,b,Yt," "," ");h(F,b,Yt," ","\\space");h(F,b,Yt," ","\\nobreakspace");h(m,b,Yt,"","\\nobreak");h(m,b,Yt,"","\\allowbreak");h(m,b,kn,",",",");h(m,b,kn,";",";");h(m,v,te,"⊼","\\barwedge",!0);h(m,v,te,"⊻","\\veebar",!0);h(m,b,te,"⊙","\\odot",!0);h(m,b,te,"⊕","\\oplus",!0);h(m,b,te,"⊗","\\otimes",!0);h(m,b,I,"∂","\\partial",!0);h(m,b,te,"⊘","\\oslash",!0);h(m,v,te,"⊚","\\circledcirc",!0);h(m,v,te,"⊡","\\boxdot",!0);h(m,b,te,"△","\\bigtriangleup");h(m,b,te,"▽","\\bigtriangledown");h(m,b,te,"†","\\dagger");h(m,b,te,"⋄","\\diamond");h(m,b,te,"⋆","\\star");h(m,b,te,"◃","\\triangleleft");h(m,b,te,"▹","\\triangleright");h(m,b,ht,"{","\\{");h(F,b,I,"{","\\{");h(F,b,I,"{","\\textbraceleft");h(m,b,Ze,"}","\\}");h(F,b,I,"}","\\}");h(F,b,I,"}","\\textbraceright");h(m,b,ht,"{","\\lbrace");h(m,b,Ze,"}","\\rbrace");h(m,b,ht,"[","\\lbrack",!0);h(F,b,I,"[","\\lbrack",!0);h(m,b,Ze,"]","\\rbrack",!0);h(F,b,I,"]","\\rbrack",!0);h(m,b,ht,"(","\\lparen",!0);h(m,b,Ze,")","\\rparen",!0);h(F,b,I,"<","\\textless",!0);h(F,b,I,">","\\textgreater",!0);h(m,b,ht,"⌊","\\lfloor",!0);h(m,b,Ze,"⌋","\\rfloor",!0);h(m,b,ht,"⌈","\\lceil",!0);h(m,b,Ze,"⌉","\\rceil",!0);h(m,b,I,"\\","\\backslash");h(m,b,I,"∣","|");h(m,b,I,"∣","\\vert");h(F,b,I,"|","\\textbar",!0);h(m,b,I,"∥","\\|");h(m,b,I,"∥","\\Vert");h(F,b,I,"∥","\\textbardbl");h(F,b,I,"~","\\textasciitilde");h(F,b,I,"\\","\\textbackslash");h(F,b,I,"^","\\textasciicircum");h(m,b,A,"↑","\\uparrow",!0);h(m,b,A,"⇑","\\Uparrow",!0);h(m,b,A,"↓","\\downarrow",!0);h(m,b,A,"⇓","\\Downarrow",!0);h(m,b,A,"↕","\\updownarrow",!0);h(m,b,A,"⇕","\\Updownarrow",!0);h(m,b,Pe,"∐","\\coprod");h(m,b,Pe,"⋁","\\bigvee");h(m,b,Pe,"⋀","\\bigwedge");h(m,b,Pe,"⨄","\\biguplus");h(m,b,Pe,"⋂","\\bigcap");h(m,b,Pe,"⋃","\\bigcup");h(m,b,Pe,"∫","\\int");h(m,b,Pe,"∫","\\intop");h(m,b,Pe,"∬","\\iint");h(m,b,Pe,"∭","\\iiint");h(m,b,Pe,"∏","\\prod");h(m,b,Pe,"∑","\\sum");h(m,b,Pe,"⨂","\\bigotimes");h(m,b,Pe,"⨁","\\bigoplus");h(m,b,Pe,"⨀","\\bigodot");h(m,b,Pe,"∮","\\oint");h(m,b,Pe,"∯","\\oiint");h(m,b,Pe,"∰","\\oiiint");h(m,b,Pe,"⨆","\\bigsqcup");h(m,b,Pe,"∫","\\smallint");h(F,b,Hr,"…","\\textellipsis");h(m,b,Hr,"…","\\mathellipsis");h(F,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"⋯","\\@cdots",!0);h(m,b,Hr,"⋱","\\ddots",!0);h(m,b,I,"⋮","\\varvdots");h(F,b,I,"⋮","\\varvdots");h(m,b,Ce,"ˊ","\\acute");h(m,b,Ce,"ˋ","\\grave");h(m,b,Ce,"¨","\\ddot");h(m,b,Ce,"~","\\tilde");h(m,b,Ce,"ˉ","\\bar");h(m,b,Ce,"˘","\\breve");h(m,b,Ce,"ˇ","\\check");h(m,b,Ce,"^","\\hat");h(m,b,Ce,"⃗","\\vec");h(m,b,Ce,"˙","\\dot");h(m,b,Ce,"˚","\\mathring");h(m,b,ie,"","\\@imath");h(m,b,ie,"","\\@jmath");h(m,b,I,"ı","ı");h(m,b,I,"ȷ","ȷ");h(F,b,I,"ı","\\i",!0);h(F,b,I,"ȷ","\\j",!0);h(F,b,I,"ß","\\ss",!0);h(F,b,I,"æ","\\ae",!0);h(F,b,I,"œ","\\oe",!0);h(F,b,I,"ø","\\o",!0);h(F,b,I,"Æ","\\AE",!0);h(F,b,I,"Œ","\\OE",!0);h(F,b,I,"Ø","\\O",!0);h(F,b,Ce,"ˊ","\\'");h(F,b,Ce,"ˋ","\\`");h(F,b,Ce,"ˆ","\\^");h(F,b,Ce,"˜","\\~");h(F,b,Ce,"ˉ","\\=");h(F,b,Ce,"˘","\\u");h(F,b,Ce,"˙","\\.");h(F,b,Ce,"¸","\\c");h(F,b,Ce,"˚","\\r");h(F,b,Ce,"ˇ","\\v");h(F,b,Ce,"¨",'\\"');h(F,b,Ce,"˝","\\H");h(F,b,Ce,"◯","\\textcircled");var eo={"--":!0,"---":!0,"``":!0,"''":!0};h(F,b,I,"–","--",!0);h(F,b,I,"–","\\textendash");h(F,b,I,"—","---",!0);h(F,b,I,"—","\\textemdash");h(F,b,I,"‘","`",!0);h(F,b,I,"‘","\\textquoteleft");h(F,b,I,"’","'",!0);h(F,b,I,"’","\\textquoteright");h(F,b,I,"“","``",!0);h(F,b,I,"“","\\textquotedblleft");h(F,b,I,"”","''",!0);h(F,b,I,"”","\\textquotedblright");h(m,b,I,"°","\\degree",!0);h(F,b,I,"°","\\degree");h(F,b,I,"°","\\textdegree",!0);h(m,b,I,"£","\\pounds");h(m,b,I,"£","\\mathsterling",!0);h(F,b,I,"£","\\pounds");h(F,b,I,"£","\\textsterling",!0);h(m,v,I,"✠","\\maltese");h(F,v,I,"✠","\\maltese");var Ru='0123456789/@."';for(var ta=0;ta{var t=e.charCodeAt(0),r=e.charCodeAt(1),n=(t-55296)*1024+(r-56320)+65536;if(119808<=n&&n<120484){var a=Math.floor((n-119808)/26);return Gu[a]}else if(120782<=n&&n<=120831){var i=Math.floor((n-120782)/10);return t3[i]}else{if(n===120485||n===120486)return Gu[0];if(120486{if(Jt(e.classes)!==Jt(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize||e.italic!==0&&e.hasClass("mathnormal"))return!1;if(e.classes.length===1){var r=e.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n of Object.keys(e.style))if(e.style[n]!==t.style[n])return!1;for(var a of Object.keys(t.style))if(e.style[a]!==t.style[a])return!1;return!0},to=e=>{for(var t=0;tr&&(r=u.height),u.depth>n&&(n=u.depth),u.maxFontSize>a&&(a=u.maxFontSize)}t.height=r,t.depth=n,t.maxFontSize=a},z=function(t,r,n,a){var i=new Fr(t,r,n,a);return xi(i),i},er=(e,t,r,n)=>new Fr(e,t,r,n),Or=function(t,r,n){var a=z([t],[],r);return a.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),a.style.borderBottomWidth=V(a.height),a.maxFontSize=1,a},i3=function(t,r,n,a){var i=new E0(t,r,n,a);return xi(i),i},Gt=function(t){var r=new Br(t);return xi(r),r},Lr=function(t,r){return t instanceof Br?z([],[t],r):t},u3=function(t){if(t.positionType==="individualShift"){for(var r=t.children,n=[r[0]],a=-r[0].shift-r[0].elem.depth,i=a,u=1;u{var r=z(["mspace"],[],t),n=Ie(e,t);return r.style.marginRight=V(n),r},qn=(e,t,r)=>{var n,a;switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return t==="textbf"&&r==="textit"?a="BoldItalic":t==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},Ba={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},no={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},ao=function(t,r){var[n,a,i]=no[t],u=new Zt(n),s=new zt([u],{width:V(a),height:V(i),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),l=er(["overlay"],[s],r);return l.height=i,l.style.height=V(i),l.style.width=V(a),l},_e={number:3,unit:"mu"},cr={number:4,unit:"mu"},Pt={number:5,unit:"mu"},s3={mord:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mop:{mord:_e,mop:_e,mrel:Pt,minner:_e},mbin:{mord:cr,mop:cr,mopen:cr,minner:cr},mrel:{mord:Pt,mop:Pt,mopen:Pt,minner:Pt},mopen:{},mclose:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mpunct:{mord:_e,mop:_e,mrel:Pt,mopen:_e,mclose:_e,mpunct:_e,minner:_e},minner:{mord:_e,mop:_e,mbin:cr,mrel:Pt,mopen:_e,mpunct:_e,minner:_e}},l3={mord:{mop:_e},mop:{mord:_e,mop:_e},mbin:{},mrel:{},mopen:{},mclose:{mop:_e},mpunct:{},minner:{mop:_e}},io={},a0={},i0={};function Z(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:a},l=0;l{var D=S.classes[0],_=x.classes[0];D==="mbin"&&c3.has(_)?S.classes[0]="mord":_==="mbin"&&o3.has(D)&&(x.classes[0]="mord")},{node:f},g,p),Fa(i,(x,S)=>{var D,_,N=za(S),M=za(x),W=N&&M?x.hasClass("mtight")?(D=l3[N])==null?void 0:D[M]:(_=s3[N])==null?void 0:_[M]:null;if(W)return ro(W,c)},{node:f},g,p),i},Fa=function(t,r,n,a,i){a&&t.push(a);for(var u=0;ug=>{t.splice(f+1,0,g),u++})(u)}a&&t.pop()},uo=function(t){return t instanceof Br||t instanceof E0||t instanceof Fr&&t.hasClass("enclosing")?t:null},Ha=function(t,r){var n=uo(t);if(n){var a=n.children;if(a.length){if(r==="right")return Ha(a[a.length-1],"right");if(r==="left")return Ha(a[0],"left")}}return t},za=function(t,r){if(!t)return null;r&&(t=Ha(t,r));var n=t.classes[0];return d3[n]||null},bn=function(t,r){var n=["nulldelimiter"].concat(t.baseSizingClasses());return z(r.concat(n))},Te=function(t,r,n){if(!t)return z();if(a0[t.type]){var a=a0[t.type](t,r);if(n&&r.size!==n.size){a=z(r.sizingClasses(n),[a],r);var i=r.sizeMultiplier/n.sizeMultiplier;a.height*=i,a.depth*=i}return a}else throw new Y("Got group of unknown type: '"+t.type+"'")};function Yn(e,t){var r=z(["base"],e,t),n=z(["strut"]);return n.style.height=V(r.height+r.depth),r.depth&&(n.style.verticalAlign=V(-r.depth)),r.children.unshift(n),r}function Ua(e,t){var r=null;e.length===1&&e[0].type==="tag"&&(r=e[0].tag,e=e[0].body);var n=He(e,t,"root"),a;n.length===2&&n[1].hasClass("tag")&&(a=n.pop());for(var i=[],u=[],s=0;s0&&(i.push(Yn(u,t)),u=[]),i.push(n[s]));u.length>0&&i.push(Yn(u,t));var c;r?(c=Yn(He(r,t,!0),t),c.classes=["tag"],i.push(c)):a&&i.push(a);var d=z(["katex-html"],i);if(d.setAttribute("aria-hidden","true"),c){var f=c.children[0];f.style.height=V(d.height+d.depth),d.depth&&(f.style.verticalAlign=V(-d.depth))}return d}function so(e){return new Br(e)}class G{constructor(t,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=t,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(t,r){this.attributes[t]=r}getAttribute(t){return this.attributes[t]}toNode(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);this.classes.length>0&&(t.className=Jt(this.classes));for(var n=0;n0&&(t+=' class ="'+Ve(Jt(this.classes))+'"'),t+=">";for(var n=0;n",t}toText(){return this.children.map(t=>t.toText()).join("")}}class Me{constructor(t){this.text=void 0,this.text=t}toNode(){return document.createTextNode(this.text)}toMarkup(){return Ve(this.toText())}toText(){return this.text}}class lo{constructor(t){this.width=void 0,this.character=void 0,this.width=t,t>=.05555&&t<=.05556?this.character=" ":t>=.1666&&t<=.1667?this.character=" ":t>=.2222&&t<=.2223?this.character=" ":t>=.2777&&t<=.2778?this.character="  ":t>=-.05556&&t<=-.05555?this.character=" ⁣":t>=-.1667&&t<=-.1666?this.character=" ⁣":t>=-.2223&&t<=-.2222?this.character=" ⁣":t>=-.2778&&t<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",V(this.width)),t}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var f3=new Set(["\\imath","\\jmath"]),m3=new Set(["mrow","mtable"]),bt=function(t,r,n){return we[r][t]&&we[r][t].replace&&t.charCodeAt(0)!==55349&&!(eo.hasOwnProperty(t)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(t=we[r][t].replace),new Me(t)},yi=function(t){return t.length===1?t[0]:new G("mrow",t)},p3={mathit:"italic",boldsymbol:e=>e.type==="textord"?"bold":"bold-italic",mathbf:"bold",mathbb:"double-struck",mathsfit:"sans-serif-italic",mathfrak:"fraktur",mathscr:"script",mathcal:"script",mathsf:"sans-serif",mathtt:"monospace"},vi=(e,t)=>{if(e.mode==="text"){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold"}var r=t.font;if(!r||r==="mathnormal")return null;var n=e.mode,a=p3[r];if(a)return typeof a=="function"?a(e):a;var i=e.text;if(f3.has(i))return null;if(we[n][i]){var u=we[n][i].replace;u&&(i=u)}var s=Ba[r].fontName;return Ei(i,s,n)?Ba[r].variant:null};function ia(e){if(!e)return!1;if(e.type==="mi"&&e.children.length===1){var t=e.children[0];return t instanceof Me&&t.text==="."}else if(e.type==="mo"&&e.children.length===1&&e.getAttribute("separator")==="true"&&e.getAttribute("lspace")==="0em"&&e.getAttribute("rspace")==="0em"){var r=e.children[0];return r instanceof Me&&r.text===","}else return!1}var dt=function(t,r,n){if(t.length===1){var a=Ae(t[0],r);return n&&a instanceof G&&a.type==="mo"&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var i=[],u,s=0;s=1&&(u.type==="mn"||ia(u))){var c=l.children[0];c instanceof G&&c.type==="mn"&&(c.children=[...u.children,...c.children],i.pop())}else if(u.type==="mi"&&u.children.length===1){var d=u.children[0];if(d instanceof Me&&d.text==="̸"&&(l.type==="mo"||l.type==="mi"||l.type==="mn")){var f=l.children[0];f instanceof Me&&f.text.length>0&&(f.text=f.text.slice(0,1)+"̸"+f.text.slice(1),i.pop())}}}i.push(l),u=l}return i},tr=function(t,r,n){return yi(dt(t,r,n))},Ae=function(t,r){if(!t)return new G("mrow");if(i0[t.type])return i0[t.type](t,r);throw new Y("Got group of unknown type: '"+t.type+"'")};function Vu(e,t,r,n,a){var i=dt(e,r),u;i.length===1&&i[0]instanceof G&&m3.has(i[0].type)?u=i[0]:u=new G("mrow",i);var s=new G("annotation",[new Me(t)]);s.setAttribute("encoding","application/x-tex");var l=new G("semantics",[u,s]),c=new G("math",[l]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var d=a?"katex":"katex-mathml";return z([d],[c])}var g3=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],ju=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Wu=function(t,r){return r.size<2?t:g3[t-1][r.size-1]};class Bt{constructor(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||Bt.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=ju[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}extend(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};return Object.assign(r,t),new Bt(r)}havingStyle(t){return this.style===t?this:this.extend({style:t,size:Wu(this.textSize,t)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:ju[t-1]})}havingBaseStyle(t){t=t||this.style.text();var r=Wu(Bt.BASESIZE,t);return this.size===r&&this.textSize===Bt.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}havingBaseSizing(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})}withColor(t){return this.extend({color:t})}withPhantom(){return this.extend({phantom:!0})}withFont(t){return this.extend({font:t})}withTextFontFamily(t){return this.extend({fontFamily:t,font:""})}withTextFontWeight(t){return this.extend({fontWeight:t,font:""})}withTextFontShape(t){return this.extend({fontShape:t,font:""})}sizingClasses(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==Bt.BASESIZE?["sizing","reset-size"+this.size,"size"+Bt.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Z4(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}Bt.BASESIZE=6;var oo=function(t){return new Bt({style:t.displayMode?oe.DISPLAY:oe.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},co=function(t,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),t=z(n,[t])}return t},b3=function(t,r,n){var a=oo(n),i;if(n.output==="mathml")return Vu(t,r,a,n.displayMode,!0);if(n.output==="html"){var u=Ua(t,a);i=z(["katex"],[u])}else{var s=Vu(t,r,a,n.displayMode,!1),l=Ua(t,a);i=z(["katex"],[s,l])}return co(i,n)},E3=function(t,r,n){var a=oo(n),i=Ua(t,a),u=z(["katex"],[i]);return co(u,n)},T3={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",underbracket:"⎵",overbracket:"⎴",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},y0=function(t){var r=new G("mo",[new Me(T3[t.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},x3={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overbracket:[["leftbracketover","rightbracketover"],1.6,440],underbracket:[["leftbracketunder","rightbracketunder"],1.6,410],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},y3=new Set(["widehat","widecheck","widetilde","utilde"]),v0=function(t,r){function n(){var s=4e5,l=t.label.slice(1);if(y3.has(l)&&"base"in t){var c=t.base.type==="ordgroup"?t.base.body.length:1,d,f,g;if(c>5)l==="widehat"||l==="widecheck"?(d=420,s=2364,g=.42,f=l+"4"):(d=312,s=2340,g=.34,f="tilde4");else{var p=[1,1,2,2,3,3][c];l==="widehat"||l==="widecheck"?(s=[0,1062,2364,2364,2364][p],d=[0,239,300,360,420][p],g=[0,.24,.3,.3,.36,.42][p],f=l+p):(s=[0,600,1033,2339,2340][p],d=[0,260,286,306,312][p],g=[0,.26,.286,.3,.306,.34][p],f="tilde"+p)}var x=new Zt(f),S=new zt([x],{width:"100%",height:V(g),viewBox:"0 0 "+s+" "+d,preserveAspectRatio:"none"});return{span:er([],[S],r),minWidth:0,height:g}}else{var D=[],_=x3[l];if(!_)throw new Error('No SVG data for "'+l+'".');var[N,M,W]=_,j=W/1e3,L=N.length,ee,re;if(L===1){if(_.length!==4)throw new Error('Expected 4-tuple for single-path SVG data "'+l+'".');ee=["hide-tail"],re=[_[3]]}else if(L===2)ee=["halfarrow-left","halfarrow-right"],re=["xMinYMin","xMaxYMin"];else if(L===3)ee=["brace-left","brace-center","brace-right"],re=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+L+" children.");for(var K=0;K0&&(a.style.minWidth=V(i)),a},v3=function(t,r,n,a,i){var u,s=t.height+t.depth+n+a;if(/fbox|color|angl/.test(r)){if(u=z(["stretchy",r],[],i),r==="fbox"){var l=i.color&&i.getColor();l&&(u.style.borderColor=l)}}else{var c=[];/^[bx]cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var d=new zt(c,{width:"100%",height:V(s)});u=er([],[d],i)}return u.height=s,u.style.height=V(s),u},A3={bin:1,close:1,inner:1,open:1,punct:1,rel:1},k3={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1};function S3(e){return e in A3}function ce(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function A0(e){var t=k0(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function k0(e){return e&&(e.type==="atom"||k3.hasOwnProperty(e.type))?e:null}var ho=e=>{if(e instanceof ct)return e;if(K4(e)&&e.children.length===1)return ho(e.children[0])},Ai=(e,t)=>{var r,n,a;e&&e.type==="supsub"?(n=ce(e.base,"accent"),r=n.base,e.base=r,a=Q4(Te(e,t)),e.base=n):(n=ce(e,"accent"),r=n.base);var i=Te(r,t.havingCrampedStyle()),u=n.isShifty&&qt(r),s=0;if(u){var l,c;s=(l=(c=ho(i))==null?void 0:c.skew)!=null?l:0}var d=n.label==="\\c",f=d?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight),g;if(n.isStretchy)g=v0(n,t),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:g,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+V(2*s)+")",marginLeft:V(2*s)}:void 0}]});else{var p,x;n.label==="\\vec"?(p=ao("vec",t),x=no.vec[1]):(p=x0({mode:n.mode,text:n.label},t,"textord"),p=$4(p),p.italic=0,x=p.width,d&&(f+=p.depth)),g=z(["accent-body"],[p]);var S=n.label==="\\textcircled";S&&(g.classes.push("accent-full"),f=i.height);var D=s;S||(D-=x/2),g.style.left=V(D),n.label==="\\textcircled"&&(g.style.top=".2em"),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-f},{type:"elem",elem:g}]})}var _=z(["mord","accent"],[g],t);return a?(a.children[0]=_,a.height=Math.max(_.height,a.height),a.classes[0]="mord",a):_},fo=(e,t)=>{var r=e.isStretchy?y0(e.label):new G("mo",[bt(e.label,e.mode)]),n=new G("mover",[Ae(e.base,t),r]);return n.setAttribute("accent","true"),n},w3=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));Z({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=u0(t[0]),n=!w3.test(e.funcName),a=!n||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],n=e.parser.mode;return n==="math"&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:(e,t)=>{var r=Te(e.base,t),n=v0(e,t),a=e.label==="\\utilde"?.12:0,i=Ee({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]});return z(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=y0(e.label),n=new G("munder",[Ae(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Gn=e=>{var t=new G("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};Z({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n,funcName:a}=e;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder(e,t){var r=t.style,n=t.havingStyle(r.sup()),a=Lr(Te(e.body,n,t),t),i=e.label.slice(0,2)==="\\x"?"x":"cd";a.classes.push(i+"-arrow-pad");var u;e.below&&(n=t.havingStyle(r.sub()),u=Lr(Te(e.below,n,t),t),u.classes.push(i+"-arrow-pad"));var s=v0(e,t),l=-t.fontMetrics().axisHeight+.5*s.height,c=-t.fontMetrics().axisHeight-.5*s.height-.111;(a.depth>.25||e.label==="\\xleftequilibrium")&&(c-=a.depth);var d;if(u){var f=-t.fontMetrics().axisHeight+u.height+.5*s.height+.111;d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]},{type:"elem",elem:u,shift:f}]})}else d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]}]});return z(["mrel","x-arrow"],[d],t)},mathmlBuilder(e,t){var r=y0(e.label);r.setAttribute("minsize",e.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(e.body){var a=Gn(Ae(e.body,t));if(e.below){var i=Gn(Ae(e.below,t));n=new G("munderover",[r,i,a])}else n=new G("mover",[r,a])}else if(e.below){var u=Gn(Ae(e.below,t));n=new G("munder",[r,u])}else n=Gn(),n=new G("mover",[r,n]);return n}});function mo(e,t){var r=He(e.body,t,!0);return z([e.mclass],r,t)}function po(e,t){var r,n=dt(e.body,t);return e.mclass==="minner"?r=new G("mpadded",n):e.mclass==="mord"?e.isCharacterBox?(r=n[0],r.type="mi"):r=new G("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new G("mo",n),e.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):e.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):e.mclass==="mopen"||e.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):e.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}Z({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Re(a),isCharacterBox:qt(a)}},htmlBuilder:mo,mathmlBuilder:po});var S0=e=>{var t=e.type==="ordgroup"&&e.body.length?e.body[0]:e;return t.type==="atom"&&(t.family==="bin"||t.family==="rel")?"m"+t.family:"mord"};Z({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:S0(t[0]),body:Re(t[1]),isCharacterBox:qt(t[1])}}});Z({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:n}=e,a=t[1],i=t[0],u;n!=="\\stackrel"?u=S0(a):u="mrel";var s={type:"op",mode:a.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:Re(a)},l={type:"supsub",mode:i.mode,base:s,sup:n==="\\underset"?null:i,sub:n==="\\underset"?i:null};return{type:"mclass",mode:r.mode,mclass:u,body:[l],isCharacterBox:qt(l)}},htmlBuilder:mo,mathmlBuilder:po});Z({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:S0(t[0]),body:Re(t[0])}},htmlBuilder(e,t){var r=He(e.body,t,!0),n=z([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){var r=dt(e.body,t),n=new G("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var C3={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xu=()=>({type:"styling",body:[],mode:"math",style:"display",resetFont:!0}),$u=e=>e.type==="textord"&&e.text==="@",_3=(e,t)=>(e.type==="mathord"||e.type==="atom")&&e.text===t;function I3(e,t,r){var n=C3[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{var a=r.callFunction("\\\\cdleft",[t[0]],[]),i={type:"atom",text:n,mode:"math",family:"rel"},u=r.callFunction("\\Big",[i],[]),s=r.callFunction("\\\\cdright",[t[1]],[]),l={type:"ordgroup",mode:"math",body:[a,u,s]};return r.callFunction("\\\\cdparent",[l],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var c={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[c],[])}default:return{type:"textord",text:" ",mode:"math"}}}function N3(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if(r==="&"||r==="\\\\")e.consume();else if(r==="\\end"){t[t.length-1].length===0&&t.pop();break}else throw new Y("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var n=[],a=[n],i=0;iAV".includes(c))for(var f=0;f<2;f++){for(var g=!0,p=l+1;pAV=|." after @',u[l]);var x=I3(c,d,e),S={type:"styling",body:[x],mode:"math",style:"display",resetFont:!0};n.push(S),s=Xu()}i%2===0?n.push(s):n.shift(),n=[],a.push(n)}e.gullet.endGroup(),e.gullet.endGroup();var D=new Array(a[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:a,arraystretch:1,addJot:!0,rowGaps:[null],cols:D,colSeparationType:"CD",hLinesBeforeRow:new Array(a.length+1).fill([])}}Z({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),n=Lr(Te(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){var r=new G("mrow",[Ae(e.label,t)]);return r=new G("mpadded",[r]),r.setAttribute("width","0"),e.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new G("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Z({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Lr(Te(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new G("mrow",[Ae(e.fragment,t)])}});Z({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,n=ce(t[0],"ordgroup"),a=n.body,i="",u=0;u=1114111)throw new Y("\\@char with invalid code point "+i);return l<=65535?c=String.fromCharCode(l):(l-=65536,c=String.fromCharCode((l>>10)+55296,(l&1023)+56320)),{type:"textord",mode:r.mode,text:c}}});var go=(e,t)=>{var r=He(e.body,t.withColor(e.color),!1);return Gt(r)},bo=(e,t)=>{var r=dt(e.body,t.withColor(e.color)),n=new G("mstyle",r);return n.setAttribute("mathcolor",e.color),n};Z({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,n=ce(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:Re(a)}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:n}=e,a=ce(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:n}=e,a=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&ce(a,"size").value}},htmlBuilder(e,t){var r=z(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(Ie(e.size,t)))),r},mathmlBuilder(e,t){var r=new G("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(Ie(e.size,t)))),r}});var qa={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Eo=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new Y("Expected a control sequence",e);return t},D3=e=>{var t=e.gullet.popToken();return t.text==="="&&(t=e.gullet.popToken(),t.text===" "&&(t=e.gullet.popToken())),t},To=(e,t,r,n)=>{var a=e.gullet.macros.get(r.text);a==null&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};Z({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var n=t.fetch();if(qa[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=qa[n.text]),ce(t.parseFunction(),"internal");throw new Y("Invalid token after macro prefix",n)}});Z({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=t.gullet.popToken(),a=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(a))throw new Y("Expected a control sequence",n);for(var i=0,u,s=[[]];t.gullet.future().text!=="{";)if(n=t.gullet.popToken(),n.text==="#"){if(t.gullet.future().text==="{"){u=t.gullet.future(),s[i].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new Y('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==i+1)throw new Y('Argument number "'+n.text+'" out of order');i++,s.push([])}else{if(n.text==="EOF")throw new Y("Expected a macro definition");s[i].push(n.text)}var{tokens:l}=t.gullet.consumeArg();return u&&l.unshift(u),(r==="\\edef"||r==="\\xdef")&&(l=t.gullet.expandTokens(l),l.reverse()),t.gullet.macros.set(a,{tokens:l,numArgs:i,delimiters:s},r===qa[r]),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken());t.gullet.consumeSpaces();var a=D3(t);return To(t,n,a,r==="\\\\globallet"),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return To(t,n,i,r==="\\\\globalfuture"),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var tn=function(t,r,n){var a=we.math[t]&&we.math[t].replace,i=Ei(a||t,r,n);if(!i)throw new Error("Unsupported symbol "+t+" and font size "+r+".");return i},ki=function(t,r,n,a){var i=n.havingBaseStyle(r),u=z(a.concat(i.sizingClasses(n)),[t],n),s=i.sizeMultiplier/n.sizeMultiplier;return u.height*=s,u.depth*=s,u.maxFontSize=i.sizeMultiplier,u},xo=function(t,r,n){var a=r.havingBaseStyle(n),i=(1-r.sizeMultiplier/a.sizeMultiplier)*r.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=V(i),t.height-=i,t.depth+=i},O3=function(t,r,n,a,i,u){var s=Qe(t,"Main-Regular",i,a),l=ki(s,r,a,u);return xo(l,a,r),l},L3=function(t,r,n,a){return Qe(t,"Size"+r+"-Regular",n,a)},yo=function(t,r,n,a,i,u){var s=L3(t,r,i,a),l=ki(z(["delimsizing","size"+r],[s],a),oe.TEXT,a,u);return n&&xo(l,a,oe.TEXT),l},ua=function(t,r,n){var a;r==="Size1-Regular"?a="delim-size1":a="delim-size4";var i=z(["delimsizinginner",a],[z([],[Qe(t,r,n)])]);return{type:"elem",elem:i}},sa=function(t,r,n){var a=wt["Size4-Regular"][t.charCodeAt(0)]?wt["Size4-Regular"][t.charCodeAt(0)][4]:wt["Size1-Regular"][t.charCodeAt(0)][4],i=new Zt("inner",q4(t,Math.round(1e3*r))),u=new zt([i],{width:V(a),height:V(r),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),s=er([],[u],n);return s.height=r,s.style.height=V(r),s.style.width=V(a),{type:"elem",elem:s}},Ya=.008,Vn={type:"kern",size:-1*Ya},R3=new Set(["|","\\lvert","\\rvert","\\vert"]),M3=new Set(["\\|","\\lVert","\\rVert","\\Vert"]),vo=function(t,r,n,a,i,u){var s,l,c,d,f="",g=0;s=c=d=t,l=null;var p="Size1-Regular";t==="\\uparrow"?c=d="⏐":t==="\\Uparrow"?c=d="‖":t==="\\downarrow"?s=c="⏐":t==="\\Downarrow"?s=c="‖":t==="\\updownarrow"?(s="\\uparrow",c="⏐",d="\\downarrow"):t==="\\Updownarrow"?(s="\\Uparrow",c="‖",d="\\Downarrow"):R3.has(t)?(c="∣",f="vert",g=333):M3.has(t)?(c="∥",f="doublevert",g=556):t==="["||t==="\\lbrack"?(s="⎡",c="⎢",d="⎣",p="Size4-Regular",f="lbrack",g=667):t==="]"||t==="\\rbrack"?(s="⎤",c="⎥",d="⎦",p="Size4-Regular",f="rbrack",g=667):t==="\\lfloor"||t==="⌊"?(c=s="⎢",d="⎣",p="Size4-Regular",f="lfloor",g=667):t==="\\lceil"||t==="⌈"?(s="⎡",c=d="⎢",p="Size4-Regular",f="lceil",g=667):t==="\\rfloor"||t==="⌋"?(c=s="⎥",d="⎦",p="Size4-Regular",f="rfloor",g=667):t==="\\rceil"||t==="⌉"?(s="⎤",c=d="⎥",p="Size4-Regular",f="rceil",g=667):t==="("||t==="\\lparen"?(s="⎛",c="⎜",d="⎝",p="Size4-Regular",f="lparen",g=875):t===")"||t==="\\rparen"?(s="⎞",c="⎟",d="⎠",p="Size4-Regular",f="rparen",g=875):t==="\\{"||t==="\\lbrace"?(s="⎧",l="⎨",d="⎩",c="⎪",p="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(s="⎫",l="⎬",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lgroup"||t==="⟮"?(s="⎧",d="⎩",c="⎪",p="Size4-Regular"):t==="\\rgroup"||t==="⟯"?(s="⎫",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lmoustache"||t==="⎰"?(s="⎧",d="⎭",c="⎪",p="Size4-Regular"):(t==="\\rmoustache"||t==="⎱")&&(s="⎫",d="⎩",c="⎪",p="Size4-Regular");var x=tn(s,p,i),S=x.height+x.depth,D=tn(c,p,i),_=D.height+D.depth,N=tn(d,p,i),M=N.height+N.depth,W=0,j=1;if(l!==null){var L=tn(l,p,i);W=L.height+L.depth,j=2}var ee=S+M+W,re=Math.max(0,Math.ceil((r-ee)/(j*_))),K=ee+re*j*_,R=a.fontMetrics().axisHeight;n&&(R*=a.sizeMultiplier);var J=K/2-R,Q=[];if(f.length>0){var be=K-S-M,ne=Math.round(K*1e3),X=Y4(f,Math.round(be*1e3)),me=new Zt(f,X),ke=V(g/1e3),ze=V(ne/1e3),at=new zt([me],{width:ke,height:ze,viewBox:"0 0 "+g+" "+ne}),w=er([],[at],a);w.height=ne/1e3,w.style.width=ke,w.style.height=ze,Q.push({type:"elem",elem:w})}else{if(Q.push(ua(d,p,i)),Q.push(Vn),l===null){var Oe=K-S-M+2*Ya;Q.push(sa(c,Oe,a))}else{var Xe=(K-S-M-W)/2+2*Ya;Q.push(sa(c,Xe,a)),Q.push(Vn),Q.push(ua(l,p,i)),Q.push(Vn),Q.push(sa(c,Xe,a))}Q.push(Vn),Q.push(ua(s,p,i))}var C=a.havingBaseStyle(oe.TEXT),Ye=Ee({positionType:"bottom",positionData:J,children:Q});return ki(z(["delimsizing","mult"],[Ye],C),oe.TEXT,a,u)},la=80,oa=.08,ca=function(t,r,n,a,i){var u=U4(t,a,n),s=new Zt(t,u),l=new zt([s],{width:"400em",height:V(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return er(["hide-tail"],[l],i)},P3=function(t,r){var n=r.havingBaseSizing(),a=Co("\\surd",t*n.sizeMultiplier,wo,n),i=n.sizeMultiplier,u=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),s,l,c,d,f;return a.type==="small"?(d=1e3+1e3*u+la,t<1?i=1:t<1.4&&(i=.7),l=(1+u+oa)/i,c=(1+u)/i,s=ca("sqrtMain",l,d,u,r),s.style.minWidth="0.853em",f=.833/i):a.type==="large"?(d=(1e3+la)*sn[a.size],c=(sn[a.size]+u)/i,l=(sn[a.size]+u+oa)/i,s=ca("sqrtSize"+a.size,l,d,u,r),s.style.minWidth="1.02em",f=1/i):(l=t+u+oa,c=t+u,d=Math.floor(1e3*t+u)+la,s=ca("sqrtTall",l,d,u,r),s.style.minWidth="0.742em",f=1.056),s.height=c,s.style.height=V(l),{span:s,advanceWidth:f,ruleWidth:(r.fontMetrics().sqrtRuleThickness+u)*i}},Ao=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"]),B3=new Set(["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"]),ko=new Set(["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),sn=[0,1.2,1.8,2.4,3],So=function(t,r,n,a,i){if(t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle"),Ao.has(t)||ko.has(t))return yo(t,r,!1,n,a,i);if(B3.has(t))return vo(t,sn[r],!1,n,a,i);throw new Y("Illegal delimiter: '"+t+"'")},F3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],H3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"stack"}],wo=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],z3=function(t){if(t.type==="small")return"Main-Regular";if(t.type==="large")return"Size"+t.size+"-Regular";if(t.type==="stack")return"Size4-Regular";var r=t.type;throw new Error("Add support for delim type '"+r+"' here.")},Co=function(t,r,n,a){for(var i=Math.min(2,3-a.style.size),u=i;ur)return s}return n[n.length-1]},Ga=function(t,r,n,a,i,u){t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle");var s;ko.has(t)?s=F3:Ao.has(t)?s=wo:s=H3;var l=Co(t,r,s,a);return l.type==="small"?O3(t,l.style,n,a,i,u):l.type==="large"?yo(t,l.size,n,a,i,u):vo(t,r,n,a,i,u)},ha=function(t,r,n,a,i,u){var s=a.fontMetrics().axisHeight*a.sizeMultiplier,l=901,c=5/a.fontMetrics().ptPerEm,d=Math.max(r-s,n+s),f=Math.max(d/500*l,2*d-c);return Ga(t,f,!0,a,i,u)},Qu={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},U3=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."]);function Ku(e){return"isMiddle"in e}function w0(e,t){var r=k0(e);if(r&&U3.has(r.text))return r;throw r?new Y("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e):new Y("Invalid delimiter type '"+e.type+"'",e)}Z({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=w0(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Qu[e.funcName].size,mclass:Qu[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>e.delim==="."?z([e.mclass]):So(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];e.delim!=="."&&t.push(bt(e.delim,e.mode));var r=new G("mo",t);e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(sn[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}});function Ju(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Z({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new Y("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:w0(t[0],e).text,color:r}}});Z({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=ce(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Ju(e);for(var r=He(e.body,t,!0,["mopen","mclose"]),n=0,a=0,i=!1,u=0;u{Ju(e);var r=dt(e.body,t);if(e.left!=="."){var n=new G("mo",[bt(e.left,e.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(e.right!=="."){var a=new G("mo",[bt(e.right,e.mode)]);a.setAttribute("fence","true"),e.rightColor&&a.setAttribute("mathcolor",e.rightColor),r.push(a)}return yi(r)}});Z({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e);if(!e.parser.leftrightDepth)throw new Y("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;return e.delim==="."?r=bn(t,[]):(r=So(e.delim,1,t,e.mode,[]),r.isMiddle={delim:e.delim,options:t}),r},mathmlBuilder:(e,t)=>{var r=e.delim==="\\vert"||e.delim==="|"?bt("|","text"):bt(e.delim,e.mode),n=new G("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});var C0=(e,t)=>{var r=Lr(Te(e.body,t),t),n=e.label.slice(1),a=t.sizeMultiplier,i,u,s=qt(e.body);if(n==="sout")i=z(["stretchy","sout"]),i.height=t.fontMetrics().defaultRuleThickness/a,u=-.5*t.fontMetrics().xHeight;else if(n==="phase"){var l=Ie({number:.6,unit:"pt"},t),c=Ie({number:.35,unit:"ex"},t),d=t.havingBaseSizing();a=a/d.sizeMultiplier;var f=r.height+r.depth+l+c;r.style.paddingLeft=V(f/2+l);var g=Math.floor(1e3*f*a),p=H4(g),x=new zt([new Zt("phase",p)],{width:"400em",height:V(g/1e3),viewBox:"0 0 400000 "+g,preserveAspectRatio:"xMinYMin slice"});i=er(["hide-tail"],[x],t),i.style.height=V(f),u=r.depth+l+c}else{/cancel/.test(n)?s||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var S,D,_=0;/box/.test(n)?(_=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),S=t.fontMetrics().fboxsep+(n==="colorbox"?0:_),D=S):n==="angl"?(_=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),S=4*_,D=Math.max(0,.25-r.depth)):(S=s?.2:0,D=S),i=v3(r,n,S,D,t),/fbox|boxed|fcolorbox/.test(n)?(i.style.borderStyle="solid",i.style.borderWidth=V(_)):n==="angl"&&_!==.049&&(i.style.borderTopWidth=V(_),i.style.borderRightWidth=V(_)),u=r.depth+D,e.backgroundColor&&(i.style.backgroundColor=e.backgroundColor,e.borderColor&&(i.style.borderColor=e.borderColor))}var N;if(e.backgroundColor)N=Ee({positionType:"individualShift",children:[{type:"elem",elem:i,shift:u},{type:"elem",elem:r,shift:0}]});else{var M=/cancel|phase/.test(n)?["svg-align"]:[];N=Ee({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:i,shift:u,wrapperClasses:M}]})}return/cancel/.test(n)&&(N.height=r.height,N.depth=r.depth),/cancel/.test(n)&&!s?z(["mord","cancel-lap"],[N],t):z(["mord"],[N],t)},_0=(e,t)=>{var r,n=new G(e.label.includes("colorbox")?"mpadded":"menclose",[Ae(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+V(a)+" solid "+e.borderColor)}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};Z({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:u}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=ce(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:u,borderColor:i,body:s}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}});Z({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\sout"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e;r.mode==="math"&&r.settings.reportNonstrict("mathVsSout","LaTeX's \\sout works only in text mode");var a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var _o={};function Nt(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l{var t=e.parser.settings;if(!t.displayMode)throw new Y("{"+e.envName+"} can be used only in display mode.")},q3=new Set(["gather","gather*"]);function Si(e){if(!e.includes("ed"))return!e.includes("*")}function ar(e,t,r){var{hskipBeforeAndAfter:n,addJot:a,cols:i,arraystretch:u,colSeparationType:s,autoTag:l,singleRow:c,emptySingleRow:d,maxNumCols:f,leqno:g}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!u){var p=e.gullet.expandMacroAsText("\\arraystretch");if(p==null)u=1;else if(u=parseFloat(p),!u||u<0)throw new Y("Invalid \\arraystretch: "+p)}e.gullet.beginGroup();var x=[],S=[x],D=[],_=[],N=l!=null?[]:void 0;function M(){l&&e.gullet.macros.set("\\@eqnsw","1",!0)}function W(){N&&(e.gullet.macros.get("\\df@tag")?(N.push(e.subparse([new ot("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):N.push(!!l&&e.gullet.macros.get("\\@eqnsw")==="1"))}for(M(),_.push(Zu(e));;){var j=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup();var L={type:"ordgroup",mode:e.mode,body:j};r&&(L={type:"styling",mode:e.mode,style:r,resetFont:!0,body:[L]}),x.push(L);var ee=e.fetch().text;if(ee==="&"){if(f&&x.length===f){if(c||s)throw new Y("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else if(ee==="\\end"){W(),x.length===1&&L.type==="styling"&&L.body.length===1&&L.body[0].type==="ordgroup"&&L.body[0].body.length===0&&(S.length>1||!d)&&S.pop(),_.length0&&(M+=.25),c.push({pos:M,isDashed:ue[he]})}for(W(u[0]),n=0;n0&&(J+=N,eeue))for(n=0;n=s)){var it=void 0;if(a>0||t.hskipBeforeAndAfter){var Lt,ir;it=(Lt=(ir=C)==null?void 0:ir.pregap)!=null?Lt:g,it!==0&&(X=z(["arraycolsep"],[]),X.style.width=V(it),ne.push(X))}var _n=[];for(n=0;n0){for(var R0=Or("hline",r,d),M0=Or("hdashline",r,d),Vr=[{type:"elem",elem:ur,shift:0}];c.length>0;){var Ln=c.pop(),Rn=Ln.pos-Q;Ln.isDashed?Vr.push({type:"elem",elem:M0,shift:Rn}):Vr.push({type:"elem",elem:R0,shift:Rn})}ur=Ee({positionType:"individualShift",children:Vr})}if(ke.length===0)return z(["mord"],[ur],r);var B=Ee({positionType:"individualShift",children:ke}),$=z(["tag"],[B],r);return Gt([ur,$])},Y3={c:"center ",l:"left ",r:"right "},Ot=function(t,r){for(var n=[],a=new G("mtd",[],["mtr-glue"]),i=new G("mtd",[],["mml-eqn-num"]),u=0;u0){var x=t.cols,S="",D=!1,_=0,N=x.length;x[0].type==="separator"&&(g+="top ",_=1),x[x.length-1].type==="separator"&&(g+="bottom ",N-=1);for(var M=_;M0?"left ":"",g+=K[K.length-1].length>0?"right ":"";for(var R=1;R0&&p&&(D=1),n[x]={type:"align",align:S,pregap:D,postgap:0}}return u.colSeparationType=p?"align":"alignat",u};Nt({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(u){var s=A0(u),l=s.text;if("lcr".includes(l))return{type:"align",align:l};if(l==="|")return{type:"separator",separator:"|"};if(l===":")return{type:"separator",separator:":"};throw new Y("Unknown column alignment: "+l,u)}),i={cols:a,hskipBeforeAndAfter:!0,maxNumCols:a.length};return ar(e.parser,i,wi(e.envName))},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(e.envName.charAt(e.envName.length-1)==="*"){var a=e.parser;if(a.consumeSpaces(),a.fetch().text==="["){if(a.consume(),a.consumeSpaces(),r=a.fetch().text,!"lcr".includes(r))throw new Y("Expected l or c or r",a.nextToken);a.consume(),a.consumeSpaces(),a.expect("]"),a.consume(),n.cols=[{type:"align",align:r}]}}var i=ar(e.parser,n,wi(e.envName)),u=Math.max(0,...i.body.map(s=>s.length));return i.cols=new Array(u).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[i],left:t[0],right:t[1],rightColor:void 0}:i},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t={arraystretch:.5},r=ar(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(s){var l=A0(s),c=l.text;if("lc".includes(c))return{type:"align",align:c};throw new Y("Unknown column alignment: "+c,s)});if(a.length>1)throw new Y("{subarray} can contain only one column");var i={cols:a,hskipBeforeAndAfter:!1,arraystretch:.5},u=ar(e.parser,i,"script");if(u.body.length>0&&u.body[0].length>1)throw new Y("{subarray} can contain only one column");return u},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ar(e.parser,t,wi(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:e.envName.includes("r")?".":"\\{",right:e.envName.includes("r")?"\\}":".",rightColor:void 0}},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){q3.has(e.envName)&&I0(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Si(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){I0(e);var t={autoTag:Si(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["CD"],props:{numArgs:0},handler(e){return I0(e),N3(e.parser)},htmlBuilder:Dt,mathmlBuilder:Ot});E("\\nonumber","\\gdef\\@eqnsw{0}");E("\\notag","\\nonumber");Z({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new Y(e.funcName+" valid only within array environment")}});var es=_o;Z({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];if(a.type!=="ordgroup")throw new Y("Invalid environment name",a);for(var i="",u=0;u{var r=e.font,n=t.withFont(r);return Te(e.body,n)},Oo=(e,t)=>{var r=e.font,n=t.withFont(r);return Ae(e.body,n)},ts={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};Z({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=u0(t[0]),i=n;return i in ts&&(i=ts[i]),{type:"font",mode:r.mode,font:i.slice(1),body:a}},htmlBuilder:Do,mathmlBuilder:Oo});Z({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:S0(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:qt(n)}}});Z({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n,breakOnTokenText:a}=e,{mode:i}=r,u=r.parseExpression(!0,a);return{type:"font",mode:i,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:u}}},htmlBuilder:Do,mathmlBuilder:Oo});var G3=(e,t)=>{var r=t.style,n=r.fracNum(),a=r.fracDen(),i;i=t.havingStyle(n);var u=Te(e.numer,i,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;u.height=u.height0?x=3*g:x=7*g,S=t.fontMetrics().denom1):(f>0?(p=t.fontMetrics().num2,x=g):(p=t.fontMetrics().num3,x=3*g),S=t.fontMetrics().denom2);var D;if(d){var N=t.fontMetrics().axisHeight;p-u.depth-(N+.5*f){var r=new G("mfrac",[Ae(e.numer,t),Ae(e.denom,t)]);if(!e.hasBarLine)r.setAttribute("linethickness","0px");else if(e.barSize){var n=Ie(e.barSize,t);r.setAttribute("linethickness",V(n))}if(e.leftDelim!=null||e.rightDelim!=null){var a=[];if(e.leftDelim!=null){var i=new G("mo",[new Me(e.leftDelim.replace("\\",""))]);i.setAttribute("fence","true"),a.push(i)}if(a.push(r),e.rightDelim!=null){var u=new G("mo",[new Me(e.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),a.push(u)}return yi(a)}return r},Lo=(e,t)=>{if(!t)return e;var r={type:"styling",mode:e.mode,style:t,body:[e]};return r};Z({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=t[1],u,s=null,l=null;switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":u=!0;break;case"\\\\atopfrac":u=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":u=!1,s="(",l=")";break;case"\\\\bracefrac":u=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":u=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}var c=n==="\\cfrac",d=null;return c||n.startsWith("\\d")?d="display":n.startsWith("\\t")&&(d="text"),Lo({type:"genfrac",mode:r.mode,numer:a,denom:i,continued:c,hasBarLine:u,leftDelim:s,rightDelim:l,barSize:null},d)},htmlBuilder:G3,mathmlBuilder:V3});Z({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var{parser:t,funcName:r,token:n}=e,a;switch(r){case"\\over":a="\\frac";break;case"\\choose":a="\\binom";break;case"\\atop":a="\\\\atopfrac";break;case"\\brace":a="\\\\bracefrac";break;case"\\brack":a="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:t.mode,replaceWith:a,token:n}}});var rs=["display","text","script","scriptscript"],ns=function(t){var r=null;return t.length>0&&(r=t,r=r==="."?null:r),r};Z({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var{parser:r}=e,n=t[4],a=t[5],i=u0(t[0]),u=i.type==="atom"&&i.family==="open"?ns(i.text):null,s=u0(t[1]),l=s.type==="atom"&&s.family==="close"?ns(s.text):null,c=ce(t[2],"size"),d,f=null;c.isBlank?d=!0:(f=c.value,d=f.number>0);var g=null,p=t[3];if(p.type==="ordgroup"){if(p.body.length>0){var x=ce(p.body[0],"textord");g=rs[Number(x.text)]}}else p=ce(p,"textord"),g=rs[Number(p.text)];return Lo({type:"genfrac",mode:r.mode,numer:n,denom:a,continued:!1,hasBarLine:d,barSize:f,leftDelim:u,rightDelim:l},g)}});Z({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:n,token:a}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:ce(t[0],"size").value,token:a}}});Z({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=ce(t[1],"infix").size;if(!i)throw new Error("\\\\abovefrac expected size, but got "+String(i));var u=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:u,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null}}});var Ro=(e,t)=>{var r=t.style,n,a;e.type==="supsub"?(n=e.sup?Te(e.sup,t.havingStyle(r.sup()),t):Te(e.sub,t.havingStyle(r.sub()),t),a=ce(e.base,"horizBrace")):a=ce(e,"horizBrace");var i=Te(a.base,t.havingBaseStyle(oe.DISPLAY)),u=v0(a,t),s;if(a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:u,wrapperClasses:["svg-align"]}]}):s=Ee({positionType:"bottom",positionData:i.depth+.1+u.height,children:[{type:"elem",elem:u,wrapperClasses:["svg-align"]},{type:"kern",size:.1},{type:"elem",elem:i}]}),n){var l=z(["minner",a.isOver?"mover":"munder"],[s],t);a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:n}]}):s=Ee({positionType:"bottom",positionData:l.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:l}]})}return z(["minner",a.isOver?"mover":"munder"],[s],t)},j3=(e,t)=>{var r=y0(e.label);return new G(e.isOver?"mover":"munder",[Ae(e.base,t),r])};Z({type:"horizBrace",names:["\\overbrace","\\underbrace","\\overbracket","\\underbracket"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:n.includes("\\over"),base:t[0]}},htmlBuilder:Ro,mathmlBuilder:j3});Z({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[1],a=ce(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:Re(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=He(e.body,t,!1);return i3(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=tr(e.body,t);return r instanceof G||(r=new G("mrow",[r])),r.setAttribute("href",e.href),r}});Z({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=ce(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i{var{parser:r,funcName:n,token:a}=e,i=ce(t[0],"raw").string,u=t[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var s,l={};switch(n){case"\\htmlClass":l.class=i,s={command:"\\htmlClass",class:i};break;case"\\htmlId":l.id=i,s={command:"\\htmlId",id:i};break;case"\\htmlStyle":l.style=i,s={command:"\\htmlStyle",style:i};break;case"\\htmlData":{for(var c=i.split(","),d=0;d{var r=He(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));var a=z(n,r,t);for(var i in e.attributes)i!=="class"&&e.attributes.hasOwnProperty(i)&&a.setAttribute(i,e.attributes[i]);return a},mathmlBuilder:(e,t)=>tr(e.body,t)});Z({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInArgument:!0,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Re(t[0]),mathml:Re(t[1])}},htmlBuilder:(e,t)=>{var r=He(e.html,t,!1);return Gt(r)},mathmlBuilder:(e,t)=>tr(e.mathml,t)});var da=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new Y("Invalid size: '"+t+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!Ql(n))throw new Y("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n};Z({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:n}=e,a={number:0,unit:"em"},i={number:.9,unit:"em"},u={number:0,unit:"em"},s="";if(r[0])for(var l=ce(r[0],"raw").string,c=l.split(","),d=0;d{var r=Ie(e.height,t),n=0;e.totalheight.number>0&&(n=Ie(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=Ie(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var u=new W4(e.src,e.alt,i);return u.height=r,u.depth=n,u},mathmlBuilder:(e,t)=>{var r=new G("mglyph",[]);r.setAttribute("alt",e.alt);var n=Ie(e.height,t),a=0;if(e.totalheight.number>0&&(a=Ie(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=Ie(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}});Z({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=ce(t[0],"size");if(r.settings.strict){var i=n[1]==="m",u=a.value.unit==="mu";i?(u||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+a.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):u&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder(e,t){return ro(e.dimension,t)},mathmlBuilder(e,t){var r=Ie(e.dimension,t);return new lo(r)}});Z({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:(e,t)=>{var r;e.alignment==="clap"?(r=z([],[Te(e.body,t)]),r=z(["inner"],[r],t)):r=z(["inner"],[Te(e.body,t)]);var n=z(["fix"],[]),a=z([e.alignment],[r,n],t),i=z(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=z(["thinbox"],[a],t),z(["mord","vbox"],[a],t)},mathmlBuilder:(e,t)=>{var r=new G("mpadded",[Ae(e.body,t)]);if(e.alignment!=="rlap"){var n=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}});Z({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:n}=e,a=n.mode;n.switchMode("math");var i=r==="\\("?"\\)":"$",u=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",resetFont:!0,body:u}}});Z({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new Y("Mismatched "+e.funcName)}});var as=(e,t)=>{switch(t.style.size){case oe.DISPLAY.size:return e.display;case oe.TEXT.size:return e.text;case oe.SCRIPT.size:return e.script;case oe.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};Z({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Re(t[0]),text:Re(t[1]),script:Re(t[2]),scriptscript:Re(t[3])}},htmlBuilder:(e,t)=>{var r=as(e,t),n=He(r,t,!1);return Gt(n)},mathmlBuilder:(e,t)=>{var r=as(e,t);return tr(r,t)}});var Mo=(e,t,r,n,a,i,u)=>{e=z([],[e]);var s=r&&qt(r),l,c;if(t){var d=Te(t,n.havingStyle(a.sup()),n);c={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-d.depth)}}if(r){var f=Te(r,n.havingStyle(a.sub()),n);l={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-f.height)}}var g;if(c&&l){var p=n.fontMetrics().bigOpSpacing5+l.elem.height+l.elem.depth+l.kern+e.depth+u;g=Ee({positionType:"bottom",positionData:p,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else if(l){var x=e.height-u;g=Ee({positionType:"top",positionData:x,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e}]})}else if(c){var S=e.depth+u;g=Ee({positionType:"bottom",positionData:S,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else return e;var D=[g];if(l&&i!==0&&!s){var _=z(["mspace"],[],n);_.style.marginRight=V(i),D.unshift(_)}return z(["mop","op-limits"],D,n)},Po=new Set(["\\smallint"]),zr=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"op"),a=!0):i=ce(e,"op");var u=t.style,s=!1;u.size===oe.DISPLAY.size&&i.symbol&&!Po.has(i.name)&&(s=!0);var l,c;if(i.symbol){var d=s?"Size2-Regular":"Size1-Regular",f="";if((i.name==="\\oiint"||i.name==="\\oiiint")&&(f=i.name.slice(1),i.name=f==="oiint"?"\\iint":"\\iiint"),l=Qe(i.name,d,"math",t,["mop","op-symbol",s?"large-op":"small-op"]),c=l.italic,f.length>0){var g=ao(f+"Size"+(s?"2":"1"),t);l=Ee({positionType:"individualShift",children:[{type:"elem",elem:l,shift:0},{type:"elem",elem:g,shift:s?.08:0}]}),i.name="\\"+f,l.classes.unshift("mop"),l.italic=c}}else if(i.body){var p=He(i.body,t,!0);p.length===1&&p[0]instanceof ct?(l=p[0],l.classes[0]="mop"):l=z(["mop"],p,t)}else{for(var x=[],S=1;S{var r;if(e.symbol)r=new G("mo",[bt(e.name,e.mode)]),Po.has(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new G("mo",dt(e.body,t));else{r=new G("mi",[new Me(e.name.slice(1))]);var n=new G("mo",[bt("⁡","text")]);e.parentIsSupSub?r=new G("mrow",[r,n]):r=so([r,n])}return r},W3={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Z({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=n;return a.length===1&&(a=W3[a]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Re(n)}},htmlBuilder:zr,mathmlBuilder:Sn});var X3={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Z({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0,allowedInArgument:!0},handler(e){var{parser:t,funcName:r}=e,n=r;return n.length===1&&(n=X3[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:zr,mathmlBuilder:Sn});var Bo=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"operatorname"),a=!0):i=ce(e,"operatorname");var u;if(i.body.length>0){for(var s=i.body.map(f=>{var g="text"in f?f.text:void 0;return typeof g=="string"?{type:"textord",mode:f.mode,text:g}:f}),l=He(s,t.withFont("mathrm"),!0),c=0;c{for(var r=dt(e.body,t.withFont("mathrm")),n=!0,a=0;ad.toText()).join("");r=[new Me(s)]}var l=new G("mi",r);l.setAttribute("mathvariant","normal");var c=new G("mo",[bt("⁡","text")]);return e.parentIsSupSub?new G("mrow",[l,c]):so([l,c])};Z({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"operatorname",mode:r.mode,body:Re(a),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:Bo,mathmlBuilder:$3});E("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");br({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Gt(He(e.body,t,!1)):z(["mord"],He(e.body,t,!0),t)},mathmlBuilder(e,t){return tr(e.body,t,!0)}});Z({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle()),n=Or("overline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*a},{type:"elem",elem:n},{type:"kern",size:a}]});return z(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("mover",[Ae(e.body,t),r]);return n.setAttribute("accent","true"),n}});Z({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"phantom",mode:r.mode,body:Re(n)}},htmlBuilder:(e,t)=>{var r=He(e.body,t.withPhantom(),!1);return Gt(r)},mathmlBuilder:(e,t)=>{var r=dt(e.body,t);return new G("mphantom",r)}});E("\\hphantom","\\smash{\\phantom{#1}}");Z({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{var r=z(["inner"],[Te(e.body,t.withPhantom())]),n=z(["fix"],[]);return z(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{var r=dt(Re(e.body),t),n=new G("mphantom",r),a=new G("mpadded",[n]);return a.setAttribute("width","0px"),a}});Z({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,n=ce(t[0],"size").value,a=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:a}},htmlBuilder(e,t){var r=Te(e.body,t),n=Ie(e.dy,t);return Ee({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}});Z({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}});Z({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){var{parser:n}=e,a=r[0],i=ce(t[0],"size"),u=ce(t[1],"size");return{type:"rule",mode:n.mode,shift:a&&ce(a,"size").value,width:i.value,height:u.value}},htmlBuilder(e,t){var r=z(["mord","rule"],[],t),n=Ie(e.width,t),a=Ie(e.height,t),i=e.shift?Ie(e.shift,t):0;return r.style.borderRightWidth=V(n),r.style.borderTopWidth=V(a),r.style.bottom=V(i),r.width=n,r.height=a+i,r.depth=-i,r.maxFontSize=a*1.125*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=Ie(e.width,t),n=Ie(e.height,t),a=e.shift?Ie(e.shift,t):0,i=t.color&&t.getColor()||"black",u=new G("mspace");u.setAttribute("mathbackground",i),u.setAttribute("width",V(r)),u.setAttribute("height",V(n));var s=new G("mpadded",[u]);return a>=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});function Fo(e,t,r){for(var n=He(e,t,!1),a=t.sizeMultiplier/r.sizeMultiplier,i=0;i{var r=t.havingSize(e.size);return Fo(e.body,r,t)};Z({type:"sizing",names:is,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:is.indexOf(n)+1,body:i}},htmlBuilder:Q3,mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),n=dt(e.body,r),a=new G("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}});Z({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:n}=e,a=!1,i=!1,u=r[0]&&ce(r[0],"ordgroup");if(u)for(var s,l=0;l{var r=z([],[Te(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0),e.smashDepth&&(r.depth=0),e.smashHeight&&e.smashDepth)return z(["mord","smash"],[r],t);if(r.children)for(var n=0;n{var r=new G("mpadded",[Ae(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}});Z({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n}=e,a=r[0],i=t[0];return{type:"sqrt",mode:n.mode,body:i,index:a}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle());r.height===0&&(r.height=t.fontMetrics().xHeight),r=Lr(r,t);var n=t.fontMetrics(),a=n.defaultRuleThickness,i=a;t.style.idr.height+r.depth+u&&(u=(u+f-r.height-r.depth)/2);var g=l.height-r.height-u-c;r.style.paddingLeft=V(d);var p=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+g)},{type:"elem",elem:l},{type:"kern",size:c}]});if(e.index){var x=t.havingStyle(oe.SCRIPTSCRIPT),S=Te(e.index,x,t),D=.6*(p.height-p.depth),_=Ee({positionType:"shift",positionData:-D,children:[{type:"elem",elem:S}]}),N=z(["root"],[_]);return z(["mord","sqrt"],[N,p],t)}else return z(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:n}=e;return n?new G("mroot",[Ae(r,t),Ae(n,t)]):new G("msqrt",[Ae(r,t)])}});var Va={display:oe.DISPLAY,text:oe.TEXT,script:oe.SCRIPT,scriptscript:oe.SCRIPTSCRIPT};function K3(e){return e in Va}Z({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!0,r),u=n.slice(1,n.length-5);if(!K3(u))throw new Error("Unknown style: "+u);return{type:"styling",mode:a.mode,style:u,body:i}},htmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);return e.resetFont&&(n=n.withFont("")),Fo(e.body,n,t)},mathmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);e.resetFont&&(n=n.withFont(""));var a=dt(e.body,n),i=new G("mstyle",a),u={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},s=u[e.style];return i.setAttribute("scriptlevel",s[0]),i.setAttribute("displaystyle",s[1]),i}});var J3=function(t,r){var n=t.base;if(n)if(n.type==="op"){var a=n.limits&&(r.style.size===oe.DISPLAY.size||n.alwaysHandleSupSub);return a?zr:null}else if(n.type==="operatorname"){var i=n.alwaysHandleSupSub&&(r.style.size===oe.DISPLAY.size||n.limits);return i?Bo:null}else{if(n.type==="accent")return qt(n.base)?Ai:null;if(n.type==="horizBrace"){var u=!t.sub;return u===n.isOver?Ro:null}else return null}else return null};br({type:"supsub",htmlBuilder(e,t){var r=J3(e,t);if(r)return r(e,t);var{base:n,sup:a,sub:i}=e,u=Te(n,t),s,l,c=t.fontMetrics(),d=0,f=0,g=n&&qt(n);if(a){var p=t.havingStyle(t.style.sup());s=Te(a,p,t),g||(d=u.height-p.fontMetrics().supDrop*p.sizeMultiplier/t.sizeMultiplier)}if(i){var x=t.havingStyle(t.style.sub());l=Te(i,x,t),g||(f=u.depth+x.fontMetrics().subDrop*x.sizeMultiplier/t.sizeMultiplier)}var S;t.style===oe.DISPLAY?S=c.sup1:t.style.cramped?S=c.sup3:S=c.sup2;var D=t.sizeMultiplier,_=V(.5/c.ptPerEm/D),N=null;if(l){var M=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");if(u instanceof ct||M){var W;N=V(-((W=u.italic)!=null?W:0))}}var j;if(s&&l){d=Math.max(d,S,s.depth+.25*c.xHeight),f=Math.max(f,c.sub2);var L=c.defaultRuleThickness,ee=4*L;if(d-s.depth-(l.height-f)0&&(d+=re,f-=re)}var K=[{type:"elem",elem:l,shift:f,marginRight:_,marginLeft:N},{type:"elem",elem:s,shift:-d,marginRight:_}];j=Ee({positionType:"individualShift",children:K})}else if(l){f=Math.max(f,c.sub1,l.height-.8*c.xHeight);var R=[{type:"elem",elem:l,marginLeft:N,marginRight:_}];j=Ee({positionType:"shift",positionData:f,children:R})}else if(s)d=Math.max(d,S,s.depth+.25*c.xHeight),j=Ee({positionType:"shift",positionData:-d,children:[{type:"elem",elem:s,marginRight:_}]});else throw new Error("supsub must have either sup or sub.");var J=za(u,"right")||"mord";return z([J],[u,z(["msupsub"],[j])],t)},mathmlBuilder(e,t){var r=!1,n,a;e.base&&e.base.type==="horizBrace"&&(a=!!e.sup,a===e.base.isOver&&(r=!0,n=e.base.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var i=[Ae(e.base,t)];e.sub&&i.push(Ae(e.sub,t)),e.sup&&i.push(Ae(e.sup,t));var u;if(r)u=n?"mover":"munder";else if(e.sub)if(e.sup){var c=e.base;c&&c.type==="op"&&c.limits&&t.style===oe.DISPLAY||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(t.style===oe.DISPLAY||c.limits)?u="munderover":u="msubsup"}else{var l=e.base;l&&l.type==="op"&&l.limits&&(t.style===oe.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||t.style===oe.DISPLAY)?u="munder":u="msub"}else{var s=e.base;s&&s.type==="op"&&s.limits&&(t.style===oe.DISPLAY||s.alwaysHandleSupSub)||s&&s.type==="operatorname"&&s.alwaysHandleSupSub&&(s.limits||t.style===oe.DISPLAY)?u="mover":u="msup"}return new G(u,i)}});br({type:"atom",htmlBuilder(e,t){return Ti(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){var r=new G("mo",[bt(e.text,e.mode)]);if(e.family==="bin"){var n=vi(e,t);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});var Ho={mi:"italic",mn:"normal",mtext:"normal"};br({type:"mathord",htmlBuilder(e,t){return x0(e,t,"mathord")},mathmlBuilder(e,t){var r=new G("mi",[bt(e.text,e.mode,t)]),n=vi(e,t)||"italic";return n!==Ho[r.type]&&r.setAttribute("mathvariant",n),r}});br({type:"textord",htmlBuilder(e,t){return x0(e,t,"textord")},mathmlBuilder(e,t){var r=bt(e.text,e.mode,t),n=vi(e,t)||"normal",a;return e.mode==="text"?a=new G("mtext",[r]):/[0-9]/.test(e.text)?a=new G("mn",[r]):e.text==="\\prime"?a=new G("mo",[r]):a=new G("mi",[r]),n!==Ho[a.type]&&a.setAttribute("mathvariant",n),a}});var fa={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ma={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};br({type:"spacing",htmlBuilder(e,t){if(ma.hasOwnProperty(e.text)){var r=ma[e.text].className||"";if(e.mode==="text"){var n=x0(e,t,"textord");return n.classes.push(r),n}else return z(["mspace",r],[Ti(e.text,e.mode,t)],t)}else{if(fa.hasOwnProperty(e.text))return z(["mspace",fa[e.text]],[],t);throw new Y('Unknown type of space "'+e.text+'"')}},mathmlBuilder(e,t){var r;if(ma.hasOwnProperty(e.text))r=new G("mtext",[new Me(" ")]);else{if(fa.hasOwnProperty(e.text))return new G("mspace");throw new Y('Unknown type of space "'+e.text+'"')}return r}});var us=()=>{var e=new G("mtd",[]);return e.setAttribute("width","50%"),e};br({type:"tag",mathmlBuilder(e,t){var r=new G("mtable",[new G("mtr",[us(),new G("mtd",[tr(e.body,t)]),us(),new G("mtd",[tr(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var ss={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ls={"\\textbf":"textbf","\\textmd":"textmd"},Z3={"\\textit":"textit","\\textup":"textup"},os=(e,t)=>{var r=e.font;if(r){if(ss[r])return t.withTextFontFamily(ss[r]);if(ls[r])return t.withTextFontWeight(ls[r]);if(r==="\\emph")return t.fontShape==="textit"?t.withTextFontShape("textup"):t.withTextFontShape("textit")}else return t;return t.withTextFontShape(Z3[r])};Z({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"text",mode:r.mode,body:Re(a),font:n}},htmlBuilder(e,t){var r=os(e,t),n=He(e.body,r,!0);return z(["mord","text"],n,r)},mathmlBuilder(e,t){var r=os(e,t);return tr(e.body,r)}});Z({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=Or("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]});return z(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("munder",[Ae(e.body,t),r]);return n.setAttribute("accentunder","true"),n}});Z({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ee({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)],["vcenter"]);return new G("mrow",[r])}});Z({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new Y("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=cs(e),n=[],a=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"␣":" "),Qt=io,zo=`[ \r - ]`,e6="\\\\[a-zA-Z@]+",t6="\\\\[^\uD800-\uDFFF]",r6="("+e6+")"+zo+"*",n6=`\\\\( -|[ \r ]+ -?)[ \r ]*`,ja="[̀-ͯ]",a6=new RegExp(ja+"+$"),i6="("+zo+"+)|"+(n6+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(ja+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(ja+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+r6)+("|"+t6+")");class hs{constructor(t,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=r,this.tokenRegex=new RegExp(i6,"g"),this.catcodes={"%":14,"~":13}}setCatcode(t,r){this.catcodes[t]=r}lex(){var t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new ot("EOF",new rt(this,r,r));var n=this.tokenRegex.exec(t);if(n===null||n.index!==r)throw new Y("Unexpected character: '"+t[r]+"'",new ot(t[r],new rt(this,r,r+1)));var a=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[a]===14){var i=t.indexOf(` -`,this.tokenRegex.lastIndex);return i===-1?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=i+1,this.lex()}return new ot(a,new rt(this,r,this.tokenRegex.lastIndex))}}class u6{constructor(t,r){t===void 0&&(t={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=t,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Y("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var r in t)t.hasOwnProperty(r)&&(t[r]==null?delete this.current[r]:this.current[r]=t[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,r,n){if(n===void 0&&(n=!1),n){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][t]=r)}else{var i=this.undefStack[this.undefStack.length-1];i&&!i.hasOwnProperty(t)&&(i[t]=this.current[t])}r==null?delete this.current[t]:this.current[t]=r}}var s6=Io;E("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});E("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});E("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});E("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});E("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return t[0].length===1&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});E("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");E("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});var ds={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};E("\\char",function(e){var t=e.popToken(),r,n=0;if(t.text==="'")r=8,t=e.popToken();else if(t.text==='"')r=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")n=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new Y("\\char` missing argument");n=t.text.charCodeAt(0)}else r=10;if(r){if(n=ds[t.text],n==null||n>=r)throw new Y("Invalid base-"+r+" digit "+t.text);for(var a;(a=ds[e.future().text])!=null&&a{var a=e.consumeArg().tokens;if(a.length!==1)throw new Y("\\newcommand's first argument must be a macro name");var i=a[0].text,u=e.isDefined(i);if(u&&!t)throw new Y("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!u&&!r)throw new Y("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(a=e.consumeArg().tokens,a.length===1&&a[0].text==="["){for(var l="",c=e.expandNextToken();c.text!=="]"&&c.text!=="EOF";)l+=c.text,c=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new Y("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return u&&n||e.macros.set(i,{tokens:a,numArgs:s}),""};E("\\newcommand",e=>Ci(e,!1,!0,!1));E("\\renewcommand",e=>Ci(e,!0,!1,!1));E("\\providecommand",e=>Ci(e,!0,!0,!0));E("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(r=>r.text).join("")),""});E("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(r=>r.text).join("")),""});E("\\show",e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Qt[r],we.math[r],we.text[r]),""});E("\\bgroup","{");E("\\egroup","}");E("~","\\nobreakspace");E("\\lq","`");E("\\rq","'");E("\\aa","\\r a");E("\\AA","\\r A");E("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");E("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");E("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");E("ℬ","\\mathscr{B}");E("ℰ","\\mathscr{E}");E("ℱ","\\mathscr{F}");E("ℋ","\\mathscr{H}");E("ℐ","\\mathscr{I}");E("ℒ","\\mathscr{L}");E("ℳ","\\mathscr{M}");E("ℛ","\\mathscr{R}");E("ℭ","\\mathfrak{C}");E("ℌ","\\mathfrak{H}");E("ℨ","\\mathfrak{Z}");E("\\Bbbk","\\Bbb{k}");E("\\llap","\\mathllap{\\textrm{#1}}");E("\\rlap","\\mathrlap{\\textrm{#1}}");E("\\clap","\\mathclap{\\textrm{#1}}");E("\\mathstrut","\\vphantom{(}");E("\\underbar","\\underline{\\text{#1}}");E("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');E("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");E("\\ne","\\neq");E("≠","\\neq");E("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");E("∉","\\notin");E("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");E("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");E("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");E("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");E("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");E("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");E("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");E("⟂","\\perp");E("‼","\\mathclose{!\\mkern-0.8mu!}");E("∌","\\notni");E("⌜","\\ulcorner");E("⌝","\\urcorner");E("⌞","\\llcorner");E("⌟","\\lrcorner");E("©","\\copyright");E("®","\\textregistered");E("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');E("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');E("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');E("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');E("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");E("⋮","\\vdots");E("\\varGamma","\\mathit{\\Gamma}");E("\\varDelta","\\mathit{\\Delta}");E("\\varTheta","\\mathit{\\Theta}");E("\\varLambda","\\mathit{\\Lambda}");E("\\varXi","\\mathit{\\Xi}");E("\\varPi","\\mathit{\\Pi}");E("\\varSigma","\\mathit{\\Sigma}");E("\\varUpsilon","\\mathit{\\Upsilon}");E("\\varPhi","\\mathit{\\Phi}");E("\\varPsi","\\mathit{\\Psi}");E("\\varOmega","\\mathit{\\Omega}");E("\\substack","\\begin{subarray}{c}#1\\end{subarray}");E("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");E("\\boxed","\\fbox{$\\displaystyle{#1}$}");E("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");E("\\implies","\\DOTSB\\;\\Longrightarrow\\;");E("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");E("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");E("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var fs={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},l6=new Set(["bin","rel"]);E("\\dots",function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in fs?t=fs[r]:(r.slice(0,4)==="\\not"||r in we.math&&l6.has(we.math[r].group))&&(t="\\dotsb"),t});var _i={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};E("\\dotso",function(e){var t=e.future().text;return t in _i?"\\ldots\\,":"\\ldots"});E("\\dotsc",function(e){var t=e.future().text;return t in _i&&t!==","?"\\ldots\\,":"\\ldots"});E("\\cdots",function(e){var t=e.future().text;return t in _i?"\\@cdots\\,":"\\@cdots"});E("\\dotsb","\\cdots");E("\\dotsm","\\cdots");E("\\dotsi","\\!\\cdots");E("\\dotsx","\\ldots\\,");E("\\DOTSI","\\relax");E("\\DOTSB","\\relax");E("\\DOTSX","\\relax");E("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");E("\\,","\\tmspace+{3mu}{.1667em}");E("\\thinspace","\\,");E("\\>","\\mskip{4mu}");E("\\:","\\tmspace+{4mu}{.2222em}");E("\\medspace","\\:");E("\\;","\\tmspace+{5mu}{.2777em}");E("\\thickspace","\\;");E("\\!","\\tmspace-{3mu}{.1667em}");E("\\negthinspace","\\!");E("\\negmedspace","\\tmspace-{4mu}{.2222em}");E("\\negthickspace","\\tmspace-{5mu}{.277em}");E("\\enspace","\\kern.5em ");E("\\enskip","\\hskip.5em\\relax");E("\\quad","\\hskip1em\\relax");E("\\qquad","\\hskip2em\\relax");E("\\tag","\\@ifstar\\tag@literal\\tag@paren");E("\\tag@paren","\\tag@literal{({#1})}");E("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new Y("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});E("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");E("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");E("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");E("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");E("\\newline","\\\\\\relax");E("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Uo=V(wt["Main-Regular"][84][1]-.7*wt["Main-Regular"][65][1]);E("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");E("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");E("\\hspace","\\@ifstar\\@hspacer\\@hspace");E("\\@hspace","\\hskip #1\\relax");E("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");E("\\ordinarycolon",":");E("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");E("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');E("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');E("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');E("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');E("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');E("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');E("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');E("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');E("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');E("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');E("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');E("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');E("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');E("∷","\\dblcolon");E("∹","\\eqcolon");E("≔","\\coloneqq");E("≕","\\eqqcolon");E("⩴","\\Coloneqq");E("\\ratio","\\vcentcolon");E("\\coloncolon","\\dblcolon");E("\\colonequals","\\coloneqq");E("\\coloncolonequals","\\Coloneqq");E("\\equalscolon","\\eqqcolon");E("\\equalscoloncolon","\\Eqqcolon");E("\\colonminus","\\coloneq");E("\\coloncolonminus","\\Coloneq");E("\\minuscolon","\\eqcolon");E("\\minuscoloncolon","\\Eqcolon");E("\\coloncolonapprox","\\Colonapprox");E("\\coloncolonsim","\\Colonsim");E("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");E("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");E("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");E("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");E("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");E("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");E("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");E("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");E("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");E("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");E("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");E("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");E("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");E("\\nleqq","\\html@mathml{\\@nleqq}{≰}");E("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");E("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");E("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");E("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");E("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");E("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");E("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");E("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");E("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");E("\\imath","\\html@mathml{\\@imath}{ı}");E("\\jmath","\\html@mathml{\\@jmath}{ȷ}");E("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");E("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");E("⟦","\\llbracket");E("⟧","\\rrbracket");E("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");E("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");E("⦃","\\lBrace");E("⦄","\\rBrace");E("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");E("⦵","\\minuso");E("\\darr","\\downarrow");E("\\dArr","\\Downarrow");E("\\Darr","\\Downarrow");E("\\lang","\\langle");E("\\rang","\\rangle");E("\\uarr","\\uparrow");E("\\uArr","\\Uparrow");E("\\Uarr","\\Uparrow");E("\\N","\\mathbb{N}");E("\\R","\\mathbb{R}");E("\\Z","\\mathbb{Z}");E("\\alef","\\aleph");E("\\alefsym","\\aleph");E("\\Alpha","\\mathrm{A}");E("\\Beta","\\mathrm{B}");E("\\bull","\\bullet");E("\\Chi","\\mathrm{X}");E("\\clubs","\\clubsuit");E("\\cnums","\\mathbb{C}");E("\\Complex","\\mathbb{C}");E("\\Dagger","\\ddagger");E("\\diamonds","\\diamondsuit");E("\\empty","\\emptyset");E("\\Epsilon","\\mathrm{E}");E("\\Eta","\\mathrm{H}");E("\\exist","\\exists");E("\\harr","\\leftrightarrow");E("\\hArr","\\Leftrightarrow");E("\\Harr","\\Leftrightarrow");E("\\hearts","\\heartsuit");E("\\image","\\Im");E("\\infin","\\infty");E("\\Iota","\\mathrm{I}");E("\\isin","\\in");E("\\Kappa","\\mathrm{K}");E("\\larr","\\leftarrow");E("\\lArr","\\Leftarrow");E("\\Larr","\\Leftarrow");E("\\lrarr","\\leftrightarrow");E("\\lrArr","\\Leftrightarrow");E("\\Lrarr","\\Leftrightarrow");E("\\Mu","\\mathrm{M}");E("\\natnums","\\mathbb{N}");E("\\Nu","\\mathrm{N}");E("\\Omicron","\\mathrm{O}");E("\\plusmn","\\pm");E("\\rarr","\\rightarrow");E("\\rArr","\\Rightarrow");E("\\Rarr","\\Rightarrow");E("\\real","\\Re");E("\\reals","\\mathbb{R}");E("\\Reals","\\mathbb{R}");E("\\Rho","\\mathrm{P}");E("\\sdot","\\cdot");E("\\sect","\\S");E("\\spades","\\spadesuit");E("\\sub","\\subset");E("\\sube","\\subseteq");E("\\supe","\\supseteq");E("\\Tau","\\mathrm{T}");E("\\thetasym","\\vartheta");E("\\weierp","\\wp");E("\\Zeta","\\mathrm{Z}");E("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");E("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");E("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");E("\\bra","\\mathinner{\\langle{#1}|}");E("\\ket","\\mathinner{|{#1}\\rangle}");E("\\braket","\\mathinner{\\langle{#1}\\rangle}");E("\\Bra","\\left\\langle#1\\right|");E("\\Ket","\\left|#1\\right\\rangle");var qo=e=>t=>{var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,u=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=f=>g=>{e&&(g.macros.set("|",u),a.length&&g.macros.set("\\|",s));var p=f;if(!f&&a.length){var x=g.future();x.text==="|"&&(g.popToken(),p=!0)}return{tokens:p?a:n,numArgs:0}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var c=t.consumeArg().tokens,d=t.expandTokens([...i,...c,...r]);return t.macros.endGroup(),{tokens:d.reverse(),numArgs:0}};E("\\bra@ket",qo(!1));E("\\bra@set",qo(!0));E("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");E("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");E("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");E("\\angln","{\\angl n}");E("\\blue","\\textcolor{##6495ed}{#1}");E("\\orange","\\textcolor{##ffa500}{#1}");E("\\pink","\\textcolor{##ff00af}{#1}");E("\\red","\\textcolor{##df0030}{#1}");E("\\green","\\textcolor{##28ae7b}{#1}");E("\\gray","\\textcolor{gray}{#1}");E("\\purple","\\textcolor{##9d38bd}{#1}");E("\\blueA","\\textcolor{##ccfaff}{#1}");E("\\blueB","\\textcolor{##80f6ff}{#1}");E("\\blueC","\\textcolor{##63d9ea}{#1}");E("\\blueD","\\textcolor{##11accd}{#1}");E("\\blueE","\\textcolor{##0c7f99}{#1}");E("\\tealA","\\textcolor{##94fff5}{#1}");E("\\tealB","\\textcolor{##26edd5}{#1}");E("\\tealC","\\textcolor{##01d1c1}{#1}");E("\\tealD","\\textcolor{##01a995}{#1}");E("\\tealE","\\textcolor{##208170}{#1}");E("\\greenA","\\textcolor{##b6ffb0}{#1}");E("\\greenB","\\textcolor{##8af281}{#1}");E("\\greenC","\\textcolor{##74cf70}{#1}");E("\\greenD","\\textcolor{##1fab54}{#1}");E("\\greenE","\\textcolor{##0d923f}{#1}");E("\\goldA","\\textcolor{##ffd0a9}{#1}");E("\\goldB","\\textcolor{##ffbb71}{#1}");E("\\goldC","\\textcolor{##ff9c39}{#1}");E("\\goldD","\\textcolor{##e07d10}{#1}");E("\\goldE","\\textcolor{##a75a05}{#1}");E("\\redA","\\textcolor{##fca9a9}{#1}");E("\\redB","\\textcolor{##ff8482}{#1}");E("\\redC","\\textcolor{##f9685d}{#1}");E("\\redD","\\textcolor{##e84d39}{#1}");E("\\redE","\\textcolor{##bc2612}{#1}");E("\\maroonA","\\textcolor{##ffbde0}{#1}");E("\\maroonB","\\textcolor{##ff92c6}{#1}");E("\\maroonC","\\textcolor{##ed5fa6}{#1}");E("\\maroonD","\\textcolor{##ca337c}{#1}");E("\\maroonE","\\textcolor{##9e034e}{#1}");E("\\purpleA","\\textcolor{##ddd7ff}{#1}");E("\\purpleB","\\textcolor{##c6b9fc}{#1}");E("\\purpleC","\\textcolor{##aa87ff}{#1}");E("\\purpleD","\\textcolor{##7854ab}{#1}");E("\\purpleE","\\textcolor{##543b78}{#1}");E("\\mintA","\\textcolor{##f5f9e8}{#1}");E("\\mintB","\\textcolor{##edf2df}{#1}");E("\\mintC","\\textcolor{##e0e5cc}{#1}");E("\\grayA","\\textcolor{##f6f7f7}{#1}");E("\\grayB","\\textcolor{##f0f1f2}{#1}");E("\\grayC","\\textcolor{##e3e5e6}{#1}");E("\\grayD","\\textcolor{##d6d8da}{#1}");E("\\grayE","\\textcolor{##babec2}{#1}");E("\\grayF","\\textcolor{##888d93}{#1}");E("\\grayG","\\textcolor{##626569}{#1}");E("\\grayH","\\textcolor{##3b3e40}{#1}");E("\\grayI","\\textcolor{##21242c}{#1}");E("\\kaBlue","\\textcolor{##314453}{#1}");E("\\kaGreen","\\textcolor{##71B307}{#1}");var Yo={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class o6{constructor(t,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new u6(s6,r.macros),this.mode=n,this.stack=[]}feed(t){this.lexer=new hs(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var r,n,a;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:a,end:n}=this.consumeArg(["]"])}else({tokens:a,start:r,end:n}=this.consumeArg());return this.pushToken(new ot("EOF",n.loc)),this.pushTokens(a),new ot("",rt.range(r,n))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var r=[],n=t&&t.length>0;n||this.consumeSpaces();var a=this.future(),i,u=0,s=0;do{if(i=this.popToken(),r.push(i),i.text==="{")++u;else if(i.text==="}"){if(--u,u===-1)throw new Y("Extra }",i)}else if(i.text==="EOF")throw new Y("Unexpected end of input in a macro argument, expected '"+(t&&n?t[s]:"}")+"'",i);if(t&&n)if((u===0||u===1&&t[s]==="{")&&i.text===t[s]){if(++s,s===t.length){r.splice(-s,s);break}}else s=0}while(u!==0||n);return a.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:a,end:i}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new Y("The length of delimiters doesn't match the number of args!");for(var n=r[0],a=0;athis.settings.maxExpand)throw new Y("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var r=this.popToken(),n=r.text,a=r.noexpand?null:this._getExpansion(n);if(a==null||t&&a.unexpandable){if(t&&a==null&&n[0]==="\\"&&!this.isDefined(n))throw new Y("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var i=a.tokens,u=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs){i=i.slice();for(var s=i.length-1;s>=0;--s){var l=i[s];if(l.text==="#"){if(s===0)throw new Y("Incomplete placeholder at end of macro body",l);if(l=i[--s],l.text==="#")i.splice(s+1,1);else if(/^[1-9]$/.test(l.text))i.splice(s,2,...u[+l.text-1]);else throw new Y("Not a valid argument number",l)}}}return this.pushTokens(i),i.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}}expandMacro(t){return this.macros.has(t)?this.expandTokens([new ot(t)]):void 0}expandTokens(t){var r=[],n=this.stack.length;for(this.pushTokens(t);this.stack.length>n;)if(this.expandOnce(!0)===!1){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),r.push(a)}return this.countExpansion(r.length),r}expandMacroAsText(t){var r=this.expandMacro(t);return r&&r.map(n=>n.text).join("")}_getExpansion(t){var r=this.macros.get(t);if(r==null)return r;if(t.length===1){var n=this.lexer.catcodes[t];if(n!=null&&n!==13)return}var a=typeof r=="function"?r(this):r;if(typeof a=="string"){var i=0;if(a.includes("#"))for(var u=a.replace(/##/g,"");u.includes("#"+(i+1));)++i;for(var s=new hs(a,this.settings),l=[],c=s.lex();c.text!=="EOF";)l.push(c),c=s.lex();l.reverse();var d={tokens:l,numArgs:i};return d}return a}isDefined(t){return this.macros.has(t)||Qt.hasOwnProperty(t)||we.math.hasOwnProperty(t)||we.text.hasOwnProperty(t)||Yo.hasOwnProperty(t)}isExpandable(t){var r=this.macros.get(t);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Qt.hasOwnProperty(t)&&!Qt[t].primitive}}var ms=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,jn=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),pa={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ps={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};let Go=class Vo{constructor(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new o6(t,r,this.mode),this.settings=r,this.leftrightDepth=0,this.nextToken=null}expect(t,r){if(r===void 0&&(r=!0),this.fetch().text!==t)throw new Y("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var r=this.nextToken;this.consume(),this.gullet.pushToken(new ot("}")),this.gullet.pushTokens(t);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(t,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var a=this.fetch();if(Vo.endOfExpression.has(a.text)||r&&a.text===r||t&&Qt[a.text]&&Qt[a.text].infix)break;var i=this.parseAtom(r);if(i){if(i.type==="internal")continue}else break;n.push(i)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){for(var r=-1,n,a=0;a=128)this.settings.strict&&($l(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),t)),u={type:"textord",mode:"text",loc:rt.range(t),text:r};else return null;if(this.consume(),i)for(var d=0;dc&&(c=d):d&&(c!==void 0&&c>-1&&l.push(` -`.repeat(c)||" "),c=-1,l.push(d))}return l.join("")}function ec(e,t,r){return e.type==="element"?F6(e,t,r):e.type==="text"?r.whitespace==="normal"?tc(e,r):H6(e):[]}function F6(e,t,r){const n=rc(e,r),a=e.children||[];let i=-1,u=[];if(P6(e))return u;let s,l;for(Xa(e)||ks(e)&&xs(t,e,ks)?l=` -`:M6(e)?(s=2,l=2):Zo(e)&&(s=1,l=1);++i-1&&i<=t.length){let u=0;for(;;){let s=r[u];if(s===void 0){const l=Ss(t,r[u-1]);s=l===-1?t.length+1:l+1,r[u]=s}if(s>i)return{line:u+1,column:i-(u>0?r[u-1]:0)+1,offset:i};u++}}}function a(i){if(i&&typeof i.line=="number"&&typeof i.column=="number"&&!Number.isNaN(i.line)&&!Number.isNaN(i.column)){for(;r.length1?r[i.line-2]:0)+i.column-1;if(u=55296&&e<=57343}function cp(e){return e>=56320&&e<=57343}function hp(e,t){return(e-55296)*1024+9216+t}function sc(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function lc(e){return e>=64976&&e<=65007||op.has(e)}var P;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(P||(P={}));const dp=65536;class fp{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=dp,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,r){const{line:n,col:a,offset:i}=this,u=a+r,s=i+r;return{code:t,startLine:n,endLine:n,startCol:u,endCol:u,startOffset:s,endOffset:s}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){const r=this.html.charCodeAt(this.pos+1);if(cp(r))return this.pos++,this._addGap(),hp(t,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,T.EOF;return this._err(P.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,r){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,r){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(t,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;const n=this.html.charCodeAt(r);return n===T.CARRIAGE_RETURN?T.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;let t=this.html.charCodeAt(this.pos);return t===T.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,T.LINE_FEED):t===T.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,uc(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===T.LINE_FEED||t===T.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){sc(t)?this._err(P.controlCharacterInInputStream):lc(t)&&this._err(P.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}const mp=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),pp=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function gp(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=pp.get(e))!==null&&t!==void 0?t:e}var qe;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(qe||(qe={}));const bp=32;var Kt;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(Kt||(Kt={}));function $a(e){return e>=qe.ZERO&&e<=qe.NINE}function Ep(e){return e>=qe.UPPER_A&&e<=qe.UPPER_F||e>=qe.LOWER_A&&e<=qe.LOWER_F}function Tp(e){return e>=qe.UPPER_A&&e<=qe.UPPER_Z||e>=qe.LOWER_A&&e<=qe.LOWER_Z||$a(e)}function xp(e){return e===qe.EQUALS||Tp(e)}var Ue;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(Ue||(Ue={}));var Ft;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Ft||(Ft={}));class yp{constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n,this.state=Ue.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Ft.Strict}startEntity(t){this.decodeMode=t,this.state=Ue.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,r){switch(this.state){case Ue.EntityStart:return t.charCodeAt(r)===qe.NUM?(this.state=Ue.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=Ue.NamedEntity,this.stateNamedEntity(t,r));case Ue.NumericStart:return this.stateNumericStart(t,r);case Ue.NumericDecimal:return this.stateNumericDecimal(t,r);case Ue.NumericHex:return this.stateNumericHex(t,r);case Ue.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|bp)===qe.LOWER_X?(this.state=Ue.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=Ue.NumericDecimal,this.stateNumericDecimal(t,r))}addToNumericResult(t,r,n,a){if(r!==n){const i=n-r;this.result=this.result*Math.pow(a,i)+Number.parseInt(t.substr(r,i),a),this.consumed+=i}}stateNumericHex(t,r){const n=r;for(;r>14;for(;r>14,i!==0){if(u===qe.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Ft.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;const{result:r,decodeTree:n}=this,a=(n[r]&Kt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,a,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){const{decodeTree:a}=this;return this.emitCodePoint(r===1?a[t]&~Kt.VALUE_LENGTH:a[t+1],n),r===3&&this.emitCodePoint(a[t+2],n),n}end(){var t;switch(this.state){case Ue.NamedEntity:return this.result!==0&&(this.decodeMode!==Ft.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ue.NumericDecimal:return this.emitNumericEntity(0,2);case Ue.NumericHex:return this.emitNumericEntity(0,3);case Ue.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ue.EntityStart:return 0}}}function vp(e,t,r,n){const a=(t&Kt.BRANCH_LENGTH)>>7,i=t&Kt.JUMP_TABLE;if(a===0)return i!==0&&n===i?r:-1;if(i){const l=n-i;return l<0||l>=a?-1:e[r+l]-1}let u=r,s=u+a-1;for(;u<=s;){const l=u+s>>>1,c=e[l];if(cn)s=l-1;else return e[l+a]}return-1}var H;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(H||(H={}));var mr;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(mr||(mr={}));var pt;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})(pt||(pt={}));var O;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(O||(O={}));var o;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(o||(o={}));const Ap=new Map([[O.A,o.A],[O.ADDRESS,o.ADDRESS],[O.ANNOTATION_XML,o.ANNOTATION_XML],[O.APPLET,o.APPLET],[O.AREA,o.AREA],[O.ARTICLE,o.ARTICLE],[O.ASIDE,o.ASIDE],[O.B,o.B],[O.BASE,o.BASE],[O.BASEFONT,o.BASEFONT],[O.BGSOUND,o.BGSOUND],[O.BIG,o.BIG],[O.BLOCKQUOTE,o.BLOCKQUOTE],[O.BODY,o.BODY],[O.BR,o.BR],[O.BUTTON,o.BUTTON],[O.CAPTION,o.CAPTION],[O.CENTER,o.CENTER],[O.CODE,o.CODE],[O.COL,o.COL],[O.COLGROUP,o.COLGROUP],[O.DD,o.DD],[O.DESC,o.DESC],[O.DETAILS,o.DETAILS],[O.DIALOG,o.DIALOG],[O.DIR,o.DIR],[O.DIV,o.DIV],[O.DL,o.DL],[O.DT,o.DT],[O.EM,o.EM],[O.EMBED,o.EMBED],[O.FIELDSET,o.FIELDSET],[O.FIGCAPTION,o.FIGCAPTION],[O.FIGURE,o.FIGURE],[O.FONT,o.FONT],[O.FOOTER,o.FOOTER],[O.FOREIGN_OBJECT,o.FOREIGN_OBJECT],[O.FORM,o.FORM],[O.FRAME,o.FRAME],[O.FRAMESET,o.FRAMESET],[O.H1,o.H1],[O.H2,o.H2],[O.H3,o.H3],[O.H4,o.H4],[O.H5,o.H5],[O.H6,o.H6],[O.HEAD,o.HEAD],[O.HEADER,o.HEADER],[O.HGROUP,o.HGROUP],[O.HR,o.HR],[O.HTML,o.HTML],[O.I,o.I],[O.IMG,o.IMG],[O.IMAGE,o.IMAGE],[O.INPUT,o.INPUT],[O.IFRAME,o.IFRAME],[O.KEYGEN,o.KEYGEN],[O.LABEL,o.LABEL],[O.LI,o.LI],[O.LINK,o.LINK],[O.LISTING,o.LISTING],[O.MAIN,o.MAIN],[O.MALIGNMARK,o.MALIGNMARK],[O.MARQUEE,o.MARQUEE],[O.MATH,o.MATH],[O.MENU,o.MENU],[O.META,o.META],[O.MGLYPH,o.MGLYPH],[O.MI,o.MI],[O.MO,o.MO],[O.MN,o.MN],[O.MS,o.MS],[O.MTEXT,o.MTEXT],[O.NAV,o.NAV],[O.NOBR,o.NOBR],[O.NOFRAMES,o.NOFRAMES],[O.NOEMBED,o.NOEMBED],[O.NOSCRIPT,o.NOSCRIPT],[O.OBJECT,o.OBJECT],[O.OL,o.OL],[O.OPTGROUP,o.OPTGROUP],[O.OPTION,o.OPTION],[O.P,o.P],[O.PARAM,o.PARAM],[O.PLAINTEXT,o.PLAINTEXT],[O.PRE,o.PRE],[O.RB,o.RB],[O.RP,o.RP],[O.RT,o.RT],[O.RTC,o.RTC],[O.RUBY,o.RUBY],[O.S,o.S],[O.SCRIPT,o.SCRIPT],[O.SEARCH,o.SEARCH],[O.SECTION,o.SECTION],[O.SELECT,o.SELECT],[O.SOURCE,o.SOURCE],[O.SMALL,o.SMALL],[O.SPAN,o.SPAN],[O.STRIKE,o.STRIKE],[O.STRONG,o.STRONG],[O.STYLE,o.STYLE],[O.SUB,o.SUB],[O.SUMMARY,o.SUMMARY],[O.SUP,o.SUP],[O.TABLE,o.TABLE],[O.TBODY,o.TBODY],[O.TEMPLATE,o.TEMPLATE],[O.TEXTAREA,o.TEXTAREA],[O.TFOOT,o.TFOOT],[O.TD,o.TD],[O.TH,o.TH],[O.THEAD,o.THEAD],[O.TITLE,o.TITLE],[O.TR,o.TR],[O.TRACK,o.TRACK],[O.TT,o.TT],[O.U,o.U],[O.UL,o.UL],[O.SVG,o.SVG],[O.VAR,o.VAR],[O.WBR,o.WBR],[O.XMP,o.XMP]]);function qr(e){var t;return(t=Ap.get(e))!==null&&t!==void 0?t:o.UNKNOWN}const U=o,kp={[H.HTML]:new Set([U.ADDRESS,U.APPLET,U.AREA,U.ARTICLE,U.ASIDE,U.BASE,U.BASEFONT,U.BGSOUND,U.BLOCKQUOTE,U.BODY,U.BR,U.BUTTON,U.CAPTION,U.CENTER,U.COL,U.COLGROUP,U.DD,U.DETAILS,U.DIR,U.DIV,U.DL,U.DT,U.EMBED,U.FIELDSET,U.FIGCAPTION,U.FIGURE,U.FOOTER,U.FORM,U.FRAME,U.FRAMESET,U.H1,U.H2,U.H3,U.H4,U.H5,U.H6,U.HEAD,U.HEADER,U.HGROUP,U.HR,U.HTML,U.IFRAME,U.IMG,U.INPUT,U.LI,U.LINK,U.LISTING,U.MAIN,U.MARQUEE,U.MENU,U.META,U.NAV,U.NOEMBED,U.NOFRAMES,U.NOSCRIPT,U.OBJECT,U.OL,U.P,U.PARAM,U.PLAINTEXT,U.PRE,U.SCRIPT,U.SECTION,U.SELECT,U.SOURCE,U.STYLE,U.SUMMARY,U.TABLE,U.TBODY,U.TD,U.TEMPLATE,U.TEXTAREA,U.TFOOT,U.TH,U.THEAD,U.TITLE,U.TR,U.TRACK,U.UL,U.WBR,U.XMP]),[H.MATHML]:new Set([U.MI,U.MO,U.MN,U.MS,U.MTEXT,U.ANNOTATION_XML]),[H.SVG]:new Set([U.TITLE,U.FOREIGN_OBJECT,U.DESC]),[H.XLINK]:new Set,[H.XML]:new Set,[H.XMLNS]:new Set},Qa=new Set([U.H1,U.H2,U.H3,U.H4,U.H5,U.H6]);O.STYLE,O.SCRIPT,O.XMP,O.IFRAME,O.NOEMBED,O.NOFRAMES,O.PLAINTEXT;var y;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(y||(y={}));const De={DATA:y.DATA,RCDATA:y.RCDATA,RAWTEXT:y.RAWTEXT,SCRIPT_DATA:y.SCRIPT_DATA,PLAINTEXT:y.PLAINTEXT,CDATA_SECTION:y.CDATA_SECTION};function Sp(e){return e>=T.DIGIT_0&&e<=T.DIGIT_9}function rn(e){return e>=T.LATIN_CAPITAL_A&&e<=T.LATIN_CAPITAL_Z}function wp(e){return e>=T.LATIN_SMALL_A&&e<=T.LATIN_SMALL_Z}function Xt(e){return wp(e)||rn(e)}function Cs(e){return Xt(e)||Sp(e)}function Wn(e){return e+32}function cc(e){return e===T.SPACE||e===T.LINE_FEED||e===T.TABULATION||e===T.FORM_FEED}function _s(e){return cc(e)||e===T.SOLIDUS||e===T.GREATER_THAN_SIGN}function Cp(e){return e===T.NULL?P.nullCharacterReference:e>1114111?P.characterReferenceOutsideUnicodeRange:uc(e)?P.surrogateCharacterReference:lc(e)?P.noncharacterCharacterReference:sc(e)||e===T.CARRIAGE_RETURN?P.controlCharacterReference:null}class _p{constructor(t,r){this.options=t,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=y.DATA,this.returnState=y.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new fp(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new yp(mp,(n,a)=>{this.preprocessor.pos=this.entityStartPos+a-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(P.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(P.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{const a=Cp(n);a&&this._err(a,1)}}:void 0)}_err(t,r=0){var n,a;(a=(n=this.handler).onParseError)===null||a===void 0||a.call(n,this.preprocessor.getError(t,r))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.())}write(t,r,n){this.active=!0,this.preprocessor.write(t,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let r=0;r0&&this._err(P.endTagWithAttributes),t.selfClosing&&this._err(P.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case de.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case de.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case de.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){const t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:de.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,r)}_emitCodePoint(t){const r=cc(t)?de.WHITESPACE_CHARACTER:t===T.NULL?de.NULL_CHARACTER:de.CHARACTER;this._appendCharToCurrentCharacterToken(r,String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(de.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=y.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Ft.Attribute:Ft.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===y.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case y.DATA:{this._stateData(t);break}case y.RCDATA:{this._stateRcdata(t);break}case y.RAWTEXT:{this._stateRawtext(t);break}case y.SCRIPT_DATA:{this._stateScriptData(t);break}case y.PLAINTEXT:{this._statePlaintext(t);break}case y.TAG_OPEN:{this._stateTagOpen(t);break}case y.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case y.TAG_NAME:{this._stateTagName(t);break}case y.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case y.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case y.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case y.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case y.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case y.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case y.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case y.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case y.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case y.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case y.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case y.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case y.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case y.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case y.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case y.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case y.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case y.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case y.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case y.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case y.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case y.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case y.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case y.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case y.BOGUS_COMMENT:{this._stateBogusComment(t);break}case y.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case y.COMMENT_START:{this._stateCommentStart(t);break}case y.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case y.COMMENT:{this._stateComment(t);break}case y.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case y.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case y.COMMENT_END:{this._stateCommentEnd(t);break}case y.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case y.DOCTYPE:{this._stateDoctype(t);break}case y.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case y.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case y.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case y.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case y.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case y.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case y.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case y.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case y.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case y.CDATA_SECTION:{this._stateCdataSection(t);break}case y.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case y.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case y.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case y.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.TAG_OPEN;break}case T.AMPERSAND:{this._startCharacterReference();break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitCodePoint(t);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case T.AMPERSAND:{this._startCharacterReference();break}case T.LESS_THAN_SIGN:{this.state=y.RCDATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.RAWTEXT_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.SCRIPT_DATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(Xt(t))this._createStartTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.EXCLAMATION_MARK:{this.state=y.MARKUP_DECLARATION_OPEN;break}case T.SOLIDUS:{this.state=y.END_TAG_OPEN;break}case T.QUESTION_MARK:{this._err(P.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=y.BOGUS_COMMENT,this._stateBogusComment(t);break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(P.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=y.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(Xt(t))this._createEndTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.GREATER_THAN_SIGN:{this._err(P.missingEndTagName),this.state=y.DATA;break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===T.SOLIDUS?this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Xt(t)?(this._emitChars("<"),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=y.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){Xt(t)?(this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===T.SOLIDUS?(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(et.SCRIPT,!1)&&_s(this.preprocessor.peek(et.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,r){const n=this._indexOf(t);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(t,r,n){const a=this._indexOf(t)+1;this.items.splice(a,0,r),this.tagIDs.splice(a,0,n),this.stackTop++,a===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,a===this.stackTop)}popUntilTagNamePopped(t){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(t,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==H.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(t){for(;this.stackTop>=t;){const r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(t,r){const n=this._indexOfTagNames(t,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(Lp,H.HTML)}clearBackToTableBodyContext(){this.clearBackTo(Op,H.HTML)}clearBackToTableRowContext(){this.clearBackTo(Dp,H.HTML)}remove(t){const r=this._indexOf(t);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===o.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){const r=this._indexOf(t)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===o.HTML}hasInDynamicScope(t,r){for(let n=this.stackTop;n>=0;n--){const a=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case H.HTML:{if(a===t)return!0;if(r.has(a))return!1;break}case H.SVG:{if(Ds.has(a))return!1;break}case H.MATHML:{if(Ns.has(a))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,s0)}hasInListItemScope(t){return this.hasInDynamicScope(t,Ip)}hasInButtonScope(t){return this.hasInDynamicScope(t,Np)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case H.HTML:{if(Qa.has(r))return!0;if(s0.has(r))return!1;break}case H.SVG:{if(Ds.has(r))return!1;break}case H.MATHML:{if(Ns.has(r))return!1;break}}}return!0}hasInTableScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===H.HTML)switch(this.tagIDs[t]){case o.TBODY:case o.THEAD:case o.TFOOT:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasInSelectScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.OPTION:case o.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&hc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Is.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Is.has(this.currentTagId);)this.pop()}}const ga=3;var St;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(St||(St={}));const Os={type:St.Marker};class Pp{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,r){const n=[],a=r.length,i=this.treeAdapter.getTagName(t),u=this.treeAdapter.getNamespaceURI(t);for(let s=0;s[u.name,u.value]));let i=0;for(let u=0;ua.get(l.name)===l.value)&&(i+=1,i>=ga&&this.entries.splice(s.idx,1))}}insertMarker(){this.entries.unshift(Os)}pushElement(t,r){this._ensureNoahArkCondition(t),this.entries.unshift({type:St.Element,element:t,token:r})}insertElementAfterBookmark(t,r){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:St.Element,element:t,token:r})}removeEntry(t){const r=this.entries.indexOf(t);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){const t=this.entries.indexOf(Os);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){const r=this.entries.find(n=>n.type===St.Marker||this.treeAdapter.getTagName(n.element)===t);return r&&r.type===St.Element?r:null}getElementEntry(t){return this.entries.find(r=>r.type===St.Element&&r.element===t)}}const $t={createDocument(){return{nodeName:"#document",mode:pt.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){const n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,r,n){const a=e.childNodes.find(i=>i.nodeName==="#documentType");if(a)a.name=t,a.publicId=r,a.systemId=n;else{const i={nodeName:"#documentType",name:t,publicId:r,systemId:n,parentNode:null};$t.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const r=e.childNodes[e.childNodes.length-1];if($t.isTextNode(r)){r.value+=t;return}}$t.appendChild(e,$t.createTextNode(t))},insertTextBefore(e,t,r){const n=e.childNodes[e.childNodes.indexOf(r)-1];n&&$t.isTextNode(n)?n.value+=t:$t.insertBefore(e,$t.createTextNode(t),r)},adoptAttributes(e,t){const r=new Set(e.attrs.map(n=>n.name));for(let n=0;ne.startsWith(r))}function qp(e){return e.name===dc&&e.publicId===null&&(e.systemId===null||e.systemId===Bp)}function Yp(e){if(e.name!==dc)return pt.QUIRKS;const{systemId:t}=e;if(t&&t.toLowerCase()===Fp)return pt.QUIRKS;let{publicId:r}=e;if(r!==null){if(r=r.toLowerCase(),zp.has(r))return pt.QUIRKS;let n=t===null?Hp:fc;if(Ls(r,n))return pt.QUIRKS;if(n=t===null?mc:Up,Ls(r,n))return pt.LIMITED_QUIRKS}return pt.NO_QUIRKS}const Rs={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},Gp="definitionurl",Vp="definitionURL",jp=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),Wp=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:H.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:H.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:H.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:H.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:H.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:H.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:H.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:H.XML}],["xml:space",{prefix:"xml",name:"space",namespace:H.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:H.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:H.XMLNS}]]),Xp=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),$p=new Set([o.B,o.BIG,o.BLOCKQUOTE,o.BODY,o.BR,o.CENTER,o.CODE,o.DD,o.DIV,o.DL,o.DT,o.EM,o.EMBED,o.H1,o.H2,o.H3,o.H4,o.H5,o.H6,o.HEAD,o.HR,o.I,o.IMG,o.LI,o.LISTING,o.MENU,o.META,o.NOBR,o.OL,o.P,o.PRE,o.RUBY,o.S,o.SMALL,o.SPAN,o.STRONG,o.STRIKE,o.SUB,o.SUP,o.TABLE,o.TT,o.U,o.UL,o.VAR]);function Qp(e){const t=e.tagID;return t===o.FONT&&e.attrs.some(({name:n})=>n===mr.COLOR||n===mr.SIZE||n===mr.FACE)||$p.has(t)}function pc(e){for(let t=0;t0&&this._setContextModes(t,r)}onItemPop(t,r){var n,a;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(a=(n=this.treeAdapter).onItemPop)===null||a===void 0||a.call(n,t,this.openElements.current),r){let i,u;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,u=this.fragmentContextID):{current:i,currentTagId:u}=this.openElements,this._setContextModes(i,u)}}_setContextModes(t,r){const n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===H.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,t)}_switchToTextParsing(t,r){this._insertElement(t,H.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=k.TEXT}switchToPlaintextParsing(){this.insertionMode=k.TEXT,this.originalInsertionMode=k.IN_BODY,this.tokenizer.state=De.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===O.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==H.HTML))switch(this.fragmentContextID){case o.TITLE:case o.TEXTAREA:{this.tokenizer.state=De.RCDATA;break}case o.STYLE:case o.XMP:case o.IFRAME:case o.NOEMBED:case o.NOFRAMES:case o.NOSCRIPT:{this.tokenizer.state=De.RAWTEXT;break}case o.SCRIPT:{this.tokenizer.state=De.SCRIPT_DATA;break}case o.PLAINTEXT:{this.tokenizer.state=De.PLAINTEXT;break}}}_setDocumentType(t){const r=t.name||"",n=t.publicId||"",a=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,a),t.location){const u=this.treeAdapter.getChildNodes(this.document).find(s=>this.treeAdapter.isDocumentTypeNode(s));u&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}}_attachElementToTree(t,r){if(this.options.sourceCodeLocationInfo){const n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(t,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t)}}_appendElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location)}_insertElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID)}_insertFakeElement(t,r){const n=this.treeAdapter.createElement(t,H.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(t){const r=this.treeAdapter.createElement(t.tagName,H.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,t.location),this.openElements.push(r,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const t=this.treeAdapter.createElement(O.HTML,H.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,o.HTML)}_appendCommentNode(t,r){const n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location)}_insertCharacters(t){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,t.chars,n):this.treeAdapter.insertText(r,t.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,t.chars)),!t.location)return;const a=this.treeAdapter.getChildNodes(r),i=n?a.lastIndexOf(n):a.length,u=a[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(u)){const{endLine:l,endCol:c,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(u,{endLine:l,endCol:c,endOffset:d})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}_adoptNodes(t,r){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(t,r){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&r.location){const n=r.location,a=this.treeAdapter.getTagName(t),i=r.type===de.END_TAG&&a===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,t.tagID===o.SVG&&this.treeAdapter.getTagName(r)===O.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===H.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===o.MGLYPH||t.tagID===o.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,H.HTML)}_processToken(t){switch(t.type){case de.CHARACTER:{this.onCharacter(t);break}case de.NULL_CHARACTER:{this.onNullCharacter(t);break}case de.COMMENT:{this.onComment(t);break}case de.DOCTYPE:{this.onDoctype(t);break}case de.START_TAG:{this._processStartTag(t);break}case de.END_TAG:{this.onEndTag(t);break}case de.EOF:{this.onEof(t);break}case de.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,r,n){const a=this.treeAdapter.getNamespaceURI(r),i=this.treeAdapter.getAttrList(r);return e5(t,a,i,n)}_reconstructActiveFormattingElements(){const t=this.activeFormattingElements.entries.length;if(t){const r=this.activeFormattingElements.entries.findIndex(a=>a.type===St.Marker||this.openElements.contains(a.element)),n=r===-1?t-1:r-1;for(let a=n;a>=0;a--){const i=this.activeFormattingElements.entries[a];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=k.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(o.P),this.openElements.popUntilTagNamePopped(o.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case o.TR:{this.insertionMode=k.IN_ROW;return}case o.TBODY:case o.THEAD:case o.TFOOT:{this.insertionMode=k.IN_TABLE_BODY;return}case o.CAPTION:{this.insertionMode=k.IN_CAPTION;return}case o.COLGROUP:{this.insertionMode=k.IN_COLUMN_GROUP;return}case o.TABLE:{this.insertionMode=k.IN_TABLE;return}case o.BODY:{this.insertionMode=k.IN_BODY;return}case o.FRAMESET:{this.insertionMode=k.IN_FRAMESET;return}case o.SELECT:{this._resetInsertionModeForSelect(t);return}case o.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case o.HTML:{this.insertionMode=this.headElement?k.AFTER_HEAD:k.BEFORE_HEAD;return}case o.TD:case o.TH:{if(t>0){this.insertionMode=k.IN_CELL;return}break}case o.HEAD:{if(t>0){this.insertionMode=k.IN_HEAD;return}break}}this.insertionMode=k.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let r=t-1;r>0;r--){const n=this.openElements.tagIDs[r];if(n===o.TEMPLATE)break;if(n===o.TABLE){this.insertionMode=k.IN_SELECT_IN_TABLE;return}}this.insertionMode=k.IN_SELECT}_isElementCausesFosterParenting(t){return bc.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){const r=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case o.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===H.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case o.TABLE:{const n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){const r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,t,r.beforeElement):this.treeAdapter.appendChild(r.parent,t)}_isSpecialElement(t,r){const n=this.treeAdapter.getNamespaceURI(t);return kp[n].has(r)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){R7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:{Tc(this,t);break}case k.TEXT:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{Sc(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){L7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.TEXT:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){Ka(this,t);return}switch(this.insertionMode){case k.INITIAL:case k.BEFORE_HTML:case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_TEMPLATE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{Ka(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.AFTER_BODY:{h5(this,t);break}case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{d5(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case k.INITIAL:{f5(this,t);break}case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:{this._err(t,P.misplacedDoctype);break}case k.IN_TABLE_TEXT:{en(this,t);break}}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,P.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?M7(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{m5(this,t);break}case k.BEFORE_HEAD:{g5(this,t);break}case k.IN_HEAD:{yt(this,t);break}case k.IN_HEAD_NO_SCRIPT:{T5(this,t);break}case k.AFTER_HEAD:{y5(this,t);break}case k.IN_BODY:{We(this,t);break}case k.IN_TABLE:{Rr(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{b7(this,t);break}case k.IN_COLUMN_GROUP:{Bi(this,t);break}case k.IN_TABLE_BODY:{O0(this,t);break}case k.IN_ROW:{L0(this,t);break}case k.IN_CELL:{x7(this,t);break}case k.IN_SELECT:{_c(this,t);break}case k.IN_SELECT_IN_TABLE:{v7(this,t);break}case k.IN_TEMPLATE:{k7(this,t);break}case k.AFTER_BODY:{w7(this,t);break}case k.IN_FRAMESET:{C7(this,t);break}case k.AFTER_FRAMESET:{I7(this,t);break}case k.AFTER_AFTER_BODY:{D7(this,t);break}case k.AFTER_AFTER_FRAMESET:{O7(this,t);break}}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?P7(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{p5(this,t);break}case k.BEFORE_HEAD:{b5(this,t);break}case k.IN_HEAD:{E5(this,t);break}case k.IN_HEAD_NO_SCRIPT:{x5(this,t);break}case k.AFTER_HEAD:{v5(this,t);break}case k.IN_BODY:{D0(this,t);break}case k.TEXT:{s7(this,t);break}case k.IN_TABLE:{En(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{E7(this,t);break}case k.IN_COLUMN_GROUP:{T7(this,t);break}case k.IN_TABLE_BODY:{Ja(this,t);break}case k.IN_ROW:{Cc(this,t);break}case k.IN_CELL:{y7(this,t);break}case k.IN_SELECT:{Ic(this,t);break}case k.IN_SELECT_IN_TABLE:{A7(this,t);break}case k.IN_TEMPLATE:{S7(this,t);break}case k.AFTER_BODY:{Dc(this,t);break}case k.IN_FRAMESET:{_7(this,t);break}case k.AFTER_FRAMESET:{N7(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onEof(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{Ac(this,t);break}case k.TEXT:{l7(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_TEMPLATE:{Nc(this,t);break}case k.AFTER_BODY:case k.IN_FRAMESET:case k.AFTER_FRAMESET:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Pi(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===T.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.TEXT:case k.IN_COLUMN_GROUP:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{this._insertCharacters(t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:case k.AFTER_BODY:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Ec(this,t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{kc(this,t);break}}}}function i5(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):vc(e,t),r}function u5(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){const a=e.openElements.items[n];if(a===t.element)break;e._isSpecialElement(a,e.openElements.tagIDs[n])&&(r=a)}return r||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),r}function s5(e,t,r){let n=t,a=e.openElements.getCommonAncestor(t);for(let i=0,u=a;u!==r;i++,u=a){a=e.openElements.getCommonAncestor(u);const s=e.activeFormattingElements.getElementEntry(u),l=s&&i>=n5;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(u)):(u=l5(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(u,n),n=u)}return n}function l5(e,t){const r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function o5(e,t,r){const n=e.treeAdapter.getTagName(t),a=qr(n);if(e._isElementCausesFosterParenting(a))e._fosterParentElement(r);else{const i=e.treeAdapter.getNamespaceURI(t);a===o.TEMPLATE&&i===H.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function c5(e,t,r){const n=e.treeAdapter.getNamespaceURI(r.element),{token:a}=r,i=e.treeAdapter.createElement(a.tagName,n,a.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,a),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,i,a.tagID)}function Mi(e,t){for(let r=0;r=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],a=e.treeAdapter.getNodeSourceCodeLocation(n);if(a&&!a.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const i=e.openElements.items[1],u=e.treeAdapter.getNodeSourceCodeLocation(i);u&&!u.endTag&&e._setEndLocation(i,t)}}}}function f5(e,t){e._setDocumentType(t);const r=t.forceQuirks?pt.QUIRKS:Yp(t);qp(t)||e._err(t,P.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=k.BEFORE_HTML}function Zr(e,t){e._err(t,P.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,pt.QUIRKS),e.insertionMode=k.BEFORE_HTML,e._processToken(t)}function m5(e,t){t.tagID===o.HTML?(e._insertElement(t,H.HTML),e.insertionMode=k.BEFORE_HEAD):ln(e,t)}function p5(e,t){const r=t.tagID;(r===o.HTML||r===o.HEAD||r===o.BODY||r===o.BR)&&ln(e,t)}function ln(e,t){e._insertFakeRootElement(),e.insertionMode=k.BEFORE_HEAD,e._processToken(t)}function g5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.HEAD:{e._insertElement(t,H.HTML),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD;break}default:on(e,t)}}function b5(e,t){const r=t.tagID;r===o.HEAD||r===o.BODY||r===o.HTML||r===o.BR?on(e,t):e._err(t,P.endTagWithoutMatchingOpenElement)}function on(e,t){e._insertFakeElement(O.HEAD,o.HEAD),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD,e._processToken(t)}function yt(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.TITLE:{e._switchToTextParsing(t,De.RCDATA);break}case o.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,De.RAWTEXT):(e._insertElement(t,H.HTML),e.insertionMode=k.IN_HEAD_NO_SCRIPT);break}case o.NOFRAMES:case o.STYLE:{e._switchToTextParsing(t,De.RAWTEXT);break}case o.SCRIPT:{e._switchToTextParsing(t,De.SCRIPT_DATA);break}case o.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=k.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(k.IN_TEMPLATE);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:cn(e,t)}}function E5(e,t){switch(t.tagID){case o.HEAD:{e.openElements.pop(),e.insertionMode=k.AFTER_HEAD;break}case o.BODY:case o.BR:case o.HTML:{cn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function Tr(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==o.TEMPLATE&&e._err(t,P.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,P.endTagWithoutMatchingOpenElement)}function cn(e,t){e.openElements.pop(),e.insertionMode=k.AFTER_HEAD,e._processToken(t)}function T5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASEFONT:case o.BGSOUND:case o.HEAD:case o.LINK:case o.META:case o.NOFRAMES:case o.STYLE:{yt(e,t);break}case o.NOSCRIPT:{e._err(t,P.nestedNoscriptInHead);break}default:hn(e,t)}}function x5(e,t){switch(t.tagID){case o.NOSCRIPT:{e.openElements.pop(),e.insertionMode=k.IN_HEAD;break}case o.BR:{hn(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function hn(e,t){const r=t.type===de.EOF?P.openElementsLeftAfterEof:P.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=k.IN_HEAD,e._processToken(t)}function y5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BODY:{e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_BODY;break}case o.FRAMESET:{e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET;break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{e._err(t,P.abandonedHeadElementChild),e.openElements.push(e.headElement,o.HEAD),yt(e,t),e.openElements.remove(e.headElement);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:dn(e,t)}}function v5(e,t){switch(t.tagID){case o.BODY:case o.HTML:case o.BR:{dn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function dn(e,t){e._insertFakeElement(O.BODY,o.BODY),e.insertionMode=k.IN_BODY,N0(e,t)}function N0(e,t){switch(t.type){case de.CHARACTER:{Tc(e,t);break}case de.WHITESPACE_CHARACTER:{Ec(e,t);break}case de.COMMENT:{Ka(e,t);break}case de.START_TAG:{We(e,t);break}case de.END_TAG:{D0(e,t);break}case de.EOF:{Ac(e,t);break}}}function Ec(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function Tc(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function A5(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function k5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}function S5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET)}function w5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function C5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&Qa.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,H.HTML)}function _5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function I5(e,t){const r=e.openElements.tmplCount>0;(!e.formElement||r)&&(e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),r||(e.formElement=e.openElements.current))}function N5(e,t){e.framesetOk=!1;const r=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){const a=e.openElements.tagIDs[n];if(r===o.LI&&a===o.LI||(r===o.DD||r===o.DT)&&(a===o.DD||a===o.DT)){e.openElements.generateImpliedEndTagsWithExclusion(a),e.openElements.popUntilTagNamePopped(a);break}if(a!==o.ADDRESS&&a!==o.DIV&&a!==o.P&&e._isSpecialElement(e.openElements.items[n],a))break}e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function D5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.tokenizer.state=De.PLAINTEXT}function O5(e,t){e.openElements.hasInScope(o.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1}function L5(e,t){const r=e.activeFormattingElements.getElementEntryInScopeWithTagName(O.A);r&&(Mi(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function R5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function M5(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(o.NOBR)&&(Mi(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function P5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function B5(e,t){e.treeAdapter.getDocumentMode(e.document)!==pt.QUIRKS&&e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_TABLE}function xc(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function yc(e){const t=oc(e,mr.TYPE);return t!=null&&t.toLowerCase()===t5}function F5(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),yc(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function H5(e,t){e._appendElement(t,H.HTML),t.ackSelfClosing=!0}function z5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function U5(e,t){t.tagName=O.IMG,t.tagID=o.IMG,xc(e,t)}function q5(e,t){e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.tokenizer.state=De.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=k.TEXT}function Y5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function G5(e,t){e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function Bs(e,t){e._switchToTextParsing(t,De.RAWTEXT)}function V5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===k.IN_TABLE||e.insertionMode===k.IN_CAPTION||e.insertionMode===k.IN_TABLE_BODY||e.insertionMode===k.IN_ROW||e.insertionMode===k.IN_CELL?k.IN_SELECT_IN_TABLE:k.IN_SELECT}function j5(e,t){e.openElements.currentTagId===o.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function W5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,H.HTML)}function X5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(o.RTC),e._insertElement(t,H.HTML)}function $5(e,t){e._reconstructActiveFormattingElements(),pc(t),Ri(t),t.selfClosing?e._appendElement(t,H.MATHML):e._insertElement(t,H.MATHML),t.ackSelfClosing=!0}function Q5(e,t){e._reconstructActiveFormattingElements(),gc(t),Ri(t),t.selfClosing?e._appendElement(t,H.SVG):e._insertElement(t,H.SVG),t.ackSelfClosing=!0}function Fs(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function We(e,t){switch(t.tagID){case o.I:case o.S:case o.B:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.SMALL:case o.STRIKE:case o.STRONG:{R5(e,t);break}case o.A:{L5(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{C5(e,t);break}case o.P:case o.DL:case o.OL:case o.UL:case o.DIV:case o.DIR:case o.NAV:case o.MAIN:case o.MENU:case o.ASIDE:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.DETAILS:case o.ADDRESS:case o.ARTICLE:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{w5(e,t);break}case o.LI:case o.DD:case o.DT:{N5(e,t);break}case o.BR:case o.IMG:case o.WBR:case o.AREA:case o.EMBED:case o.KEYGEN:{xc(e,t);break}case o.HR:{z5(e,t);break}case o.RB:case o.RTC:{W5(e,t);break}case o.RT:case o.RP:{X5(e,t);break}case o.PRE:case o.LISTING:{_5(e,t);break}case o.XMP:{Y5(e,t);break}case o.SVG:{Q5(e,t);break}case o.HTML:{A5(e,t);break}case o.BASE:case o.LINK:case o.META:case o.STYLE:case o.TITLE:case o.SCRIPT:case o.BGSOUND:case o.BASEFONT:case o.TEMPLATE:{yt(e,t);break}case o.BODY:{k5(e,t);break}case o.FORM:{I5(e,t);break}case o.NOBR:{M5(e,t);break}case o.MATH:{$5(e,t);break}case o.TABLE:{B5(e,t);break}case o.INPUT:{F5(e,t);break}case o.PARAM:case o.TRACK:case o.SOURCE:{H5(e,t);break}case o.IMAGE:{U5(e,t);break}case o.BUTTON:{O5(e,t);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{P5(e,t);break}case o.IFRAME:{G5(e,t);break}case o.SELECT:{V5(e,t);break}case o.OPTION:case o.OPTGROUP:{j5(e,t);break}case o.NOEMBED:case o.NOFRAMES:{Bs(e,t);break}case o.FRAMESET:{S5(e,t);break}case o.TEXTAREA:{q5(e,t);break}case o.NOSCRIPT:{e.options.scriptingEnabled?Bs(e,t):Fs(e,t);break}case o.PLAINTEXT:{D5(e,t);break}case o.COL:case o.TH:case o.TD:case o.TR:case o.HEAD:case o.FRAME:case o.TBODY:case o.TFOOT:case o.THEAD:case o.CAPTION:case o.COLGROUP:break;default:Fs(e,t)}}function K5(e,t){if(e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,e.options.sourceCodeLocationInfo)){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}function J5(e,t){e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,Dc(e,t))}function Z5(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function e7(e){const t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(o.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(o.FORM):r&&e.openElements.remove(r))}function t7(e){e.openElements.hasInButtonScope(o.P)||e._insertFakeElement(O.P,o.P),e._closePElement()}function r7(e){e.openElements.hasInListItemScope(o.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(o.LI),e.openElements.popUntilTagNamePopped(o.LI))}function n7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}function a7(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function i7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function u7(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(O.BR,o.BR),e.openElements.pop(),e.framesetOk=!1}function vc(e,t){const r=t.tagName,n=t.tagID;for(let a=e.openElements.stackTop;a>0;a--){const i=e.openElements.items[a],u=e.openElements.tagIDs[a];if(n===u&&(n!==o.UNKNOWN||e.treeAdapter.getTagName(i)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=a&&e.openElements.shortenToLength(a);break}if(e._isSpecialElement(i,u))break}}function D0(e,t){switch(t.tagID){case o.A:case o.B:case o.I:case o.S:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.NOBR:case o.SMALL:case o.STRIKE:case o.STRONG:{Mi(e,t);break}case o.P:{t7(e);break}case o.DL:case o.UL:case o.OL:case o.DIR:case o.DIV:case o.NAV:case o.PRE:case o.MAIN:case o.MENU:case o.ASIDE:case o.BUTTON:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.ADDRESS:case o.ARTICLE:case o.DETAILS:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.LISTING:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{Z5(e,t);break}case o.LI:{r7(e);break}case o.DD:case o.DT:{n7(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{a7(e);break}case o.BR:{u7(e);break}case o.BODY:{K5(e,t);break}case o.HTML:{J5(e,t);break}case o.FORM:{e7(e);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{i7(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:vc(e,t)}}function Ac(e,t){e.tmplInsertionModeStack.length>0?Nc(e,t):Pi(e,t)}function s7(e,t){var r;t.tagID===o.SCRIPT&&((r=e.scriptHandler)===null||r===void 0||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function l7(e,t){e._err(t,P.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function ba(e,t){if(e.openElements.currentTagId!==void 0&&bc.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=k.IN_TABLE_TEXT,t.type){case de.CHARACTER:{Sc(e,t);break}case de.WHITESPACE_CHARACTER:{kc(e,t);break}}else wn(e,t)}function o7(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_CAPTION}function c7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_COLUMN_GROUP}function h7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.COLGROUP,o.COLGROUP),e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t)}function d7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_TABLE_BODY}function f7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.TBODY,o.TBODY),e.insertionMode=k.IN_TABLE_BODY,O0(e,t)}function m7(e,t){e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function p7(e,t){yc(t)?e._appendElement(t,H.HTML):wn(e,t),t.ackSelfClosing=!0}function g7(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,H.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Rr(e,t){switch(t.tagID){case o.TD:case o.TH:case o.TR:{f7(e,t);break}case o.STYLE:case o.SCRIPT:case o.TEMPLATE:{yt(e,t);break}case o.COL:{h7(e,t);break}case o.FORM:{g7(e,t);break}case o.TABLE:{m7(e,t);break}case o.TBODY:case o.TFOOT:case o.THEAD:{d7(e,t);break}case o.INPUT:{p7(e,t);break}case o.CAPTION:{o7(e,t);break}case o.COLGROUP:{c7(e,t);break}default:wn(e,t)}}function En(e,t){switch(t.tagID){case o.TABLE:{e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}case o.BODY:case o.CAPTION:case o.COL:case o.COLGROUP:case o.HTML:case o.TBODY:case o.TD:case o.TFOOT:case o.TH:case o.THEAD:case o.TR:break;default:wn(e,t)}}function wn(e,t){const r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,N0(e,t),e.fosterParentingEnabled=r}function kc(e,t){e.pendingCharacterTokens.push(t)}function Sc(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function en(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r0&&e.openElements.currentTagId===o.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===o.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===o.OPTGROUP&&e.openElements.pop();break}case o.OPTION:{e.openElements.currentTagId===o.OPTION&&e.openElements.pop();break}case o.SELECT:{e.openElements.hasInSelectScope(o.SELECT)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}}}function v7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e._processStartTag(t)):_c(e,t)}function A7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Ic(e,t)}function k7(e,t){switch(t.tagID){case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{yt(e,t);break}case o.CAPTION:case o.COLGROUP:case o.TBODY:case o.TFOOT:case o.THEAD:{e.tmplInsertionModeStack[0]=k.IN_TABLE,e.insertionMode=k.IN_TABLE,Rr(e,t);break}case o.COL:{e.tmplInsertionModeStack[0]=k.IN_COLUMN_GROUP,e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t);break}case o.TR:{e.tmplInsertionModeStack[0]=k.IN_TABLE_BODY,e.insertionMode=k.IN_TABLE_BODY,O0(e,t);break}case o.TD:case o.TH:{e.tmplInsertionModeStack[0]=k.IN_ROW,e.insertionMode=k.IN_ROW,L0(e,t);break}default:e.tmplInsertionModeStack[0]=k.IN_BODY,e.insertionMode=k.IN_BODY,We(e,t)}}function S7(e,t){t.tagID===o.TEMPLATE&&Tr(e,t)}function Nc(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Pi(e,t)}function w7(e,t){t.tagID===o.HTML?We(e,t):o0(e,t)}function Dc(e,t){var r;if(t.tagID===o.HTML){if(e.fragmentContext||(e.insertionMode=k.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===o.HTML){e._setEndLocation(e.openElements.items[0],t);const n=e.openElements.items[1];n&&!(!((r=e.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&e._setEndLocation(n,t)}}else o0(e,t)}function o0(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function C7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.FRAMESET:{e._insertElement(t,H.HTML);break}case o.FRAME:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.NOFRAMES:{yt(e,t);break}}}function _7(e,t){t.tagID===o.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==o.FRAMESET&&(e.insertionMode=k.AFTER_FRAMESET))}function I7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function N7(e,t){t.tagID===o.HTML&&(e.insertionMode=k.AFTER_AFTER_FRAMESET)}function D7(e,t){t.tagID===o.HTML?We(e,t):Jn(e,t)}function Jn(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function O7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function L7(e,t){t.chars=Se,e._insertCharacters(t)}function R7(e,t){e._insertCharacters(t),e.framesetOk=!1}function Oc(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==H.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function M7(e,t){if(Qp(t))Oc(e),e._startTagOutsideForeignContent(t);else{const r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===H.MATHML?pc(t):n===H.SVG&&(Kp(t),gc(t)),Ri(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}function P7(e,t){if(t.tagID===o.P||t.tagID===o.BR){Oc(e),e._endTagOutsideForeignContent(t);return}for(let r=e.openElements.stackTop;r>0;r--){const n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===H.HTML){e._endTagOutsideForeignContent(t);break}const a=e.treeAdapter.getTagName(n);if(a.toLowerCase()===t.tagName){t.tagName=a,e.openElements.shortenToLength(r);break}}}O.AREA,O.BASE,O.BASEFONT,O.BGSOUND,O.BR,O.COL,O.EMBED,O.FRAME,O.HR,O.IMG,O.INPUT,O.KEYGEN,O.LINK,O.META,O.PARAM,O.SOURCE,O.TRACK,O.WBR;const B7=/<(\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\t\n\f\r />])/gi,F7=new Set(["mdxFlowExpression","mdxJsxFlowElement","mdxJsxTextElement","mdxTextExpression","mdxjsEsm"]),Hs={sourceCodeLocationInfo:!0,scriptingEnabled:!1};function Lc(e,t){const r=X7(e),n=_l("type",{handlers:{root:H7,element:z7,text:U7,comment:Mc,doctype:q7,raw:G7},unknown:V7}),a={parser:r?new Ps(Hs):Ps.getFragmentParser(void 0,Hs),handle(s){n(s,a)},stitches:!1,options:t||{}};n(e,a),Yr(a,_t());const i=r?a.parser.document:a.parser.getFragment(),u=$6(i,{file:a.options.file});return a.stitches&&b0(u,"comment",function(s,l,c){const d=s;if(d.value.stitch&&c&&l!==void 0){const f=c.children;return f[l]=d.value.stitch,l}}),u.type==="root"&&u.children.length===1&&u.children[0].type===e.type?u.children[0]:u}function Rc(e,t){let r=-1;if(e)for(;++r4&&(t.parser.tokenizer.state=0);const r={type:de.CHARACTER,chars:e.value,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function q7(e,t){const r={type:de.DOCTYPE,name:"html",forceQuirks:!1,publicId:"",systemId:"",location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function Y7(e,t){t.stitches=!0;const r=$7(e);if("children"in e&&"children"in r){const n=Lc({type:"root",children:e.children},t.options);r.children=n.children}Mc({type:"comment",value:{stitch:r}},t)}function Mc(e,t){const r=e.value,n={type:de.COMMENT,data:r,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function G7(e,t){if(t.parser.tokenizer.preprocessor.html="",t.parser.tokenizer.preprocessor.pos=-1,t.parser.tokenizer.preprocessor.lastGapPos=-2,t.parser.tokenizer.preprocessor.gapStack=[],t.parser.tokenizer.preprocessor.skipNextNewLine=!1,t.parser.tokenizer.preprocessor.lastChunkWritten=!1,t.parser.tokenizer.preprocessor.endOfChunkHit=!1,t.parser.tokenizer.preprocessor.isEol=!1,Pc(t,_t(e)),t.parser.tokenizer.write(t.options.tagfilter?e.value.replace(B7,"<$1$2"):e.value,!1),t.parser.tokenizer._runParsingLoop(),t.parser.tokenizer.state===72||t.parser.tokenizer.state===78){t.parser.tokenizer.preprocessor.lastChunkWritten=!0;const r=t.parser.tokenizer._consume();t.parser.tokenizer._callState(r)}}function V7(e,t){const r=e;if(t.options.passThrough&&t.options.passThrough.includes(r.type))Y7(r,t);else{let n="";throw F7.has(r.type)&&(n=". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax"),new Error("Cannot compile `"+r.type+"` node"+n)}}function Yr(e,t){Pc(e,t);const r=e.parser.tokenizer.currentCharacterToken;r&&r.location&&(r.location.endLine=e.parser.tokenizer.preprocessor.line,r.location.endCol=e.parser.tokenizer.preprocessor.col+1,r.location.endOffset=e.parser.tokenizer.preprocessor.offset+1,e.parser.currentToken=r,e.parser._processToken(e.parser.currentToken)),e.parser.tokenizer.paused=!1,e.parser.tokenizer.inLoop=!1,e.parser.tokenizer.active=!1,e.parser.tokenizer.returnState=De.DATA,e.parser.tokenizer.charRefCode=-1,e.parser.tokenizer.consumedAfterSnapshot=-1,e.parser.tokenizer.currentLocation=null,e.parser.tokenizer.currentCharacterToken=null,e.parser.tokenizer.currentToken=null,e.parser.tokenizer.currentAttr={name:"",value:""}}function Pc(e,t){if(t&&t.offset!==void 0){const r={startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:-1,endCol:-1,endOffset:-1};e.parser.tokenizer.preprocessor.lineStartPos=-t.column+1,e.parser.tokenizer.preprocessor.droppedBufferSize=t.offset,e.parser.tokenizer.preprocessor.line=t.line,e.parser.tokenizer.currentLocation=r}}function j7(e,t){const r=e.tagName.toLowerCase();if(t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,_t(e));const n=t.parser.openElements.current;let a="namespaceURI"in n?n.namespaceURI:Ct.html;a===Ct.html&&r==="svg"&&(a=Ct.svg);const i=ep({...e,children:[]},{space:a===Ct.svg?"svg":"html"}),u={type:de.START_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:"attrs"in i?i.attrs:[],location:Cn(e)};t.parser.currentToken=u,t.parser._processToken(t.parser.currentToken),t.parser.tokenizer.lastStartTagName=r}function W7(e,t){const r=e.tagName.toLowerCase();if(!t.parser.tokenizer.inForeignNode&&lp.includes(r)||t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,d0(e));const n={type:de.END_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:[],location:Cn(e)};t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken),r===t.parser.tokenizer.lastStartTagName&&(t.parser.tokenizer.state===De.RCDATA||t.parser.tokenizer.state===De.RAWTEXT||t.parser.tokenizer.state===De.SCRIPT_DATA)&&(t.parser.tokenizer.state=De.DATA)}function X7(e){const t=e.type==="root"?e.children[0]:e;return!!(t&&(t.type==="doctype"||t.type==="element"&&t.tagName.toLowerCase()==="html"))}function Cn(e){const t=_t(e)||{line:void 0,column:void 0,offset:void 0},r=d0(e)||{line:void 0,column:void 0,offset:void 0};return{startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:r.line,endCol:r.column,endOffset:r.offset}}function $7(e){return"children"in e?Nr({...e,children:[]}):Nr(e)}function Q7(e){return function(t,r){return Lc(t,{...e,file:r})}}function c0(e){return typeof e=="string"?e:typeof e=="number"?String(e):e?Array.isArray(e)?e.map(c0).join(""):typeof e=="object"&&"props"in e?c0(e.props.children):"":""}function K7(e){return e.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function Sr(e){return function({children:r,...n}){const a=c0(r),i=n.id||K7(a);return pe.jsx(e,{...n,id:i,children:r})}}const J7={h1:Sr("h1"),h2:Sr("h2"),h3:Sr("h3"),h4:Sr("h4"),h5:Sr("h5"),h6:Sr("h6")};function a8(){const{id:e}=Bc(),t=zc.find(d=>d.id===e),[r,n]=Xr.useState(""),[a,i]=Xr.useState(null),[u,s]=Xr.useState(null);Xr.useEffect(()=>{if(!t)return;const d=new AbortController,f=t.filename;return fetch(`/blog/${f}`,{signal:d.signal}).then(g=>{if(!g.ok)throw new Error("Failed to load post");return g.text()}).then(g=>{const p=g.replace(/^\s*#[^#\n]*\r?\n/,"");n(p),i(f),s(null)}).catch(g=>{g instanceof DOMException&&g.name==="AbortError"||(console.error(g),i(f),s(f))}),()=>d.abort()},[t]);const l=!!(t&&a!==t.filename),c=!!(t&&u===t.filename);return Xr.useEffect(()=>{function d(f){const p=f.target.closest("a");if(!p)return;const x=p.getAttribute("href");if(!x||!x.startsWith("#"))return;f.preventDefault();const S=document.getElementById(x.slice(1));S&&(S.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",x))}return document.addEventListener("click",d),()=>document.removeEventListener("click",d)},[]),t?pe.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[pe.jsx(Fc,{title:`${t.title} - QECTOR Blog`,description:t.description}),pe.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[pe.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),pe.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),pe.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[pe.jsxs(P0,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[pe.jsx(Uc,{size:18,className:"mr-2"}),"Back to All Articles"]}),pe.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[pe.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[pe.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[pe.jsx(qc,{size:16,className:"mr-2"}),t.date]}),pe.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:t.category}),pe.jsxs("span",{className:"text-sm text-slate-400",children:["By ",pe.jsx(P0,{to:"/guillaume-lessard",className:"hover:text-cyan-300",children:"Guillaume Lessard"}),r?` · ${Math.max(1,Math.round(r.split(/\s+/).length/220))} min read`:""]})]}),pe.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:t.title}),pe.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:t.description})]}),pe.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:l?pe.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[pe.jsx(Yc,{size:48,className:"animate-spin text-cyan-400 mb-4"}),pe.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):c?pe.jsx("div",{className:"py-20 text-center text-red-400",children:pe.jsx("p",{children:"Failed to load the article. Please try again later."})}):pe.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:pe.jsx(Qf,{remarkPlugins:[l4,g6],rehypePlugins:[j6,Q7],components:{...J7,table:d=>{const{node:f,...g}=d;return pe.jsx("div",{className:"overflow-x-auto",children:pe.jsx("table",{...g})})},pre:d=>{const{children:f}=d,g=Fi.Children.toArray(f)[0];let p="",x="text";if(Fi.isValidElement(g)){const S=g.props,D=/language-([\w-]+)/.exec(S.className||"");D&&(x=D[1]),p=c0(S.children).replace(/\n$/,"")}return pe.jsx(Hc,{code:p,language:x,className:"not-prose"})},img:d=>{const f=d.width!=null&&d.height!=null;return pe.jsx("img",{...d,className:f?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:r})})})]})]})]}):pe.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:pe.jsxs("div",{className:"text-center",children:[pe.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),pe.jsx(P0,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{a8 as default}; diff --git a/assets/BlogPost-ySdCElmM.js b/assets/BlogPost-ySdCElmM.js deleted file mode 100644 index fc5d91da..00000000 --- a/assets/BlogPost-ySdCElmM.js +++ /dev/null @@ -1,292 +0,0 @@ -import{g as zs,j as pe,r as Xr,R as Fi}from"./vendor-react-BiHfrq0e.js";import{b as Bc,L as P0,S as Fc,C as Hc}from"./index-PdoH5kLF.js";import{b as zc}from"./blogData-OjR2ZtNr.js";import{m as Uc,k as qc,n as Yc}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function Hi(e){const t=[],r=String(e||"");let n=r.indexOf(","),a=0,i=!1;for(;!i;){n===-1&&(n=r.length,i=!0);const u=r.slice(a,n).trim();(u||!i)&&t.push(u),a=n+1,n=r.indexOf(",",a)}return t}function Us(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const Gc=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Vc=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,jc={};function zi(e,t){return(jc.jsx?Vc:Gc).test(e)}const Wc=/[ \t\n\f\r]/g;function Xc(e){return typeof e=="object"?e.type==="text"?Ui(e.value):!1:Ui(e)}function Ui(e){return e.replace(Wc,"")===""}class Tn{constructor(t,r,n){this.normal=r,this.property=t,n&&(this.space=n)}}Tn.prototype.normal={};Tn.prototype.property={};Tn.prototype.space=void 0;function qs(e,t){const r={},n={};for(const a of e)Object.assign(r,a.property),Object.assign(n,a.normal);return new Tn(r,n,t)}function fn(e){return e.toLowerCase()}class nt{constructor(t,r){this.attribute=r,this.property=t}}nt.prototype.attribute="";nt.prototype.booleanish=!1;nt.prototype.boolean=!1;nt.prototype.commaOrSpaceSeparated=!1;nt.prototype.commaSeparated=!1;nt.prototype.defined=!1;nt.prototype.mustUseProperty=!1;nt.prototype.number=!1;nt.prototype.overloadedBoolean=!1;nt.prototype.property="";nt.prototype.spaceSeparated=!1;nt.prototype.space=void 0;let $c=0;const le=gr(),Le=gr(),Ea=gr(),q=gr(),ye=gr(),fr=gr(),st=gr();function gr(){return 2**++$c}const Ta=Object.freeze(Object.defineProperty({__proto__:null,boolean:le,booleanish:Le,commaOrSpaceSeparated:st,commaSeparated:fr,number:q,overloadedBoolean:Ea,spaceSeparated:ye},Symbol.toStringTag,{value:"Module"})),B0=Object.keys(Ta);class Za extends nt{constructor(t,r,n,a){let i=-1;if(super(t,r),qi(this,"space",a),typeof n=="number")for(;++i4&&r.slice(0,4)==="data"&&e1.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(Yi,r1);n="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!Yi.test(i)){let u=i.replace(Zc,t1);u.charAt(0)!=="-"&&(u="-"+u),t="data"+u}}a=Za}return new a(n,t)}function t1(e){return"-"+e.toLowerCase()}function r1(e){return e.charAt(1).toUpperCase()}const xn=qs([Ys,Qc,js,Ws,Xs],"html"),rr=qs([Ys,Kc,js,Ws,Xs],"svg");function Gi(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function $s(e){return e.join(" ").trim()}var Ar={},F0,Vi;function n1(){if(Vi)return F0;Vi=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,n=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,i=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,s=/^\s+|\s+$/g,l=` -`,c="/",d="*",f="",g="comment",p="declaration";function x(D,_){if(typeof D!="string")throw new TypeError("First argument must be a string");if(!D)return[];_=_||{};var N=1,M=1;function W(ne){var X=ne.match(t);X&&(N+=X.length);var me=ne.lastIndexOf(l);M=~me?ne.length-me:M+ne.length}function j(){var ne={line:N,column:M};return function(X){return X.position=new L(ne),K(),X}}function L(ne){this.start=ne,this.end={line:N,column:M},this.source=_.source}L.prototype.content=D;function ee(ne){var X=new Error(_.source+":"+N+":"+M+": "+ne);if(X.reason=ne,X.filename=_.source,X.line=N,X.column=M,X.source=D,!_.silent)throw X}function re(ne){var X=ne.exec(D);if(X){var me=X[0];return W(me),D=D.slice(me.length),X}}function K(){re(r)}function R(ne){var X;for(ne=ne||[];X=J();)X!==!1&&ne.push(X);return ne}function J(){var ne=j();if(!(c!=D.charAt(0)||d!=D.charAt(1))){for(var X=2;f!=D.charAt(X)&&(d!=D.charAt(X)||c!=D.charAt(X+1));)++X;if(X+=2,f===D.charAt(X-1))return ee("End of comment missing");var me=D.slice(2,X-2);return M+=2,W(me),D=D.slice(X),M+=2,ne({type:g,comment:me})}}function Q(){var ne=j(),X=re(n);if(X){if(J(),!re(a))return ee("property missing ':'");var me=re(i),ke=ne({type:p,property:S(X[0].replace(e,f)),value:me?S(me[0].replace(e,f)):f});return re(u),ke}}function be(){var ne=[];R(ne);for(var X;X=Q();)X!==!1&&(ne.push(X),R(ne));return ne}return K(),be()}function S(D){return D?D.replace(s,f):f}return F0=x,F0}var ji;function a1(){if(ji)return Ar;ji=1;var e=Ar&&Ar.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Ar,"__esModule",{value:!0}),Ar.default=r;const t=e(n1());function r(n,a){let i=null;if(!n||typeof n!="string")return i;const u=(0,t.default)(n),s=typeof a=="function";return u.forEach(l=>{if(l.type!=="declaration")return;const{property:c,value:d}=l;s?a(c,d,l):d&&(i=i||{},i[c]=d)}),i}return Ar}var $r={},Wi;function i1(){if(Wi)return $r;Wi=1,Object.defineProperty($r,"__esModule",{value:!0}),$r.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,n=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,i=function(c){return!c||r.test(c)||e.test(c)},u=function(c,d){return d.toUpperCase()},s=function(c,d){return"".concat(d,"-")},l=function(c,d){return d===void 0&&(d={}),i(c)?c:(c=c.toLowerCase(),d.reactCompat?c=c.replace(a,s):c=c.replace(n,s),c.replace(t,u))};return $r.camelCase=l,$r}var Qr,Xi;function u1(){if(Xi)return Qr;Xi=1;var e=Qr&&Qr.__importDefault||function(a){return a&&a.__esModule?a:{default:a}},t=e(a1()),r=i1();function n(a,i){var u={};return!a||typeof a!="string"||(0,t.default)(a,function(s,l){s&&l&&(u[(0,r.camelCase)(s,i)]=l)}),u}return n.default=n,Qr=n,Qr}var s1=u1();const l1=zs(s1),d0=Qs("end"),_t=Qs("start");function Qs(e){return t;function t(r){const n=r&&r.position&&r.position[e]||{};if(typeof n.line=="number"&&n.line>0&&typeof n.column=="number"&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset=="number"&&n.offset>-1?n.offset:void 0}}}function o1(e){const t=_t(e),r=d0(e);if(t&&r)return{start:t,end:r}}function nn(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?$i(e.position):"start"in e||"end"in e?$i(e):"line"in e||"column"in e?xa(e):""}function xa(e){return Qi(e&&e.line)+":"+Qi(e&&e.column)}function $i(e){return xa(e&&e.start)+"-"+xa(e&&e.end)}function Qi(e){return e&&typeof e=="number"?e:1}class je extends Error{constructor(t,r,n){super(),typeof r=="string"&&(n=r,r=void 0);let a="",i={},u=!1;if(r&&("line"in r&&"column"in r?i={place:r}:"start"in r&&"end"in r?i={place:r}:"type"in r?i={ancestors:[r],place:r.position}:i={...r}),typeof t=="string"?a=t:!i.cause&&t&&(u=!0,a=t.message,i.cause=t),!i.ruleId&&!i.source&&typeof n=="string"){const l=n.indexOf(":");l===-1?i.ruleId=n:(i.source=n.slice(0,l),i.ruleId=n.slice(l+1))}if(!i.place&&i.ancestors&&i.ancestors){const l=i.ancestors[i.ancestors.length-1];l&&(i.place=l.position)}const s=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=s?s.line:void 0,this.name=nn(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=u&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}je.prototype.file="";je.prototype.name="";je.prototype.reason="";je.prototype.message="";je.prototype.stack="";je.prototype.column=void 0;je.prototype.line=void 0;je.prototype.ancestors=void 0;je.prototype.cause=void 0;je.prototype.fatal=void 0;je.prototype.place=void 0;je.prototype.ruleId=void 0;je.prototype.source=void 0;const ei={}.hasOwnProperty,c1=new Map,h1=/[A-Z]/g,d1=new Set(["table","tbody","thead","tfoot","tr"]),f1=new Set(["td","th"]),Ks="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function m1(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let n;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=v1(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=y1(r,t.jsx,t.jsxs)}const a={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:n,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?rr:xn,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},i=Js(a,e,void 0);return i&&typeof i!="string"?i:a.create(e,a.Fragment,{children:i||void 0},void 0)}function Js(e,t,r){if(t.type==="element")return p1(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return g1(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return E1(e,t,r);if(t.type==="mdxjsEsm")return b1(e,t);if(t.type==="root")return T1(e,t,r);if(t.type==="text")return x1(e,t)}function p1(e,t,r){const n=e.schema;let a=n;t.tagName.toLowerCase()==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=el(e,t.tagName,!1),u=A1(e,t);let s=ri(e,t);return d1.has(t.tagName)&&(s=s.filter(function(l){return typeof l=="string"?!Xc(l):!0})),Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function g1(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}mn(e,t.position)}function b1(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);mn(e,t.position)}function E1(e,t,r){const n=e.schema;let a=n;t.name==="svg"&&n.space==="html"&&(a=rr,e.schema=a),e.ancestors.push(t);const i=t.name===null?e.Fragment:el(e,t.name,!0),u=k1(e,t),s=ri(e,t);return Zs(e,u,i,t),ti(u,s),e.ancestors.pop(),e.schema=n,e.create(t,i,u,r)}function T1(e,t,r){const n={};return ti(n,ri(e,t)),e.create(t,e.Fragment,n,r)}function x1(e,t){return t.value}function Zs(e,t,r,n){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=n)}function ti(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function y1(e,t,r){return n;function n(a,i,u,s){const c=Array.isArray(u.children)?r:t;return s?c(i,u,s):c(i,u)}}function v1(e,t){return r;function r(n,a,i,u){const s=Array.isArray(i.children),l=_t(n);return t(a,i,u,s,{columnNumber:l?l.column-1:void 0,fileName:e,lineNumber:l?l.line:void 0},void 0)}}function A1(e,t){const r={};let n,a;for(a in t.properties)if(a!=="children"&&ei.call(t.properties,a)){const i=S1(e,a,t.properties[a]);if(i){const[u,s]=i;e.tableCellAlignToStyle&&u==="align"&&typeof s=="string"&&f1.has(t.tagName)?n=s:r[u]=s}}if(n){const i=r.style||(r.style={});i[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function k1(e,t){const r={};for(const n of t.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&e.evaluater){const i=n.data.estree.body[0];i.type;const u=i.expression;u.type;const s=u.properties[0];s.type,Object.assign(r,e.evaluater.evaluateExpression(s.argument))}else mn(e,t.position);else{const a=n.name;let i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&e.evaluater){const s=n.value.data.estree.body[0];s.type,i=e.evaluater.evaluateExpression(s.expression)}else mn(e,t.position);else i=n.value===null?!0:n.value;r[a]=i}return r}function ri(e,t){const r=[];let n=-1;const a=e.passKeys?new Map:c1;for(;++na?0:a+t:t=t>a?a:t,r=r>0?r:0,n.length<1e4)u=Array.from(n),u.unshift(t,r),e.splice(...u);else for(r&&e.splice(t,r);i0?(lt(e,e.length,0,t),e):t}const Zi={}.hasOwnProperty;function rl(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function xt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ke=nr(/[A-Za-z]/),Ge=nr(/[\dA-Za-z]/),R1=nr(/[#-'*+\--9=?A-Z^-~]/);function Zn(e){return e!==null&&(e<32||e===127)}const ya=nr(/\d/),M1=nr(/[\dA-Fa-f]/),P1=nr(/[!-/:-@[-`{-~]/);function ae(e){return e!==null&&e<-2}function ve(e){return e!==null&&(e<0||e===32)}function ge(e){return e===-2||e===-1||e===32}const f0=nr(new RegExp("\\p{P}|\\p{S}","u")),pr=nr(/\s/);function nr(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function Pr(e){const t=[];let r=-1,n=0,a=0;for(;++r55295&&i<57344){const s=e.charCodeAt(r+1);i<56320&&s>56319&&s<57344?(u=String.fromCharCode(i,s),a=1):u="�"}else u=String.fromCharCode(i);u&&(t.push(e.slice(n,r),encodeURIComponent(u)),n=r+a+1,u=""),a&&(r+=a,a=0)}return t.join("")+e.slice(n)}function fe(e,t,r,n){const a=n?n-1:Number.POSITIVE_INFINITY;let i=0;return u;function u(l){return ge(l)?(e.enter(r),s(l)):t(l)}function s(l){return ge(l)&&i++u))return;const ee=t.events.length;let re=ee,K,R;for(;re--;)if(t.events[re][0]==="exit"&&t.events[re][1].type==="chunkFlow"){if(K){R=t.events[re][1].end;break}K=!0}for(_(n),L=ee;LM;){const j=r[W];t.containerState=j[1],j[0].exit.call(t,e)}r.length=M}function N(){a.write([null]),i=void 0,a=void 0,t.containerState._closeFlow=void 0}}function U1(e,t,r){return fe(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ir(e){if(e===null||ve(e)||pr(e))return 1;if(f0(e))return 2}function m0(e,t,r){const n=[];let a=-1;for(;++a1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const f={...e[n][1].end},g={...e[r][1].start};tu(f,-l),tu(g,l),u={type:l>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},s={type:l>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:g},i={type:l>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[r][1].start}},a={type:l>1?"strong":"emphasis",start:{...u.start},end:{...s.end}},e[n][1].end={...u.start},e[r][1].start={...s.end},c=[],e[n][1].end.offset-e[n][1].start.offset&&(c=mt(c,[["enter",e[n][1],t],["exit",e[n][1],t]])),c=mt(c,[["enter",a,t],["enter",u,t],["exit",u,t],["enter",i,t]]),c=mt(c,m0(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),c=mt(c,[["exit",i,t],["enter",s,t],["exit",s,t],["exit",a,t]]),e[r][1].end.offset-e[r][1].start.offset?(d=2,c=mt(c,[["enter",e[r][1],t],["exit",e[r][1],t]])):d=0,lt(e,n-1,r-n+3,c),r=n+c.length-d-2;break}}for(r=-1;++r0&&ge(L)?fe(e,N,"linePrefix",i+1)(L):N(L)}function N(L){return L===null||ae(L)?e.check(ru,S,W)(L):(e.enter("codeFlowValue"),M(L))}function M(L){return L===null||ae(L)?(e.exit("codeFlowValue"),N(L)):(e.consume(L),M)}function W(L){return e.exit("codeFenced"),t(L)}function j(L,ee,re){let K=0;return R;function R(X){return L.enter("lineEnding"),L.consume(X),L.exit("lineEnding"),J}function J(X){return L.enter("codeFencedFence"),ge(X)?fe(L,Q,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(X):Q(X)}function Q(X){return X===s?(L.enter("codeFencedFenceSequence"),be(X)):re(X)}function be(X){return X===s?(K++,L.consume(X),be):K>=u?(L.exit("codeFencedFenceSequence"),ge(X)?fe(L,ne,"whitespace")(X):ne(X)):re(X)}function ne(X){return X===null||ae(X)?(L.exit("codeFencedFence"),ee(X)):re(X)}}}function Z1(e,t,r){const n=this;return a;function a(u){return u===null?r(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}const z0={name:"codeIndented",tokenize:th},eh={partial:!0,tokenize:rh};function th(e,t,r){const n=this;return a;function a(c){return e.enter("codeIndented"),fe(e,i,"linePrefix",5)(c)}function i(c){const d=n.events[n.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?u(c):r(c)}function u(c){return c===null?l(c):ae(c)?e.attempt(eh,u,l)(c):(e.enter("codeFlowValue"),s(c))}function s(c){return c===null||ae(c)?(e.exit("codeFlowValue"),u(c)):(e.consume(c),s)}function l(c){return e.exit("codeIndented"),t(c)}}function rh(e,t,r){const n=this;return a;function a(u){return n.parser.lazy[n.now().line]?r(u):ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),a):fe(e,i,"linePrefix",5)(u)}function i(u){const s=n.events[n.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(u):ae(u)?a(u):r(u)}}const nh={name:"codeText",previous:ih,resolve:ah,tokenize:uh};function ah(e){let t=e.length-4,r=3,n,a;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(t,r,n){const a=r||0;this.setCursor(Math.trunc(t));const i=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return n&&Kr(this.left,n),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Kr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Kr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(u):e.interrupt(n.parser.constructs.flow,r,t)(u)}}function ll(e,t,r,n,a,i,u,s,l){const c=l||Number.POSITIVE_INFINITY;let d=0;return f;function f(_){return _===60?(e.enter(n),e.enter(a),e.enter(i),e.consume(_),e.exit(i),g):_===null||_===32||_===41||Zn(_)?r(_):(e.enter(n),e.enter(u),e.enter(s),e.enter("chunkString",{contentType:"string"}),S(_))}function g(_){return _===62?(e.enter(i),e.consume(_),e.exit(i),e.exit(a),e.exit(n),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(_))}function p(_){return _===62?(e.exit("chunkString"),e.exit(s),g(_)):_===null||_===60||ae(_)?r(_):(e.consume(_),_===92?x:p)}function x(_){return _===60||_===62||_===92?(e.consume(_),p):p(_)}function S(_){return!d&&(_===null||_===41||ve(_))?(e.exit("chunkString"),e.exit(s),e.exit(u),e.exit(n),t(_)):d999||p===null||p===91||p===93&&!l||p===94&&!s&&"_hiddenFootnoteSupport"in u.parser.constructs?r(p):p===93?(e.exit(i),e.enter(a),e.consume(p),e.exit(a),e.exit(n),t):ae(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),f(p))}function f(p){return p===null||p===91||p===93||ae(p)||s++>999?(e.exit("chunkString"),d(p)):(e.consume(p),l||(l=!ge(p)),p===92?g:f)}function g(p){return p===91||p===92||p===93?(e.consume(p),s++,f):f(p)}}function cl(e,t,r,n,a,i){let u;return s;function s(g){return g===34||g===39||g===40?(e.enter(n),e.enter(a),e.consume(g),e.exit(a),u=g===40?41:g,l):r(g)}function l(g){return g===u?(e.enter(a),e.consume(g),e.exit(a),e.exit(n),t):(e.enter(i),c(g))}function c(g){return g===u?(e.exit(i),l(u)):g===null?r(g):ae(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),fe(e,c,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(g))}function d(g){return g===u||g===null||ae(g)?(e.exit("chunkString"),c(g)):(e.consume(g),g===92?f:d)}function f(g){return g===u||g===92?(e.consume(g),d):d(g)}}function an(e,t){let r;return n;function n(a){return ae(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,n):ge(a)?fe(e,n,r?"linePrefix":"lineSuffix")(a):t(a)}}const mh={name:"definition",tokenize:gh},ph={partial:!0,tokenize:bh};function gh(e,t,r){const n=this;let a;return i;function i(p){return e.enter("definition"),u(p)}function u(p){return ol.call(n,e,s,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return a=xt(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):r(p)}function l(p){return ve(p)?an(e,c)(p):c(p)}function c(p){return ll(e,d,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function d(p){return e.attempt(ph,f,f)(p)}function f(p){return ge(p)?fe(e,g,"whitespace")(p):g(p)}function g(p){return p===null||ae(p)?(e.exit("definition"),n.parser.defined.push(a),t(p)):r(p)}}function bh(e,t,r){return n;function n(s){return ve(s)?an(e,a)(s):r(s)}function a(s){return cl(e,i,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function i(s){return ge(s)?fe(e,u,"whitespace")(s):u(s)}function u(s){return s===null||ae(s)?t(s):r(s)}}const Eh={name:"hardBreakEscape",tokenize:Th};function Th(e,t,r){return n;function n(i){return e.enter("hardBreakEscape"),e.consume(i),a}function a(i){return ae(i)?(e.exit("hardBreakEscape"),t(i)):r(i)}}const xh={name:"headingAtx",resolve:yh,tokenize:vh};function yh(e,t){let r=e.length-2,n=3,a,i;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(a={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},i={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},lt(e,n,r-n+1,[["enter",a,t],["enter",i,t],["exit",i,t],["exit",a,t]])),e}function vh(e,t,r){let n=0;return a;function a(d){return e.enter("atxHeading"),i(d)}function i(d){return e.enter("atxHeadingSequence"),u(d)}function u(d){return d===35&&n++<6?(e.consume(d),u):d===null||ve(d)?(e.exit("atxHeadingSequence"),s(d)):r(d)}function s(d){return d===35?(e.enter("atxHeadingSequence"),l(d)):d===null||ae(d)?(e.exit("atxHeading"),t(d)):ge(d)?fe(e,s,"whitespace")(d):(e.enter("atxHeadingText"),c(d))}function l(d){return d===35?(e.consume(d),l):(e.exit("atxHeadingSequence"),s(d))}function c(d){return d===null||d===35||ve(d)?(e.exit("atxHeadingText"),s(d)):(e.consume(d),c)}}const Ah=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],au=["pre","script","style","textarea"],kh={concrete:!0,name:"htmlFlow",resolveTo:Ch,tokenize:_h},Sh={partial:!0,tokenize:Nh},wh={partial:!0,tokenize:Ih};function Ch(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function _h(e,t,r){const n=this;let a,i,u,s,l;return c;function c(C){return d(C)}function d(C){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(C),f}function f(C){return C===33?(e.consume(C),g):C===47?(e.consume(C),i=!0,S):C===63?(e.consume(C),a=3,n.interrupt?t:w):Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function g(C){return C===45?(e.consume(C),a=2,p):C===91?(e.consume(C),a=5,s=0,x):Ke(C)?(e.consume(C),a=4,n.interrupt?t:w):r(C)}function p(C){return C===45?(e.consume(C),n.interrupt?t:w):r(C)}function x(C){const Ye="CDATA[";return C===Ye.charCodeAt(s++)?(e.consume(C),s===Ye.length?n.interrupt?t:Q:x):r(C)}function S(C){return Ke(C)?(e.consume(C),u=String.fromCharCode(C),D):r(C)}function D(C){if(C===null||C===47||C===62||ve(C)){const Ye=C===47,vt=u.toLowerCase();return!Ye&&!i&&au.includes(vt)?(a=1,n.interrupt?t(C):Q(C)):Ah.includes(u.toLowerCase())?(a=6,Ye?(e.consume(C),_):n.interrupt?t(C):Q(C)):(a=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(C):i?N(C):M(C))}return C===45||Ge(C)?(e.consume(C),u+=String.fromCharCode(C),D):r(C)}function _(C){return C===62?(e.consume(C),n.interrupt?t:Q):r(C)}function N(C){return ge(C)?(e.consume(C),N):R(C)}function M(C){return C===47?(e.consume(C),R):C===58||C===95||Ke(C)?(e.consume(C),W):ge(C)?(e.consume(C),M):R(C)}function W(C){return C===45||C===46||C===58||C===95||Ge(C)?(e.consume(C),W):j(C)}function j(C){return C===61?(e.consume(C),L):ge(C)?(e.consume(C),j):M(C)}function L(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),l=C,ee):ge(C)?(e.consume(C),L):re(C)}function ee(C){return C===l?(e.consume(C),l=null,K):C===null||ae(C)?r(C):(e.consume(C),ee)}function re(C){return C===null||C===34||C===39||C===47||C===60||C===61||C===62||C===96||ve(C)?j(C):(e.consume(C),re)}function K(C){return C===47||C===62||ge(C)?M(C):r(C)}function R(C){return C===62?(e.consume(C),J):r(C)}function J(C){return C===null||ae(C)?Q(C):ge(C)?(e.consume(C),J):r(C)}function Q(C){return C===45&&a===2?(e.consume(C),me):C===60&&a===1?(e.consume(C),ke):C===62&&a===4?(e.consume(C),Oe):C===63&&a===3?(e.consume(C),w):C===93&&a===5?(e.consume(C),at):ae(C)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(Sh,Xe,be)(C)):C===null||ae(C)?(e.exit("htmlFlowData"),be(C)):(e.consume(C),Q)}function be(C){return e.check(wh,ne,Xe)(C)}function ne(C){return e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),X}function X(C){return C===null||ae(C)?be(C):(e.enter("htmlFlowData"),Q(C))}function me(C){return C===45?(e.consume(C),w):Q(C)}function ke(C){return C===47?(e.consume(C),u="",ze):Q(C)}function ze(C){if(C===62){const Ye=u.toLowerCase();return au.includes(Ye)?(e.consume(C),Oe):Q(C)}return Ke(C)&&u.length<8?(e.consume(C),u+=String.fromCharCode(C),ze):Q(C)}function at(C){return C===93?(e.consume(C),w):Q(C)}function w(C){return C===62?(e.consume(C),Oe):C===45&&a===2?(e.consume(C),w):Q(C)}function Oe(C){return C===null||ae(C)?(e.exit("htmlFlowData"),Xe(C)):(e.consume(C),Oe)}function Xe(C){return e.exit("htmlFlow"),t(C)}}function Ih(e,t,r){const n=this;return a;function a(u){return ae(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),i):r(u)}function i(u){return n.parser.lazy[n.now().line]?r(u):t(u)}}function Nh(e,t,r){return n;function n(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(yn,t,r)}}const Dh={name:"htmlText",tokenize:Oh};function Oh(e,t,r){const n=this;let a,i,u;return s;function s(w){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(w),l}function l(w){return w===33?(e.consume(w),c):w===47?(e.consume(w),j):w===63?(e.consume(w),M):Ke(w)?(e.consume(w),re):r(w)}function c(w){return w===45?(e.consume(w),d):w===91?(e.consume(w),i=0,x):Ke(w)?(e.consume(w),N):r(w)}function d(w){return w===45?(e.consume(w),p):r(w)}function f(w){return w===null?r(w):w===45?(e.consume(w),g):ae(w)?(u=f,ke(w)):(e.consume(w),f)}function g(w){return w===45?(e.consume(w),p):f(w)}function p(w){return w===62?me(w):w===45?g(w):f(w)}function x(w){const Oe="CDATA[";return w===Oe.charCodeAt(i++)?(e.consume(w),i===Oe.length?S:x):r(w)}function S(w){return w===null?r(w):w===93?(e.consume(w),D):ae(w)?(u=S,ke(w)):(e.consume(w),S)}function D(w){return w===93?(e.consume(w),_):S(w)}function _(w){return w===62?me(w):w===93?(e.consume(w),_):S(w)}function N(w){return w===null||w===62?me(w):ae(w)?(u=N,ke(w)):(e.consume(w),N)}function M(w){return w===null?r(w):w===63?(e.consume(w),W):ae(w)?(u=M,ke(w)):(e.consume(w),M)}function W(w){return w===62?me(w):M(w)}function j(w){return Ke(w)?(e.consume(w),L):r(w)}function L(w){return w===45||Ge(w)?(e.consume(w),L):ee(w)}function ee(w){return ae(w)?(u=ee,ke(w)):ge(w)?(e.consume(w),ee):me(w)}function re(w){return w===45||Ge(w)?(e.consume(w),re):w===47||w===62||ve(w)?K(w):r(w)}function K(w){return w===47?(e.consume(w),me):w===58||w===95||Ke(w)?(e.consume(w),R):ae(w)?(u=K,ke(w)):ge(w)?(e.consume(w),K):me(w)}function R(w){return w===45||w===46||w===58||w===95||Ge(w)?(e.consume(w),R):J(w)}function J(w){return w===61?(e.consume(w),Q):ae(w)?(u=J,ke(w)):ge(w)?(e.consume(w),J):K(w)}function Q(w){return w===null||w===60||w===61||w===62||w===96?r(w):w===34||w===39?(e.consume(w),a=w,be):ae(w)?(u=Q,ke(w)):ge(w)?(e.consume(w),Q):(e.consume(w),ne)}function be(w){return w===a?(e.consume(w),a=void 0,X):w===null?r(w):ae(w)?(u=be,ke(w)):(e.consume(w),be)}function ne(w){return w===null||w===34||w===39||w===60||w===61||w===96?r(w):w===47||w===62||ve(w)?K(w):(e.consume(w),ne)}function X(w){return w===47||w===62||ve(w)?K(w):r(w)}function me(w){return w===62?(e.consume(w),e.exit("htmlTextData"),e.exit("htmlText"),t):r(w)}function ke(w){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),ze}function ze(w){return ge(w)?fe(e,at,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):at(w)}function at(w){return e.enter("htmlTextData"),u(w)}}const ii={name:"labelEnd",resolveAll:Ph,resolveTo:Bh,tokenize:Fh},Lh={tokenize:Hh},Rh={tokenize:zh},Mh={tokenize:Uh};function Ph(e){let t=-1;const r=[];for(;++t=3&&(c===null||ae(c))?(e.exit("thematicBreak"),t(c)):r(c)}function l(c){return c===a?(e.consume(c),n++,l):(e.exit("thematicBreakSequence"),ge(c)?fe(e,s,"whitespace")(c):s(c))}}const tt={continuation:{tokenize:Kh},exit:Zh,name:"list",tokenize:Qh},Xh={partial:!0,tokenize:ed},$h={partial:!0,tokenize:Jh};function Qh(e,t,r){const n=this,a=n.events[n.events.length-1];let i=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,u=0;return s;function s(p){const x=n.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(x==="listUnordered"?!n.containerState.marker||p===n.containerState.marker:ya(p)){if(n.containerState.type||(n.containerState.type=x,e.enter(x,{_container:!0})),x==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Xn,r,c)(p):c(p);if(!n.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return r(p)}function l(p){return ya(p)&&++u<10?(e.consume(p),l):(!n.interrupt||u<2)&&(n.containerState.marker?p===n.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),c(p)):r(p)}function c(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||p,e.check(yn,n.interrupt?r:d,e.attempt(Xh,g,f))}function d(p){return n.containerState.initialBlankLine=!0,i++,g(p)}function f(p){return ge(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),g):r(p)}function g(p){return n.containerState.size=i+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function Kh(e,t,r){const n=this;return n.containerState._closeFlow=void 0,e.check(yn,a,i);function a(s){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,fe(e,t,"listItemIndent",n.containerState.size+1)(s)}function i(s){return n.containerState.furtherBlankLines||!ge(s)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,u(s)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt($h,t,u)(s))}function u(s){return n.containerState._closeFlow=!0,n.interrupt=void 0,fe(e,e.attempt(tt,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function Jh(e,t,r){const n=this;return fe(e,a,"listItemIndent",n.containerState.size+1);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===n.containerState.size?t(i):r(i)}}function Zh(e){e.exit(this.containerState.type)}function ed(e,t,r){const n=this;return fe(e,a,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(i){const u=n.events[n.events.length-1];return!ge(i)&&u&&u[1].type==="listItemPrefixWhitespace"?t(i):r(i)}}const iu={name:"setextUnderline",resolveTo:td,tokenize:rd};function td(e,t){let r=e.length,n,a,i;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&e.splice(r,1),!i&&e[r][1].type==="definition"&&(i=r);const u={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",i?(e.splice(a,0,["enter",u,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=u,e.push(["exit",u,t]),e}function rd(e,t,r){const n=this;let a;return i;function i(c){let d=n.events.length,f;for(;d--;)if(n.events[d][1].type!=="lineEnding"&&n.events[d][1].type!=="linePrefix"&&n.events[d][1].type!=="content"){f=n.events[d][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||f)?(e.enter("setextHeadingLine"),a=c,u(c)):r(c)}function u(c){return e.enter("setextHeadingLineSequence"),s(c)}function s(c){return c===a?(e.consume(c),s):(e.exit("setextHeadingLineSequence"),ge(c)?fe(e,l,"lineSuffix")(c):l(c))}function l(c){return c===null||ae(c)?(e.exit("setextHeadingLine"),t(c)):r(c)}}const nd={tokenize:ad};function ad(e){const t=this,r=e.attempt(yn,n,e.attempt(this.parser.constructs.flowInitial,a,fe(e,e.attempt(this.parser.constructs.flow,a,e.attempt(oh,a)),"linePrefix")));return r;function n(i){if(i===null){e.consume(i);return}return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function a(i){if(i===null){e.consume(i);return}return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const id={resolveAll:dl()},ud=hl("string"),sd=hl("text");function hl(e){return{resolveAll:dl(e==="text"?ld:void 0),tokenize:t};function t(r){const n=this,a=this.parser.constructs[e],i=r.attempt(a,u,s);return u;function u(d){return c(d)?i(d):s(d)}function s(d){if(d===null){r.consume(d);return}return r.enter("data"),r.consume(d),l}function l(d){return c(d)?(r.exit("data"),i(d)):(r.consume(d),l)}function c(d){if(d===null)return!0;const f=a[d];let g=-1;if(f)for(;++g-1){const s=u[0];typeof s=="string"?u[0]=s.slice(n):u.shift()}i>0&&u.push(e[a].slice(0,i))}return u}function yd(e,t){let r=-1;const n=[];let a;for(;++r0){const Tt=ue.tokenStack[ue.tokenStack.length-1];(Tt[1]||su).call(ue,void 0,Tt[0])}for($.position={start:Vt(B.length>0?B[0][1].start:{line:1,column:1,offset:0}),end:Vt(B.length>0?B[B.length-2][1].end:{line:1,column:1,offset:0})},xe=-1;++xe0&&(n.className=["language-"+a[0]]);let i={type:"element",tagName:"code",properties:n,children:[{type:"text",value:r}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i=e.applyData(t,i),i={type:"element",tagName:"pre",properties:{},children:[i]},e.patch(t,i),i}function Md(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Pd(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Bd(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=String(t.identifier).toUpperCase(),a=Pr(n.toLowerCase()),i=e.footnoteOrder.indexOf(n);let u,s=e.footnoteCounts.get(n);s===void 0?(s=0,e.footnoteOrder.push(n),u=e.footnoteOrder.length):u=i+1,s+=1,e.footnoteCounts.set(n,s);const l={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(t,l);const c={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,c),e.applyData(t,c)}function Fd(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Hd(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function pl(e,t){const r=t.referenceType;let n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+n}];const a=e.all(t),i=a[0];i&&i.type==="text"?i.value="["+i.value:a.unshift({type:"text",value:"["});const u=a[a.length-1];return u&&u.type==="text"?u.value+=n:a.push({type:"text",value:n}),a}function zd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={src:Pr(n.url||""),alt:t.alt};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,i),e.applyData(t,i)}function Ud(e,t){const r={src:Pr(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function qd(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function Yd(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return pl(e,t);const a={href:Pr(n.url||"")};n.title!==null&&n.title!==void 0&&(a.title=n.title);const i={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function Gd(e,t){const r={href:Pr(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Vd(e,t,r){const n=e.all(t),a=r?jd(r):gl(t),i={},u=[];if(typeof t.checked=="boolean"){const d=n[0];let f;d&&d.type==="element"&&d.tagName==="p"?f=d:(f={type:"element",tagName:"p",properties:{},children:[]},n.unshift(f)),f.children.length>0&&f.children.unshift({type:"text",value:" "}),f.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let s=-1;for(;++s1}function Wd(e,t){const r={},n=e.all(t);let a=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++a0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},s=_t(t.children[1]),l=d0(t.children[t.children.length-1]);s&&l&&(u.position={start:s,end:l}),a.push(u)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(t,i),e.applyData(t,i)}function Jd(e,t,r){const n=r?r.children:void 0,i=(n?n.indexOf(t):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,s=u?u.length:t.children.length;let l=-1;const c=[];for(;++l0,!0),n[0]),a=n.index+n[0].length,n=r.exec(t);return i.push(cu(t.slice(a),a>0,!1)),i.join("")}function cu(e,t,r){let n=0,a=e.length;if(t){let i=e.codePointAt(n);for(;i===lu||i===ou;)n++,i=e.codePointAt(n)}if(r){let i=e.codePointAt(a-1);for(;i===lu||i===ou;)a--,i=e.codePointAt(a-1)}return a>n?e.slice(n,a):""}function tf(e,t){const r={type:"text",value:ef(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function rf(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const nf={blockquote:Od,break:Ld,code:Rd,delete:Md,emphasis:Pd,footnoteReference:Bd,heading:Fd,html:Hd,imageReference:zd,image:Ud,inlineCode:qd,linkReference:Yd,link:Gd,listItem:Vd,list:Wd,paragraph:Xd,root:$d,strong:Qd,table:Kd,tableCell:Zd,tableRow:Jd,text:tf,thematicBreak:rf,toml:Mn,yaml:Mn,definition:Mn,footnoteDefinition:Mn};function Mn(){}const bl=-1,p0=0,un=1,e0=2,ui=3,si=4,li=5,oi=6,El=7,Tl=8,xl=typeof self=="object"?self:globalThis,hu=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new xl[e](t)},af=(e,t)=>{const r=(a,i)=>(e.set(i,a),a),n=a=>{if(e.has(a))return e.get(a);const[i,u]=t[a];switch(i){case p0:case bl:return r(u,a);case un:{const s=r([],a);for(const l of u)s.push(n(l));return s}case e0:{const s=r({},a);for(const[l,c]of u)s[n(l)]=n(c);return s}case ui:return r(new Date(u),a);case si:{const{source:s,flags:l}=u;return r(new RegExp(s,l),a)}case li:{const s=r(new Map,a);for(const[l,c]of u)s.set(n(l),n(c));return s}case oi:{const s=r(new Set,a);for(const l of u)s.add(n(l));return s}case El:{const{name:s,message:l}=u;return r(typeof xl[s]=="function"?hu(s,l):new Error(l),a)}case Tl:return r(BigInt(u),a);case"BigInt":return r(Object(BigInt(u)),a);case"ArrayBuffer":return r(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:s}=new Uint8Array(u);return r(new DataView(s),u)}}return r(hu(i,u),a)};return n},du=e=>af(new Map,e)(0),hr="",{toString:uf}={},{keys:sf}=Object,Jr=e=>{const t=typeof e;if(t!=="object"||!e)return[p0,t];const r=uf.call(e).slice(8,-1);switch(r){case"Array":return[un,hr];case"Object":return[e0,hr];case"Date":return[ui,hr];case"RegExp":return[si,hr];case"Map":return[li,hr];case"Set":return[oi,hr];case"DataView":return[un,r]}return r.includes("Array")?[un,r]:e instanceof Error?[El,e.name||"Error"]:[e0,r]},Pn=([e,t])=>e===p0&&(t==="function"||t==="symbol"),lf=(e,t,r,n)=>{const a=(u,s)=>{const l=n.push(u)-1;return r.set(s,l),l},i=u=>{if(r.has(u))return r.get(u);let[s,l]=Jr(u);switch(s){case p0:{let d=u;switch(l){case"bigint":s=Tl,d=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+l);d=null;break;case"undefined":return a([bl],u)}return a([s,d],u)}case un:{if(l){let g=u;return l==="DataView"?g=new Uint8Array(u.buffer):l==="ArrayBuffer"&&(g=new Uint8Array(u)),a([l,[...g]],u)}const d=[],f=a([s,d],u);for(const g of u)d.push(i(g));return f}case e0:{if(l)switch(l){case"BigInt":return a([l,u.toString()],u);case"Boolean":case"Number":case"String":return a([l,u.valueOf()],u)}if(t&&"toJSON"in u)return i(u.toJSON());const d=[],f=a([s,d],u);for(const g of sf(u))(e||!Pn(Jr(u[g])))&&d.push([i(g),i(u[g])]);return f}case ui:return a([s,isNaN(u.getTime())?hr:u.toISOString()],u);case si:{const{source:d,flags:f}=u;return a([s,{source:d,flags:f}],u)}case li:{const d=[],f=a([s,d],u);for(const[g,p]of u)(e||!(Pn(Jr(g))||Pn(Jr(p))))&&d.push([i(g),i(p)]);return f}case oi:{const d=[],f=a([s,d],u);for(const g of u)(e||!Pn(Jr(g)))&&d.push(i(g));return f}}const{message:c}=u;return a([s,{name:l,message:c}],u)};return i},fu=(e,{json:t,lossy:r}={})=>{const n=[];return lf(!(t||r),!!t,new Map,n)(e),n},Nr=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?du(fu(e,t)):structuredClone(e):(e,t)=>du(fu(e,t));function of(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function cf(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function hf(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||of,n=e.options.footnoteBackLabel||cf,a=e.options.footnoteLabel||"Footnotes",i=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let l=-1;for(;++l0&&x.push({type:"text",value:" "});let N=typeof r=="string"?r:r(l,p);typeof N=="string"&&(N={type:"text",value:N}),x.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof n=="string"?n:n(l,p),className:["data-footnote-backref"]},children:Array.isArray(N)?N:[N]})}const D=d[d.length-1];if(D&&D.type==="element"&&D.tagName==="p"){const N=D.children[D.children.length-1];N&&N.type==="text"?N.value+=" ":D.children.push({type:"text",value:" "}),D.children.push(...x)}else d.push(...x);const _={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(d,!0)};e.patch(c,_),s.push(_)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...Nr(u),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` -`}]}}const vn=(function(e){if(e==null)return pf;if(typeof e=="function")return g0(e);if(typeof e=="object")return Array.isArray(e)?df(e):ff(e);if(typeof e=="string")return mf(e);throw new Error("Expected function, string, or object as test")});function df(e){const t=[];let r=-1;for(;++r":""))+")"})}return g;function g(){let p=yl,x,S,D;if((!t||i(l,c,d[d.length-1]||void 0))&&(p=Ef(r(l,d)),p[0]===Aa))return p;if("children"in l&&l.children){const _=l;if(_.children&&p[0]!==vl)for(S=(n?_.children.length:-1)+u,D=d.concat(_);S>-1&&S<_.children.length;){const N=_.children[S];if(x=s(N,S,D)(),x[0]===Aa)return x;S=typeof x[1]=="number"?x[1]:S+u}}return p}}}function Ef(e){return Array.isArray(e)?e:typeof e=="number"?[bf,e]:e==null?yl:[e]}function b0(e,t,r,n){let a,i,u;typeof t=="function"&&typeof r!="function"?(i=void 0,u=t,a=r):(i=t,u=r,a=n),ci(e,i,s,a);function s(l,c){const d=c[c.length-1],f=d?d.children.indexOf(l):void 0;return u(l,f,d)}}const ka={}.hasOwnProperty,Tf={};function xf(e,t){const r=t||Tf,n=new Map,a=new Map,i=new Map,u={...nf,...r.handlers},s={all:c,applyData:vf,definitionById:n,footnoteById:a,footnoteCounts:i,footnoteOrder:[],handlers:u,one:l,options:r,patch:yf,wrap:kf};return b0(e,function(d){if(d.type==="definition"||d.type==="footnoteDefinition"){const f=d.type==="definition"?n:a,g=String(d.identifier).toUpperCase();f.has(g)||f.set(g,d)}}),s;function l(d,f){const g=d.type,p=s.handlers[g];if(ka.call(s.handlers,g)&&p)return p(s,d,f);if(s.options.passThrough&&s.options.passThrough.includes(g)){if("children"in d){const{children:S,...D}=d,_=Nr(D);return _.children=s.all(d),_}return Nr(d)}return(s.options.unknownHandler||Af)(s,d,f)}function c(d){const f=[];if("children"in d){const g=d.children;let p=-1;for(;++p0&&r.push({type:"text",value:` -`}),r}function mu(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function pu(e,t){const r=xf(e,t),n=r.one(e,void 0),a=hf(r),i=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return a&&i.children.push({type:"text",value:` -`},a),i}function Sf(e,t){return e&&"run"in e?async function(r,n){const a=pu(r,{file:n,...t});await e.run(a,n)}:function(r,n){return pu(r,{file:n,...e||t})}}function gu(e){if(e)throw e}var q0,bu;function wf(){if(bu)return q0;bu=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=function(c){return typeof Array.isArray=="function"?Array.isArray(c):t.call(c)==="[object Array]"},i=function(c){if(!c||t.call(c)!=="[object Object]")return!1;var d=e.call(c,"constructor"),f=c.constructor&&c.constructor.prototype&&e.call(c.constructor.prototype,"isPrototypeOf");if(c.constructor&&!d&&!f)return!1;var g;for(g in c);return typeof g>"u"||e.call(c,g)},u=function(c,d){r&&d.name==="__proto__"?r(c,d.name,{enumerable:!0,configurable:!0,value:d.newValue,writable:!0}):c[d.name]=d.newValue},s=function(c,d){if(d==="__proto__")if(e.call(c,d)){if(n)return n(c,d).value}else return;return c[d]};return q0=function l(){var c,d,f,g,p,x,S=arguments[0],D=1,_=arguments.length,N=!1;for(typeof S=="boolean"&&(N=S,S=arguments[1]||{},D=2),(S==null||typeof S!="object"&&typeof S!="function")&&(S={});D<_;++D)if(c=arguments[D],c!=null)for(d in c)f=s(S,d),g=s(c,d),S!==g&&(N&&g&&(i(g)||(p=a(g)))?(p?(p=!1,x=f&&a(f)?f:[]):x=f&&i(f)?f:{},u(S,{name:d,newValue:l(N,x,g)})):typeof g<"u"&&u(S,{name:d,newValue:g}));return S},q0}var Cf=wf();const Y0=zs(Cf);function Sa(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function _f(){const e=[],t={run:r,use:n};return t;function r(...a){let i=-1;const u=a.pop();if(typeof u!="function")throw new TypeError("Expected function as last argument, not "+u);s(null,...a);function s(l,...c){const d=e[++i];let f=-1;if(l){u(l);return}for(;++fu.length;let l;s&&u.push(a);try{l=e.apply(this,u)}catch(c){const d=c;if(s&&r)throw d;return a(d)}s||(l&&l.then&&typeof l.then=="function"?l.then(i,a):l instanceof Error?a(l):i(l))}function a(u,...s){r||(r=!0,t(u,...s))}function i(u){a(null,u)}}const At={basename:Nf,dirname:Df,extname:Of,join:Lf,sep:"/"};function Nf(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');An(e);let r=0,n=-1,a=e.length,i;if(t===void 0||t.length===0||t.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else n<0&&(i=!0,n=a+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let u=-1,s=t.length-1;for(;a--;)if(e.codePointAt(a)===47){if(i){r=a+1;break}}else u<0&&(i=!0,u=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(n=a):(s=-1,n=u));return r===n?n=u:n<0&&(n=e.length),e.slice(r,n)}function Df(e){if(An(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function Of(e){An(e);let t=e.length,r=-1,n=0,a=-1,i=0,u;for(;t--;){const s=e.codePointAt(t);if(s===47){if(u){n=t+1;break}continue}r<0&&(u=!0,r=t+1),s===46?a<0?a=t:i!==1&&(i=1):a>-1&&(i=-1)}return a<0||r<0||i===0||i===1&&a===r-1&&a===n+1?"":e.slice(a,r)}function Lf(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function Mf(e,t){let r="",n=0,a=-1,i=0,u=-1,s,l;for(;++u<=e.length;){if(u2){if(l=r.lastIndexOf("/"),l!==r.length-1){l<0?(r="",n=0):(r=r.slice(0,l),n=r.length-1-r.lastIndexOf("/")),a=u,i=0;continue}}else if(r.length>0){r="",n=0,a=u,i=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(a+1,u):r=e.slice(a+1,u),n=u-a-1;a=u,i=0}else s===46&&i>-1?i++:i=-1}return r}function An(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Pf={cwd:Bf};function Bf(){return"/"}function wa(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function Ff(e){if(typeof e=="string")e=new URL(e);else if(!wa(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return Hf(e)}function Hf(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r0){let[p,...x]=d;const S=n[g][1];Sa(S)&&Sa(p)&&(p=Y0(!0,S,p)),n[g]=[c,p,...x]}}}}const Yf=new hi().freeze();function W0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function X0(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function $0(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Tu(e){if(!Sa(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function xu(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Bn(e){return Gf(e)?e:new Al(e)}function Gf(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function Vf(e){return typeof e=="string"||jf(e)}function jf(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Wf="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",yu=[],vu={allowDangerousHtml:!0},Xf=/^(https?|ircs?|mailto|xmpp)$/i,$f=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Qf(e){const t=Kf(e),r=Jf(e);return Zf(t.runSync(t.parse(r),r),e)}function Kf(e){const t=e.rehypePlugins||yu,r=e.remarkPlugins||yu,n=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...vu}:vu;return Yf().use(Dd).use(r).use(Sf,n).use(t)}function Jf(e){const t=e.children||"",r=new Al;return typeof t=="string"&&(r.value=t),r}function Zf(e,t){const r=t.allowedElements,n=t.allowElement,a=t.components,i=t.disallowedElements,u=t.skipHtml,s=t.unwrapDisallowed,l=t.urlTransform||em;for(const d of $f)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+Wf+d.id,void 0);return b0(e,c),m1(e,{Fragment:pe.Fragment,components:a,ignoreInvalidStyle:!0,jsx:pe.jsx,jsxs:pe.jsxs,passKeys:!0,passNode:!0});function c(d,f,g){if(d.type==="raw"&&g&&typeof f=="number")return u?g.children.splice(f,1):g.children[f]={type:"text",value:d.value},f;if(d.type==="element"){let p;for(p in H0)if(Object.hasOwn(H0,p)&&Object.hasOwn(d.properties,p)){const x=d.properties[p],S=H0[p];(S===null||S.includes(d.tagName))&&(d.properties[p]=l(String(x||""),p,d))}}if(d.type==="element"){let p=r?!r.includes(d.tagName):i?i.includes(d.tagName):!1;if(!p&&n&&typeof f=="number"&&(p=!n(d,f,g)),p&&g&&typeof f=="number")return s&&d.children?g.children.splice(f,1,...d.children):g.children.splice(f,1),f}}}function em(e){const t=e.indexOf(":"),r=e.indexOf("?"),n=e.indexOf("#"),a=e.indexOf("/");return t===-1||a!==-1&&t>a||r!==-1&&t>r||n!==-1&&t>n||Xf.test(e.slice(0,t))?e:""}function Au(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let n=0,a=r.indexOf(t);for(;a!==-1;)n++,a=r.indexOf(t,a+t.length);return n}function tm(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function rm(e,t,r){const a=vn((r||{}).ignore||[]),i=nm(t);let u=-1;for(;++u0?{type:"text",value:L}:void 0),L===!1?g.lastIndex=W+1:(x!==W&&N.push({type:"text",value:c.value.slice(x,W)}),Array.isArray(L)?N.push(...L):L&&N.push(L),x=W+M[0].length,_=!0),!g.global)break;M=g.exec(c.value)}return _?(x?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],n=r.indexOf(")");const a=Au(e,"(");let i=Au(e,")");for(;n!==-1&&a>i;)e+=r.slice(0,n+1),r=r.slice(n+1),n=r.indexOf(")"),i++;return[e,r]}function kl(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||pr(r)||f0(r))&&(!t||r!==47)}Sl.peek=wm;function Em(){this.buffer()}function Tm(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function xm(){this.buffer()}function ym(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function vm(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Am(e){this.exit(e)}function km(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=xt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Sm(e){this.exit(e)}function wm(){return"["}function Sl(e,t,r,n){const a=r.createTracker(n);let i=a.move("[^");const u=r.enter("footnoteReference"),s=r.enter("reference");return i+=a.move(r.safe(r.associationId(e),{after:"]",before:i})),s(),u(),i+=a.move("]"),i}function Cm(){return{enter:{gfmFootnoteCallString:Em,gfmFootnoteCall:Tm,gfmFootnoteDefinitionLabelString:xm,gfmFootnoteDefinition:ym},exit:{gfmFootnoteCallString:vm,gfmFootnoteCall:Am,gfmFootnoteDefinitionLabelString:km,gfmFootnoteDefinition:Sm}}}function _m(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:Sl},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(n,a,i,u){const s=i.createTracker(u);let l=s.move("[^");const c=i.enter("footnoteDefinition"),d=i.enter("label");return l+=s.move(i.safe(i.associationId(n),{before:l,after:"]"})),d(),l+=s.move("]:"),n.children&&n.children.length>0&&(s.shift(4),l+=s.move((t?` -`:" ")+i.indentLines(i.containerFlow(n,s.current()),t?wl:Im))),c(),l}}function Im(e,t,r){return t===0?e:wl(e,t,r)}function wl(e,t,r){return(r?"":" ")+e}const Nm=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Cl.peek=Mm;function Dm(){return{canContainEols:["delete"],enter:{strikethrough:Lm},exit:{strikethrough:Rm}}}function Om(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Nm}],handlers:{delete:Cl}}}function Lm(e){this.enter({type:"delete",children:[]},e)}function Rm(e){this.exit(e)}function Cl(e,t,r,n){const a=r.createTracker(n),i=r.enter("strikethrough");let u=a.move("~~");return u+=r.containerPhrasing(e,{...a.current(),before:u,after:"~"}),u+=a.move("~~"),i(),u}function Mm(){return"~"}function Pm(e){return e.length}function Bm(e,t){const r=t||{},n=(r.align||[]).concat(),a=r.stringLength||Pm,i=[],u=[],s=[],l=[];let c=0,d=-1;for(;++dc&&(c=e[d].length);++_l[_])&&(l[_]=M)}S.push(N)}u[d]=S,s[d]=D}let f=-1;if(typeof n=="object"&&"length"in n)for(;++fl[f]&&(l[f]=N),p[f]=N),g[f]=M}u.splice(1,0,g),s.splice(1,0,p),d=-1;const x=[];for(;++d "),i.shift(2);const u=r.indentLines(r.containerFlow(e,i.current()),zm);return a(),u}function zm(e,t,r){return">"+(r?"":" ")+e}function Um(e,t){return wu(e,t.inConstruct,!0)&&!wu(e,t.notInConstruct,!1)}function wu(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let n=-1;for(;++nu&&(u=i):i=1,a=n+t.length,n=r.indexOf(t,a);return u}function qm(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Ym(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function Gm(e,t,r,n){const a=Ym(r),i=e.value||"",u=a==="`"?"GraveAccent":"Tilde";if(qm(e,r)){const f=r.enter("codeIndented"),g=r.indentLines(i,Vm);return f(),g}const s=r.createTracker(n),l=a.repeat(Math.max(Il(i,a)+1,3)),c=r.enter("codeFenced");let d=s.move(l);if(e.lang){const f=r.enter(`codeFencedLang${u}`);d+=s.move(r.safe(e.lang,{before:d,after:" ",encode:["`"],...s.current()})),f()}if(e.lang&&e.meta){const f=r.enter(`codeFencedMeta${u}`);d+=s.move(" "),d+=s.move(r.safe(e.meta,{before:d,after:` -`,encode:["`"],...s.current()})),f()}return d+=s.move(` -`),i&&(d+=s.move(i+` -`)),d+=s.move(l),c(),d}function Vm(e,t,r){return(r?"":" ")+e}function di(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function jm(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("definition");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("[");return c+=l.move(r.safe(r.associationId(e),{before:c,after:"]",...l.current()})),c+=l.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":` -`,...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),u(),c}function Wm(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function pn(e){return"&#x"+e.toString(16).toUpperCase()+";"}function t0(e,t,r){const n=Ir(e),a=Ir(t);return n===void 0?a===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:n===1?a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Nl.peek=Xm;function Nl(e,t,r,n){const a=Wm(r),i=r.enter("emphasis"),u=r.createTracker(n),s=u.move(a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function Xm(e,t,r){return r.options.emphasis||"*"}function $m(e,t){let r=!1;return b0(e,function(n){if("value"in n&&/\r?\n|\r/.test(n.value)||n.type==="break")return r=!0,Aa}),!!((!e.depth||e.depth<3)&&ni(e)&&(t.options.setext||r))}function Qm(e,t,r,n){const a=Math.max(Math.min(6,e.depth||1),1),i=r.createTracker(n);if($m(e,r)){const d=r.enter("headingSetext"),f=r.enter("phrasing"),g=r.containerPhrasing(e,{...i.current(),before:` -`,after:` -`});return f(),d(),g+` -`+(a===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` -`))+1))}const u="#".repeat(a),s=r.enter("headingAtx"),l=r.enter("phrasing");i.move(u+" ");let c=r.containerPhrasing(e,{before:"# ",after:` -`,...i.current()});return/^[\t ]/.test(c)&&(c=pn(c.charCodeAt(0))+c.slice(1)),c=c?u+" "+c:u,r.options.closeAtx&&(c+=" "+u),l(),s(),c}Dl.peek=Km;function Dl(e){return e.value||""}function Km(){return"<"}Ol.peek=Jm;function Ol(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.enter("image");let s=r.enter("label");const l=r.createTracker(n);let c=l.move("![");return c+=l.move(r.safe(e.alt,{before:c,after:"]",...l.current()})),c+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(r.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=r.enter("destinationRaw"),c+=l.move(r.safe(e.url,{before:c,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=l.move(" "+a),c+=l.move(r.safe(e.title,{before:c,after:a,...l.current()})),c+=l.move(a),s()),c+=l.move(")"),u(),c}function Jm(){return"!"}Ll.peek=Zm;function Ll(e,t,r,n){const a=e.referenceType,i=r.enter("imageReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("![");const c=r.safe(e.alt,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function Zm(){return"!"}Rl.peek=e2;function Rl(e,t,r){let n=e.value||"",a="`",i=-1;for(;new RegExp("(^|[^`])"+a+"([^`]|$)").test(n);)a+="`";for(/[^ \r\n]/.test(n)&&(/^[ \r\n]/.test(n)&&/[ \r\n]$/.test(n)||/^`|`$/.test(n))&&(n=" "+n+" ");++i\u007F]/.test(e.url))}Pl.peek=t2;function Pl(e,t,r,n){const a=di(r),i=a==='"'?"Quote":"Apostrophe",u=r.createTracker(n);let s,l;if(Ml(e,r)){const d=r.stack;r.stack=[],s=r.enter("autolink");let f=u.move("<");return f+=u.move(r.containerPhrasing(e,{before:f,after:">",...u.current()})),f+=u.move(">"),s(),r.stack=d,f}s=r.enter("link"),l=r.enter("label");let c=u.move("[");return c+=u.move(r.containerPhrasing(e,{before:c,after:"](",...u.current()})),c+=u.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=r.enter("destinationLiteral"),c+=u.move("<"),c+=u.move(r.safe(e.url,{before:c,after:">",...u.current()})),c+=u.move(">")):(l=r.enter("destinationRaw"),c+=u.move(r.safe(e.url,{before:c,after:e.title?" ":")",...u.current()}))),l(),e.title&&(l=r.enter(`title${i}`),c+=u.move(" "+a),c+=u.move(r.safe(e.title,{before:c,after:a,...u.current()})),c+=u.move(a),l()),c+=u.move(")"),s(),c}function t2(e,t,r){return Ml(e,r)?"<":"["}Bl.peek=r2;function Bl(e,t,r,n){const a=e.referenceType,i=r.enter("linkReference");let u=r.enter("label");const s=r.createTracker(n);let l=s.move("[");const c=r.containerPhrasing(e,{before:l,after:"]",...s.current()});l+=s.move(c+"]["),u();const d=r.stack;r.stack=[],u=r.enter("reference");const f=r.safe(r.associationId(e),{before:l,after:"]",...s.current()});return u(),r.stack=d,i(),a==="full"||!c||c!==f?l+=s.move(f+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function r2(){return"["}function fi(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function n2(e){const t=fi(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function a2(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Fl(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function i2(e,t,r,n){const a=r.enter("list"),i=r.bulletCurrent;let u=e.ordered?a2(r):fi(r);const s=e.ordered?u==="."?")":".":n2(r);let l=t&&r.bulletLastUsed?u===r.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((u==="*"||u==="-")&&d&&(!d.children||!d.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(l=!0),Fl(r)===u&&d){let f=-1;for(;++f-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+i);let u=i.length+1;(a==="tab"||a==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(u=Math.ceil(u/4)*4);const s=r.createTracker(n);s.move(i+" ".repeat(u-i.length)),s.shift(u);const l=r.enter("listItem"),c=r.indentLines(r.containerFlow(e,s.current()),d);return l(),c;function d(f,g,p){return g?(p?"":" ".repeat(u))+f:(p?i:i+" ".repeat(u-i.length))+f}}function l2(e,t,r,n){const a=r.enter("paragraph"),i=r.enter("phrasing"),u=r.containerPhrasing(e,n);return i(),a(),u}const o2=vn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function c2(e,t,r,n){return(e.children.some(function(u){return o2(u)})?r.containerPhrasing:r.containerFlow).call(r,e,n)}function h2(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}Hl.peek=d2;function Hl(e,t,r,n){const a=h2(r),i=r.enter("strong"),u=r.createTracker(n),s=u.move(a+a);let l=u.move(r.containerPhrasing(e,{after:a,before:s,...u.current()}));const c=l.charCodeAt(0),d=t0(n.before.charCodeAt(n.before.length-1),c,a);d.inside&&(l=pn(c)+l.slice(1));const f=l.charCodeAt(l.length-1),g=t0(n.after.charCodeAt(0),f,a);g.inside&&(l=l.slice(0,-1)+pn(f));const p=u.move(a+a);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:d.outside},s+l+p}function d2(e,t,r){return r.options.strong||"*"}function f2(e,t,r,n){return r.safe(e.value,n)}function m2(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function p2(e,t,r){const n=(Fl(r)+(r.options.ruleSpaces?" ":"")).repeat(m2(r));return r.options.ruleSpaces?n.slice(0,-1):n}const zl={blockquote:Hm,break:Cu,code:Gm,definition:jm,emphasis:Nl,hardBreak:Cu,heading:Qm,html:Dl,image:Ol,imageReference:Ll,inlineCode:Rl,link:Pl,linkReference:Bl,list:i2,listItem:s2,paragraph:l2,root:c2,strong:Hl,text:f2,thematicBreak:p2};function g2(){return{enter:{table:b2,tableData:_u,tableHeader:_u,tableRow:T2},exit:{codeText:x2,table:E2,tableData:Z0,tableHeader:Z0,tableRow:Z0}}}function b2(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function E2(e){this.exit(e),this.data.inTable=void 0}function T2(e){this.enter({type:"tableRow",children:[]},e)}function Z0(e){this.exit(e)}function _u(e){this.enter({type:"tableCell",children:[]},e)}function x2(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,y2));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function y2(e,t){return t==="|"?t:e}function v2(e){const t=e||{},r=t.tableCellPadding,n=t.tablePipeAlign,a=t.stringLength,i=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:u,tableCell:l,tableRow:s}};function u(p,x,S,D){return c(d(p,S,D),p.align)}function s(p,x,S,D){const _=f(p,S,D),N=c([_]);return N.slice(0,N.indexOf(` -`))}function l(p,x,S,D){const _=S.enter("tableCell"),N=S.enter("phrasing"),M=S.containerPhrasing(p,{...D,before:i,after:i});return N(),_(),M}function c(p,x){return Bm(p,{align:x,alignDelimiters:n,padding:r,stringLength:a})}function d(p,x,S){const D=p.children;let _=-1;const N=[],M=x.enter("table");for(;++_0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const z2={tokenize:X2,partial:!0};function U2(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:V2,continuation:{tokenize:j2},exit:W2}},text:{91:{name:"gfmFootnoteCall",tokenize:G2},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:q2,resolveTo:Y2}}}}function q2(e,t,r){const n=this;let a=n.events.length;const i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let u;for(;a--;){const l=n.events[a][1];if(l.type==="labelImage"){u=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!u||!u._balanced)return r(l);const c=xt(n.sliceSerialize({start:u.end,end:n.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?r(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),t(l))}}function Y2(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const n={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},s=[e[r+1],e[r+2],["enter",n,t],e[r+3],e[r+4],["enter",a,t],["exit",a,t],["enter",i,t],["enter",u,t],["exit",u,t],["exit",i,t],e[e.length-2],e[e.length-1],["exit",n,t]];return e.splice(r,e.length-r+1,...s),e}function G2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i=0,u;return s;function s(f){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),l}function l(f){return f!==94?r(f):(e.enter("gfmFootnoteCallMarker"),e.consume(f),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(f){if(i>999||f===93&&!u||f===null||f===91||ve(f))return r(f);if(f===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return a.includes(xt(n.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(f)}return ve(f)||(u=!0),i++,e.consume(f),f===92?d:c}function d(f){return f===91||f===92||f===93?(e.consume(f),i++,c):c(f)}}function V2(e,t,r){const n=this,a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let i,u=0,s;return l;function l(x){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(x){return x===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):r(x)}function d(x){if(u>999||x===93&&!s||x===null||x===91||ve(x))return r(x);if(x===93){e.exit("chunkString");const S=e.exit("gfmFootnoteDefinitionLabelString");return i=xt(n.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return ve(x)||(s=!0),u++,e.consume(x),x===92?f:d}function f(x){return x===91||x===92||x===93?(e.consume(x),u++,d):d(x)}function g(x){return x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),a.includes(i)||a.push(i),fe(e,p,"gfmFootnoteDefinitionWhitespace")):r(x)}function p(x){return t(x)}}function j2(e,t,r){return e.check(yn,t,e.attempt(z2,t,r))}function W2(e){e.exit("gfmFootnoteDefinition")}function X2(e,t,r){const n=this;return fe(e,a,"gfmFootnoteDefinitionIndent",5);function a(i){const u=n.events[n.events.length-1];return u&&u[1].type==="gfmFootnoteDefinitionIndent"&&u[2].sliceSerialize(u[1],!0).length===4?t(i):r(i)}}function $2(e){let r=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:i,resolveAll:a};return r==null&&(r=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function a(u,s){let l=-1;for(;++l1?l(x):(u.consume(x),f++,p);if(f<2&&!r)return l(x);const D=u.exit("strikethroughSequenceTemporary"),_=Ir(x);return D._open=!_||_===2&&!!S,D._close=!S||S===2&&!!_,s(x)}}}class Q2{constructor(){this.map=[]}add(t,r,n){K2(this,t,r,n)}consume(t){if(this.map.sort(function(i,u){return i[0]-u[0]}),this.map.length===0)return;let r=this.map.length;const n=[];for(;r>0;)r-=1,n.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];n.push(t.slice()),t.length=0;let a=n.pop();for(;a;){for(const i of a)t.push(i);a=n.pop()}this.map.length=0}}function K2(e,t,r,n){let a=0;if(!(r===0&&n.length===0)){for(;a-1;){const ne=n.events[J][1].type;if(ne==="lineEnding"||ne==="linePrefix")J--;else break}const Q=J>-1?n.events[J][1].type:null,be=Q==="tableHead"||Q==="tableRow"?L:l;return be===L&&n.parser.lazy[n.now().line]?r(R):be(R)}function l(R){return e.enter("tableHead"),e.enter("tableRow"),c(R)}function c(R){return R===124||(u=!0,i+=1),d(R)}function d(R){return R===null?r(R):ae(R)?i>1?(i=0,n.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),p):r(R):ge(R)?fe(e,d,"whitespace")(R):(i+=1,u&&(u=!1,a+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),u=!0,d):(e.enter("data"),f(R)))}function f(R){return R===null||R===124||ve(R)?(e.exit("data"),d(R)):(e.consume(R),R===92?g:f)}function g(R){return R===92||R===124?(e.consume(R),f):f(R)}function p(R){return n.interrupt=!1,n.parser.lazy[n.now().line]?r(R):(e.enter("tableDelimiterRow"),u=!1,ge(R)?fe(e,x,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):x(R))}function x(R){return R===45||R===58?D(R):R===124?(u=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),S):j(R)}function S(R){return ge(R)?fe(e,D,"whitespace")(R):D(R)}function D(R){return R===58?(i+=1,u=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),_):R===45?(i+=1,_(R)):R===null||ae(R)?W(R):j(R)}function _(R){return R===45?(e.enter("tableDelimiterFiller"),N(R)):j(R)}function N(R){return R===45?(e.consume(R),N):R===58?(u=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),M):(e.exit("tableDelimiterFiller"),M(R))}function M(R){return ge(R)?fe(e,W,"whitespace")(R):W(R)}function W(R){return R===124?x(R):R===null||ae(R)?!u||a!==i?j(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):j(R)}function j(R){return r(R)}function L(R){return e.enter("tableRow"),ee(R)}function ee(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),ee):R===null||ae(R)?(e.exit("tableRow"),t(R)):ge(R)?fe(e,ee,"whitespace")(R):(e.enter("data"),re(R))}function re(R){return R===null||R===124||ve(R)?(e.exit("data"),ee(R)):(e.consume(R),R===92?K:re)}function K(R){return R===92||R===124?(e.consume(R),re):re(R)}}function t4(e,t){let r=-1,n=!0,a=0,i=[0,0,0,0],u=[0,0,0,0],s=!1,l=0,c,d,f;const g=new Q2;for(;++rr[2]+1){const x=r[2]+1,S=r[3]-r[2]-1;e.add(x,S,[])}}e.add(r[3]+1,0,[["exit",f,t]])}return a!==void 0&&(i.end=Object.assign({},wr(t.events,a)),e.add(a,0,[["exit",i,t]]),i=void 0),i}function Nu(e,t,r,n,a){const i=[],u=wr(t.events,r);a&&(a.end=Object.assign({},u),i.push(["exit",a,t])),n.end=Object.assign({},u),i.push(["exit",n,t]),e.add(r+1,0,i)}function wr(e,t){const r=e[t],n=r[0]==="enter"?"start":"end";return r[1][n]}const r4={name:"tasklistCheck",tokenize:a4};function n4(){return{text:{91:r4}}}function a4(e,t,r){const n=this;return a;function a(l){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?r(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),i)}function i(l){return ve(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),u):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),u):r(l)}function u(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):r(l)}function s(l){return ae(l)?t(l):ge(l)?e.check({tokenize:i4},t,r)(l):r(l)}}function i4(e,t,r){return fe(e,n,"whitespace");function n(a){return a===null?r(a):t(a)}}function u4(e){return rl([D2(),U2(),$2(e),Z2(),n4()])}const s4={};function l4(e){const t=this,r=e||s4,n=t.data(),a=n.micromarkExtensions||(n.micromarkExtensions=[]),i=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),u=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);a.push(u4(r)),i.push(C2()),u.push(_2(r))}function o4(){return{enter:{mathFlow:e,mathFlowFenceMeta:t,mathText:i},exit:{mathFlow:a,mathFlowFence:n,mathFlowFenceMeta:r,mathFlowValue:s,mathText:u,mathTextData:s}};function e(l){const c={type:"element",tagName:"code",properties:{className:["language-math","math-display"]},children:[]};this.enter({type:"math",meta:null,value:"",data:{hName:"pre",hChildren:[c]}},l)}function t(){this.buffer()}function r(){const l=this.resume(),c=this.stack[this.stack.length-1];c.type,c.meta=l}function n(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function a(l){const c=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c;const f=d.data.hChildren[0];f.type,f.tagName,f.children.push({type:"text",value:c}),this.data.mathFlowInside=void 0}function i(l){this.enter({type:"inlineMath",value:"",data:{hName:"code",hProperties:{className:["language-math","math-inline"]},hChildren:[]}},l),this.buffer()}function u(l){const c=this.resume(),d=this.stack[this.stack.length-1];d.type,this.exit(l),d.value=c,d.data.hChildren.push({type:"text",value:c})}function s(l){this.config.enter.data.call(this,l),this.config.exit.data.call(this,l)}}function c4(e){let t=(e||{}).singleDollarTextMath;return t==null&&(t=!0),n.peek=a,{unsafe:[{character:"\r",inConstruct:"mathFlowMeta"},{character:` -`,inConstruct:"mathFlowMeta"},{character:"$",after:t?void 0:"\\$",inConstruct:"phrasing"},{character:"$",inConstruct:"mathFlowMeta"},{atBreak:!0,character:"$",after:"\\$"}],handlers:{math:r,inlineMath:n}};function r(i,u,s,l){const c=i.value||"",d=s.createTracker(l),f="$".repeat(Math.max(Il(c,"$")+1,2)),g=s.enter("mathFlow");let p=d.move(f);if(i.meta){const x=s.enter("mathFlowMeta");p+=d.move(s.safe(i.meta,{after:` -`,before:p,encode:["$"],...d.current()})),x()}return p+=d.move(` -`),c&&(p+=d.move(c+` -`)),p+=d.move(f),g(),p}function n(i,u,s){let l=i.value||"",c=1;for(t||c++;new RegExp("(^|[^$])"+"\\$".repeat(c)+"([^$]|$)").test(l);)c++;const d="$".repeat(c);/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^\$|\$$/.test(l))&&(l=" "+l+" ");let f=-1;for(;++f15?c="…"+s.slice(a-15,a):c=s.slice(0,a);var d;i+15e.replace(E4,"-$1").toLowerCase(),x4={"&":"&",">":">","<":"<",'"':""","'":"'"},y4=/[&><"']/g,Ve=e=>String(e).replace(y4,t=>x4[t]),$n=e=>e.type==="ordgroup"||e.type==="color"?e.body.length===1?$n(e.body[0]):e:e.type==="font"?$n(e.body):e,v4=new Set(["mathord","textord","atom"]),qt=e=>v4.has($n(e).type),A4=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},_a={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function k4(e){if(typeof e!="string")return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}function S4(e){if(e.default!==void 0)return e.default;var t=Array.isArray(e.type)?e.type[0]:e.type;return k4(t)}function w4(e,t,r,n){var a=r[t];e[t]=a!==void 0?n.processor?n.processor(a):a:S4(n)}class pi{constructor(t){t===void 0&&(t={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,t=t||{};for(var r of Object.keys(_a)){var n=_a[r];n&&w4(this,r,t,n)}}reportNonstrict(t,r,n){var a=this.strict;if(typeof a=="function"&&(a=a(t,r,n)),!(!a||a==="ignore")){if(a===!0||a==="error")throw new Y("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+t+"]"),n);a==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]"))}}useStrictBehavior(t,r,n){var a=this.strict;if(typeof a=="function")try{a=a(t,r,n)}catch{a="error"}return!a||a==="ignore"?!1:a===!0||a==="error"?!0:a==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+r+" ["+t+"]")),!1)}isTrusted(t){if("url"in t&&t.url&&!t.protocol){var r=A4(t.url);if(r==null)return!1;t.protocol=r}var n=typeof this.trust=="function"?this.trust(t):this.trust;return!!n}}class jt{constructor(t,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=n}sup(){return kt[C4[this.id]]}sub(){return kt[_4[this.id]]}fracNum(){return kt[I4[this.id]]}fracDen(){return kt[N4[this.id]]}cramp(){return kt[D4[this.id]]}text(){return kt[O4[this.id]]}isTight(){return this.size>=2}}var gi=0,r0=1,_r=2,Ht=3,gn=4,gt=5,Dr=6,Je=7,kt=[new jt(gi,0,!1),new jt(r0,0,!0),new jt(_r,1,!1),new jt(Ht,1,!0),new jt(gn,2,!1),new jt(gt,2,!0),new jt(Dr,3,!1),new jt(Je,3,!0)],C4=[gn,gt,gn,gt,Dr,Je,Dr,Je],_4=[gt,gt,gt,gt,Je,Je,Je,Je],I4=[_r,Ht,gn,gt,Dr,Je,Dr,Je],N4=[Ht,Ht,gt,gt,Je,Je,Je,Je],D4=[r0,r0,Ht,Ht,gt,gt,Je,Je],O4=[gi,r0,_r,Ht,_r,Ht,_r,Ht],oe={DISPLAY:kt[gi],TEXT:kt[_r],SCRIPT:kt[gn],SCRIPTSCRIPT:kt[Dr]},Ia=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function L4(e){for(var t=0;t=a[0]&&e<=a[1])return r.name}return null}var Qn=[];Ia.forEach(e=>e.blocks.forEach(t=>Qn.push(...t)));function $l(e){for(var t=0;t=Qn[t]&&e<=Qn[t+1])return!0;return!1}var Fe=e=>e+" "+e,kr=80,R4=function(t,r){return"M95,"+(622+t+r)+` -c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 -c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 -c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 -s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 -c69,-144,104.5,-217.7,106.5,-221 -l`+t/2.075+" -"+t+` -c5.3,-9.3,12,-14,20,-14 -H400000v`+(40+t)+`H845.2724 -s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 -c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},M4=function(t,r){return"M263,"+(601+t+r)+`c0.7,0,18,39.7,52,119 -c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 -c340,-704.7,510.7,-1060.3,512,-1067 -l`+t/2.084+" -"+t+` -c4.7,-7.3,11,-11,19,-11 -H40000v`+(40+t)+`H1012.3 -s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 -c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 -s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 -c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},P4=function(t,r){return"M983 "+(10+t+r)+` -l`+t/3.13+" -"+t+` -c4,-6.7,10,-10,18,-10 H400000v`+(40+t)+` -H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 -s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 -c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 -c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 -c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 -c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},B4=function(t,r){return"M424,"+(2398+t+r)+` -c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 -c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 -s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 -s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 -l`+t/4.223+" -"+t+`c4,-6.7,10,-10,18,-10 H400000 -v`+(40+t)+`H1014.6 -s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 -c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2z M`+(1001+t)+" "+r+` -h400000v`+(40+t)+"h-400000z"},F4=function(t,r){return"M473,"+(2713+t+r)+` -c339.3,-1799.3,509.3,-2700,510,-2702 l`+t/5.298+" -"+t+` -c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+t)+`H1017.7 -s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 -c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 -s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+t)+" "+r+"h400000v"+(40+t)+"H1017.7z"},H4=function(t){var r=t/2;return"M400000 "+t+" H0 L"+r+" 0 l65 45 L145 "+(t-80)+" H400000z"},z4=function(t,r,n){var a=n-54-r-t;return"M702 "+(t+r)+"H400000"+(40+t)+` -H742v`+a+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 -h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 -c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+r+"H400000v"+(40+t)+"H742z"},U4=function(t,r,n){r=1e3*r;var a="";switch(t){case"sqrtMain":a=R4(r,kr);break;case"sqrtSize1":a=M4(r,kr);break;case"sqrtSize2":a=P4(r,kr);break;case"sqrtSize3":a=B4(r,kr);break;case"sqrtSize4":a=F4(r,kr);break;case"sqrtTall":a=z4(r,kr,n)}return a},q4=function(t,r){switch(t){case"⎜":return Fe("M291 0 H417 V"+r+" H291z");case"∣":return Fe("M145 0 H188 V"+r+" H145z");case"∥":return Fe("M145 0 H188 V"+r+" H145z")+Fe("M367 0 H410 V"+r+" H367z");case"⎟":return Fe("M457 0 H583 V"+r+" H457z");case"⎢":return Fe("M319 0 H403 V"+r+" H319z");case"⎥":return Fe("M263 0 H347 V"+r+" H263z");case"⎪":return Fe("M384 0 H504 V"+r+" H384z");case"⏐":return Fe("M312 0 H355 V"+r+" H312z");case"‖":return Fe("M257 0 H300 V"+r+" H257z")+Fe("M478 0 H521 V"+r+" H478z");default:return""}},Ou={doubleleftarrow:`M262 157 -l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 - 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 - 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 -c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 - 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 --86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 --2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z -m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l --10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 - 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 --33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 --17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 --13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 -c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 --107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 - 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 --5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 -c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 - 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 - 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 - l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 --45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 - 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 - 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 - 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 --331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 -H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 - 435 0h399565z`,leftgroupunder:`M400000 262 -H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 - 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 --3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 --18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 --196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 - 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 --4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 --10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z -m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 - 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 - 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 --152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 - 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 --2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 -v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 --83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 --68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 - 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:Fe("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),leftbracketunder:Fe("M0 0 h120 V290 H399995 v120 H0z"),leftbracketover:Fe("M0 440 h120 V150 H399995 v-120 H0z"),leftmapsto:Fe("M40 281 V448H0V74H40V241H400000v40z"),leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 --.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 -c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 - 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:Fe("M0 50 h400000 v40H0z m0 194h40000v40H0z"),midbrace:`M200428 334 -c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 --53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 - 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 - 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 -c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 - 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 - 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 --5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 --320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z -m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 -60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 --451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z -m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 -c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 --480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z -m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 -85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 --707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z -m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 -c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 --16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 - 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 - 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 --40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 - 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l --6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 -s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 -c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 - 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 --174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 - 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 - 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 --3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 --10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 - 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 --18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 - 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z -m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 - 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 --7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 --27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 - 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 - 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 --64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z -m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 - 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 --13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 - 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:Fe("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),rightbracketunder:Fe("M399995 0 h-120 V290 H0 v120 H400000z"),rightbracketover:Fe("M399995 440 h-120 V150 H0 v-120 H399995z"),rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 - 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 --52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 --167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 - 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 --70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 --40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 --37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 - 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 -c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 - 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 - 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 --19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 - 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 --2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 - 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 - 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 --68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 --8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 - 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 -c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 - 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 --11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 - 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 - 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 - -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 --11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 - 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 - 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 - -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 -3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 -10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 --1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 --7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 -H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 -c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 -c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 --11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, --5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, --11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 -c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 -c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 -s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 -121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 -s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 -c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z -M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 --27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 -13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 --84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 --119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 --12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 -151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 -c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 -c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 -c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z -M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 -c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, -1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, --152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z -M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 -c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, --231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 -c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Y4=function(t,r){switch(t){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 v84 h347 v-84 -H403z M403 1759 V0 H319 V1759 v`+r+" v1759 v84 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z -M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z -M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z -MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z -M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z -M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 -c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, --36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, -949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 -c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, --544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 -l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, --210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, -63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 -c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` -c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 -c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 -c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 -c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 -l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};function G4(e){return"toText"in e}class Br{constructor(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(t){return this.classes.includes(t)}toNode(){for(var t=document.createDocumentFragment(),r=0;r{if(G4(t))return t.toText();throw new Error("Expected MathDomNode with toText, got "+t.constructor.name)}).join("")}}var Na={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},V4={ex:!0,em:!0,mu:!0},Ql=function(t){return typeof t!="string"&&(t=t.unit),t in Na||t in V4||t==="ex"},Ie=function(t,r){var n;if(t.unit in Na)n=Na[t.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(t.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var a;if(r.style.isTight()?a=r.havingStyle(r.style.text()):a=r,t.unit==="ex")n=a.fontMetrics().xHeight;else if(t.unit==="em")n=a.fontMetrics().quad;else throw new Y("Invalid unit: '"+t.unit+"'");a!==r&&(n*=a.sizeMultiplier/r.sizeMultiplier)}return Math.min(t.number*n,r.maxSize)},V=function(t){return+t.toFixed(4)+"em"},Jt=function(t){return t.filter(r=>r).join(" ")},bi=function(t){var r="";for(var n of Object.keys(t)){var a=t[n];a!==void 0&&(r+=T4(n)+":"+a+";")}return r},Kl=function(t,r,n){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var a=r.getColor();a&&(this.style.color=a)}},Jl=function(t){var r=document.createElement(t);r.className=Jt(this.classes),Object.assign(r.style,this.style);for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,Zl=function(t){var r="<"+t;this.classes.length&&(r+=' class="'+Ve(Jt(this.classes))+'"');var n=bi(this.style);n&&(r+=' style="'+Ve(n)+'"');for(var a of Object.keys(this.attributes)){if(j4.test(a))throw new Y("Invalid attribute name '"+a+"'");r+=" "+a+'="'+Ve(this.attributes[a])+'"'}r+=">";for(var i=0;i",r};class Fr{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,this.italic=void 0,Kl.call(this,t,n,a),this.children=r||[]}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"span")}toMarkup(){return Zl.call(this,"span")}}class E0{constructor(t,r,n,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Kl.call(this,r,a),this.children=n||[],this.setAttribute("href",t)}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Jl.call(this,"a")}toMarkup(){return Zl.call(this,"a")}}class W4{constructor(t,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=t,this.classes=["mord"],this.height=0,this.depth=0,this.maxFontSize=0,this.style=n}hasClass(t){return this.classes.includes(t)}toNode(){var t=document.createElement("img");return t.src=this.src,t.alt=this.alt,t.className="mord",Object.assign(t.style,this.style),t}toMarkup(){var t=''+Ve(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=V(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=Jt(this.classes)),Object.keys(this.style).length>0&&(r=r||document.createElement("span"),Object.assign(r.style,this.style)),r?(r.appendChild(t),r):t}toMarkup(){var t=!1,r="0&&(n+="margin-right:"+V(this.italic)+";"),n+=bi(this.style),n&&(t=!0,r+=' style="'+Ve(n)+'"');var a=Ve(this.text);return t?(r+=">",r+=a,r+="",r):a}}class zt{constructor(t,r){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=r||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"svg");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var a=0;a':''}}class Da{constructor(t){this.attributes=void 0,this.attributes=t||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"line");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var t=" but got "+String(e)+".")}var K4=e=>e instanceof Fr||e instanceof E0||e instanceof Br,wt={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Hn={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Lu={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function J4(e,t){wt[e]=t}function Ei(e,t,r){if(!wt[t])throw new Error("Font metrics not found for font: "+t+".");var n=e.charCodeAt(0),a=wt[t][n];if(!a&&e[0]in Lu&&(n=Lu[e[0]].charCodeAt(0),a=wt[t][n]),!a&&r==="text"&&$l(n)&&(a=wt[t][77]),a)return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}var ea={};function Z4(e){var t;if(e>=5?t=0:e>=3?t=1:t=2,!ea[t]){var r=ea[t]={cssEmPerMu:Hn.quad[t]/18};for(var n in Hn)Hn.hasOwnProperty(n)&&(r[n]=Hn[n][t])}return ea[t]}var we={math:{},text:{}};function h(e,t,r,n,a,i){we[e][a]={font:t,group:r,replace:n},i&&n&&(we[e][n]=we[e][a])}var m="math",F="text",b="main",v="ams",Ce="accent-token",te="bin",Ze="close",Hr="inner",ie="mathord",Pe="op-token",ht="open",kn="punct",A="rel",Yt="spacing",I="textord";h(m,b,A,"≡","\\equiv",!0);h(m,b,A,"≺","\\prec",!0);h(m,b,A,"≻","\\succ",!0);h(m,b,A,"∼","\\sim",!0);h(m,b,A,"⊥","\\perp");h(m,b,A,"⪯","\\preceq",!0);h(m,b,A,"⪰","\\succeq",!0);h(m,b,A,"≃","\\simeq",!0);h(m,b,A,"∣","\\mid",!0);h(m,b,A,"≪","\\ll",!0);h(m,b,A,"≫","\\gg",!0);h(m,b,A,"≍","\\asymp",!0);h(m,b,A,"∥","\\parallel");h(m,b,A,"⋈","\\bowtie",!0);h(m,b,A,"⌣","\\smile",!0);h(m,b,A,"⊑","\\sqsubseteq",!0);h(m,b,A,"⊒","\\sqsupseteq",!0);h(m,b,A,"≐","\\doteq",!0);h(m,b,A,"⌢","\\frown",!0);h(m,b,A,"∋","\\ni",!0);h(m,b,A,"∝","\\propto",!0);h(m,b,A,"⊢","\\vdash",!0);h(m,b,A,"⊣","\\dashv",!0);h(m,b,A,"∋","\\owns");h(m,b,kn,".","\\ldotp");h(m,b,kn,"⋅","\\cdotp");h(m,b,kn,"⋅","·");h(F,b,I,"⋅","·");h(m,b,I,"#","\\#");h(F,b,I,"#","\\#");h(m,b,I,"&","\\&");h(F,b,I,"&","\\&");h(m,b,I,"ℵ","\\aleph",!0);h(m,b,I,"∀","\\forall",!0);h(m,b,I,"ℏ","\\hbar",!0);h(m,b,I,"∃","\\exists",!0);h(m,b,I,"∇","\\nabla",!0);h(m,b,I,"♭","\\flat",!0);h(m,b,I,"ℓ","\\ell",!0);h(m,b,I,"♮","\\natural",!0);h(m,b,I,"♣","\\clubsuit",!0);h(m,b,I,"℘","\\wp",!0);h(m,b,I,"♯","\\sharp",!0);h(m,b,I,"♢","\\diamondsuit",!0);h(m,b,I,"ℜ","\\Re",!0);h(m,b,I,"♡","\\heartsuit",!0);h(m,b,I,"ℑ","\\Im",!0);h(m,b,I,"♠","\\spadesuit",!0);h(m,b,I,"§","\\S",!0);h(F,b,I,"§","\\S");h(m,b,I,"¶","\\P",!0);h(F,b,I,"¶","\\P");h(m,b,I,"†","\\dag");h(F,b,I,"†","\\dag");h(F,b,I,"†","\\textdagger");h(m,b,I,"‡","\\ddag");h(F,b,I,"‡","\\ddag");h(F,b,I,"‡","\\textdaggerdbl");h(m,b,Ze,"⎱","\\rmoustache",!0);h(m,b,ht,"⎰","\\lmoustache",!0);h(m,b,Ze,"⟯","\\rgroup",!0);h(m,b,ht,"⟮","\\lgroup",!0);h(m,b,te,"∓","\\mp",!0);h(m,b,te,"⊖","\\ominus",!0);h(m,b,te,"⊎","\\uplus",!0);h(m,b,te,"⊓","\\sqcap",!0);h(m,b,te,"∗","\\ast");h(m,b,te,"⊔","\\sqcup",!0);h(m,b,te,"◯","\\bigcirc",!0);h(m,b,te,"∙","\\bullet",!0);h(m,b,te,"‡","\\ddagger");h(m,b,te,"≀","\\wr",!0);h(m,b,te,"⨿","\\amalg");h(m,b,te,"&","\\And");h(m,b,A,"⟵","\\longleftarrow",!0);h(m,b,A,"⇐","\\Leftarrow",!0);h(m,b,A,"⟸","\\Longleftarrow",!0);h(m,b,A,"⟶","\\longrightarrow",!0);h(m,b,A,"⇒","\\Rightarrow",!0);h(m,b,A,"⟹","\\Longrightarrow",!0);h(m,b,A,"↔","\\leftrightarrow",!0);h(m,b,A,"⟷","\\longleftrightarrow",!0);h(m,b,A,"⇔","\\Leftrightarrow",!0);h(m,b,A,"⟺","\\Longleftrightarrow",!0);h(m,b,A,"↦","\\mapsto",!0);h(m,b,A,"⟼","\\longmapsto",!0);h(m,b,A,"↗","\\nearrow",!0);h(m,b,A,"↩","\\hookleftarrow",!0);h(m,b,A,"↪","\\hookrightarrow",!0);h(m,b,A,"↘","\\searrow",!0);h(m,b,A,"↼","\\leftharpoonup",!0);h(m,b,A,"⇀","\\rightharpoonup",!0);h(m,b,A,"↙","\\swarrow",!0);h(m,b,A,"↽","\\leftharpoondown",!0);h(m,b,A,"⇁","\\rightharpoondown",!0);h(m,b,A,"↖","\\nwarrow",!0);h(m,b,A,"⇌","\\rightleftharpoons",!0);h(m,v,A,"≮","\\nless",!0);h(m,v,A,"","\\@nleqslant");h(m,v,A,"","\\@nleqq");h(m,v,A,"⪇","\\lneq",!0);h(m,v,A,"≨","\\lneqq",!0);h(m,v,A,"","\\@lvertneqq");h(m,v,A,"⋦","\\lnsim",!0);h(m,v,A,"⪉","\\lnapprox",!0);h(m,v,A,"⊀","\\nprec",!0);h(m,v,A,"⋠","\\npreceq",!0);h(m,v,A,"⋨","\\precnsim",!0);h(m,v,A,"⪹","\\precnapprox",!0);h(m,v,A,"≁","\\nsim",!0);h(m,v,A,"","\\@nshortmid");h(m,v,A,"∤","\\nmid",!0);h(m,v,A,"⊬","\\nvdash",!0);h(m,v,A,"⊭","\\nvDash",!0);h(m,v,A,"⋪","\\ntriangleleft");h(m,v,A,"⋬","\\ntrianglelefteq",!0);h(m,v,A,"⊊","\\subsetneq",!0);h(m,v,A,"","\\@varsubsetneq");h(m,v,A,"⫋","\\subsetneqq",!0);h(m,v,A,"","\\@varsubsetneqq");h(m,v,A,"≯","\\ngtr",!0);h(m,v,A,"","\\@ngeqslant");h(m,v,A,"","\\@ngeqq");h(m,v,A,"⪈","\\gneq",!0);h(m,v,A,"≩","\\gneqq",!0);h(m,v,A,"","\\@gvertneqq");h(m,v,A,"⋧","\\gnsim",!0);h(m,v,A,"⪊","\\gnapprox",!0);h(m,v,A,"⊁","\\nsucc",!0);h(m,v,A,"⋡","\\nsucceq",!0);h(m,v,A,"⋩","\\succnsim",!0);h(m,v,A,"⪺","\\succnapprox",!0);h(m,v,A,"≆","\\ncong",!0);h(m,v,A,"","\\@nshortparallel");h(m,v,A,"∦","\\nparallel",!0);h(m,v,A,"⊯","\\nVDash",!0);h(m,v,A,"⋫","\\ntriangleright");h(m,v,A,"⋭","\\ntrianglerighteq",!0);h(m,v,A,"","\\@nsupseteqq");h(m,v,A,"⊋","\\supsetneq",!0);h(m,v,A,"","\\@varsupsetneq");h(m,v,A,"⫌","\\supsetneqq",!0);h(m,v,A,"","\\@varsupsetneqq");h(m,v,A,"⊮","\\nVdash",!0);h(m,v,A,"⪵","\\precneqq",!0);h(m,v,A,"⪶","\\succneqq",!0);h(m,v,A,"","\\@nsubseteqq");h(m,v,te,"⊴","\\unlhd");h(m,v,te,"⊵","\\unrhd");h(m,v,A,"↚","\\nleftarrow",!0);h(m,v,A,"↛","\\nrightarrow",!0);h(m,v,A,"⇍","\\nLeftarrow",!0);h(m,v,A,"⇏","\\nRightarrow",!0);h(m,v,A,"↮","\\nleftrightarrow",!0);h(m,v,A,"⇎","\\nLeftrightarrow",!0);h(m,v,A,"△","\\vartriangle");h(m,v,I,"ℏ","\\hslash");h(m,v,I,"▽","\\triangledown");h(m,v,I,"◊","\\lozenge");h(m,v,I,"Ⓢ","\\circledS");h(m,v,I,"®","\\circledR");h(F,v,I,"®","\\circledR");h(m,v,I,"∡","\\measuredangle",!0);h(m,v,I,"∄","\\nexists");h(m,v,I,"℧","\\mho");h(m,v,I,"Ⅎ","\\Finv",!0);h(m,v,I,"⅁","\\Game",!0);h(m,v,I,"‵","\\backprime");h(m,v,I,"▲","\\blacktriangle");h(m,v,I,"▼","\\blacktriangledown");h(m,v,I,"■","\\blacksquare");h(m,v,I,"⧫","\\blacklozenge");h(m,v,I,"★","\\bigstar");h(m,v,I,"∢","\\sphericalangle",!0);h(m,v,I,"∁","\\complement",!0);h(m,v,I,"ð","\\eth",!0);h(F,b,I,"ð","ð");h(m,v,I,"╱","\\diagup");h(m,v,I,"╲","\\diagdown");h(m,v,I,"□","\\square");h(m,v,I,"□","\\Box");h(m,v,I,"◊","\\Diamond");h(m,v,I,"¥","\\yen",!0);h(F,v,I,"¥","\\yen",!0);h(m,v,I,"✓","\\checkmark",!0);h(F,v,I,"✓","\\checkmark");h(m,v,I,"ℶ","\\beth",!0);h(m,v,I,"ℸ","\\daleth",!0);h(m,v,I,"ℷ","\\gimel",!0);h(m,v,I,"ϝ","\\digamma",!0);h(m,v,I,"ϰ","\\varkappa");h(m,v,ht,"┌","\\@ulcorner",!0);h(m,v,Ze,"┐","\\@urcorner",!0);h(m,v,ht,"└","\\@llcorner",!0);h(m,v,Ze,"┘","\\@lrcorner",!0);h(m,v,A,"≦","\\leqq",!0);h(m,v,A,"⩽","\\leqslant",!0);h(m,v,A,"⪕","\\eqslantless",!0);h(m,v,A,"≲","\\lesssim",!0);h(m,v,A,"⪅","\\lessapprox",!0);h(m,v,A,"≊","\\approxeq",!0);h(m,v,te,"⋖","\\lessdot");h(m,v,A,"⋘","\\lll",!0);h(m,v,A,"≶","\\lessgtr",!0);h(m,v,A,"⋚","\\lesseqgtr",!0);h(m,v,A,"⪋","\\lesseqqgtr",!0);h(m,v,A,"≑","\\doteqdot");h(m,v,A,"≓","\\risingdotseq",!0);h(m,v,A,"≒","\\fallingdotseq",!0);h(m,v,A,"∽","\\backsim",!0);h(m,v,A,"⋍","\\backsimeq",!0);h(m,v,A,"⫅","\\subseteqq",!0);h(m,v,A,"⋐","\\Subset",!0);h(m,v,A,"⊏","\\sqsubset",!0);h(m,v,A,"≼","\\preccurlyeq",!0);h(m,v,A,"⋞","\\curlyeqprec",!0);h(m,v,A,"≾","\\precsim",!0);h(m,v,A,"⪷","\\precapprox",!0);h(m,v,A,"⊲","\\vartriangleleft");h(m,v,A,"⊴","\\trianglelefteq");h(m,v,A,"⊨","\\vDash",!0);h(m,v,A,"⊪","\\Vvdash",!0);h(m,v,A,"⌣","\\smallsmile");h(m,v,A,"⌢","\\smallfrown");h(m,v,A,"≏","\\bumpeq",!0);h(m,v,A,"≎","\\Bumpeq",!0);h(m,v,A,"≧","\\geqq",!0);h(m,v,A,"⩾","\\geqslant",!0);h(m,v,A,"⪖","\\eqslantgtr",!0);h(m,v,A,"≳","\\gtrsim",!0);h(m,v,A,"⪆","\\gtrapprox",!0);h(m,v,te,"⋗","\\gtrdot");h(m,v,A,"⋙","\\ggg",!0);h(m,v,A,"≷","\\gtrless",!0);h(m,v,A,"⋛","\\gtreqless",!0);h(m,v,A,"⪌","\\gtreqqless",!0);h(m,v,A,"≖","\\eqcirc",!0);h(m,v,A,"≗","\\circeq",!0);h(m,v,A,"≜","\\triangleq",!0);h(m,v,A,"∼","\\thicksim");h(m,v,A,"≈","\\thickapprox");h(m,v,A,"⫆","\\supseteqq",!0);h(m,v,A,"⋑","\\Supset",!0);h(m,v,A,"⊐","\\sqsupset",!0);h(m,v,A,"≽","\\succcurlyeq",!0);h(m,v,A,"⋟","\\curlyeqsucc",!0);h(m,v,A,"≿","\\succsim",!0);h(m,v,A,"⪸","\\succapprox",!0);h(m,v,A,"⊳","\\vartriangleright");h(m,v,A,"⊵","\\trianglerighteq");h(m,v,A,"⊩","\\Vdash",!0);h(m,v,A,"∣","\\shortmid");h(m,v,A,"∥","\\shortparallel");h(m,v,A,"≬","\\between",!0);h(m,v,A,"⋔","\\pitchfork",!0);h(m,v,A,"∝","\\varpropto");h(m,v,A,"◀","\\blacktriangleleft");h(m,v,A,"∴","\\therefore",!0);h(m,v,A,"∍","\\backepsilon");h(m,v,A,"▶","\\blacktriangleright");h(m,v,A,"∵","\\because",!0);h(m,v,A,"⋘","\\llless");h(m,v,A,"⋙","\\gggtr");h(m,v,te,"⊲","\\lhd");h(m,v,te,"⊳","\\rhd");h(m,v,A,"≂","\\eqsim",!0);h(m,b,A,"⋈","\\Join");h(m,v,A,"≑","\\Doteq",!0);h(m,v,te,"∔","\\dotplus",!0);h(m,v,te,"∖","\\smallsetminus");h(m,v,te,"⋒","\\Cap",!0);h(m,v,te,"⋓","\\Cup",!0);h(m,v,te,"⩞","\\doublebarwedge",!0);h(m,v,te,"⊟","\\boxminus",!0);h(m,v,te,"⊞","\\boxplus",!0);h(m,v,te,"⋇","\\divideontimes",!0);h(m,v,te,"⋉","\\ltimes",!0);h(m,v,te,"⋊","\\rtimes",!0);h(m,v,te,"⋋","\\leftthreetimes",!0);h(m,v,te,"⋌","\\rightthreetimes",!0);h(m,v,te,"⋏","\\curlywedge",!0);h(m,v,te,"⋎","\\curlyvee",!0);h(m,v,te,"⊝","\\circleddash",!0);h(m,v,te,"⊛","\\circledast",!0);h(m,v,te,"⋅","\\centerdot");h(m,v,te,"⊺","\\intercal",!0);h(m,v,te,"⋒","\\doublecap");h(m,v,te,"⋓","\\doublecup");h(m,v,te,"⊠","\\boxtimes",!0);h(m,v,A,"⇢","\\dashrightarrow",!0);h(m,v,A,"⇠","\\dashleftarrow",!0);h(m,v,A,"⇇","\\leftleftarrows",!0);h(m,v,A,"⇆","\\leftrightarrows",!0);h(m,v,A,"⇚","\\Lleftarrow",!0);h(m,v,A,"↞","\\twoheadleftarrow",!0);h(m,v,A,"↢","\\leftarrowtail",!0);h(m,v,A,"↫","\\looparrowleft",!0);h(m,v,A,"⇋","\\leftrightharpoons",!0);h(m,v,A,"↶","\\curvearrowleft",!0);h(m,v,A,"↺","\\circlearrowleft",!0);h(m,v,A,"↰","\\Lsh",!0);h(m,v,A,"⇈","\\upuparrows",!0);h(m,v,A,"↿","\\upharpoonleft",!0);h(m,v,A,"⇃","\\downharpoonleft",!0);h(m,b,A,"⊶","\\origof",!0);h(m,b,A,"⊷","\\imageof",!0);h(m,v,A,"⊸","\\multimap",!0);h(m,v,A,"↭","\\leftrightsquigarrow",!0);h(m,v,A,"⇉","\\rightrightarrows",!0);h(m,v,A,"⇄","\\rightleftarrows",!0);h(m,v,A,"↠","\\twoheadrightarrow",!0);h(m,v,A,"↣","\\rightarrowtail",!0);h(m,v,A,"↬","\\looparrowright",!0);h(m,v,A,"↷","\\curvearrowright",!0);h(m,v,A,"↻","\\circlearrowright",!0);h(m,v,A,"↱","\\Rsh",!0);h(m,v,A,"⇊","\\downdownarrows",!0);h(m,v,A,"↾","\\upharpoonright",!0);h(m,v,A,"⇂","\\downharpoonright",!0);h(m,v,A,"⇝","\\rightsquigarrow",!0);h(m,v,A,"⇝","\\leadsto");h(m,v,A,"⇛","\\Rrightarrow",!0);h(m,v,A,"↾","\\restriction");h(m,b,I,"‘","`");h(m,b,I,"$","\\$");h(F,b,I,"$","\\$");h(F,b,I,"$","\\textdollar");h(m,b,I,"%","\\%");h(F,b,I,"%","\\%");h(m,b,I,"_","\\_");h(F,b,I,"_","\\_");h(F,b,I,"_","\\textunderscore");h(m,b,I,"∠","\\angle",!0);h(m,b,I,"∞","\\infty",!0);h(m,b,I,"′","\\prime");h(m,b,I,"△","\\triangle");h(m,b,I,"Γ","\\Gamma",!0);h(m,b,I,"Δ","\\Delta",!0);h(m,b,I,"Θ","\\Theta",!0);h(m,b,I,"Λ","\\Lambda",!0);h(m,b,I,"Ξ","\\Xi",!0);h(m,b,I,"Π","\\Pi",!0);h(m,b,I,"Σ","\\Sigma",!0);h(m,b,I,"Υ","\\Upsilon",!0);h(m,b,I,"Φ","\\Phi",!0);h(m,b,I,"Ψ","\\Psi",!0);h(m,b,I,"Ω","\\Omega",!0);h(m,b,I,"A","Α");h(m,b,I,"B","Β");h(m,b,I,"E","Ε");h(m,b,I,"Z","Ζ");h(m,b,I,"H","Η");h(m,b,I,"I","Ι");h(m,b,I,"K","Κ");h(m,b,I,"M","Μ");h(m,b,I,"N","Ν");h(m,b,I,"O","Ο");h(m,b,I,"P","Ρ");h(m,b,I,"T","Τ");h(m,b,I,"X","Χ");h(m,b,I,"¬","\\neg",!0);h(m,b,I,"¬","\\lnot");h(m,b,I,"⊤","\\top");h(m,b,I,"⊥","\\bot");h(m,b,I,"∅","\\emptyset");h(m,v,I,"∅","\\varnothing");h(m,b,ie,"α","\\alpha",!0);h(m,b,ie,"β","\\beta",!0);h(m,b,ie,"γ","\\gamma",!0);h(m,b,ie,"δ","\\delta",!0);h(m,b,ie,"ϵ","\\epsilon",!0);h(m,b,ie,"ζ","\\zeta",!0);h(m,b,ie,"η","\\eta",!0);h(m,b,ie,"θ","\\theta",!0);h(m,b,ie,"ι","\\iota",!0);h(m,b,ie,"κ","\\kappa",!0);h(m,b,ie,"λ","\\lambda",!0);h(m,b,ie,"μ","\\mu",!0);h(m,b,ie,"ν","\\nu",!0);h(m,b,ie,"ξ","\\xi",!0);h(m,b,ie,"ο","\\omicron",!0);h(m,b,ie,"π","\\pi",!0);h(m,b,ie,"ρ","\\rho",!0);h(m,b,ie,"σ","\\sigma",!0);h(m,b,ie,"τ","\\tau",!0);h(m,b,ie,"υ","\\upsilon",!0);h(m,b,ie,"ϕ","\\phi",!0);h(m,b,ie,"χ","\\chi",!0);h(m,b,ie,"ψ","\\psi",!0);h(m,b,ie,"ω","\\omega",!0);h(m,b,ie,"ε","\\varepsilon",!0);h(m,b,ie,"ϑ","\\vartheta",!0);h(m,b,ie,"ϖ","\\varpi",!0);h(m,b,ie,"ϱ","\\varrho",!0);h(m,b,ie,"ς","\\varsigma",!0);h(m,b,ie,"φ","\\varphi",!0);h(m,b,te,"∗","*",!0);h(m,b,te,"+","+");h(m,b,te,"−","-",!0);h(m,b,te,"⋅","\\cdot",!0);h(m,b,te,"∘","\\circ",!0);h(m,b,te,"÷","\\div",!0);h(m,b,te,"±","\\pm",!0);h(m,b,te,"×","\\times",!0);h(m,b,te,"∩","\\cap",!0);h(m,b,te,"∪","\\cup",!0);h(m,b,te,"∖","\\setminus",!0);h(m,b,te,"∧","\\land");h(m,b,te,"∨","\\lor");h(m,b,te,"∧","\\wedge",!0);h(m,b,te,"∨","\\vee",!0);h(m,b,I,"√","\\surd");h(m,b,ht,"⟨","\\langle",!0);h(m,b,ht,"∣","\\lvert");h(m,b,ht,"∥","\\lVert");h(m,b,Ze,"?","?");h(m,b,Ze,"!","!");h(m,b,Ze,"⟩","\\rangle",!0);h(m,b,Ze,"∣","\\rvert");h(m,b,Ze,"∥","\\rVert");h(m,b,A,"=","=");h(m,b,A,":",":");h(m,b,A,"≈","\\approx",!0);h(m,b,A,"≅","\\cong",!0);h(m,b,A,"≥","\\ge");h(m,b,A,"≥","\\geq",!0);h(m,b,A,"←","\\gets");h(m,b,A,">","\\gt",!0);h(m,b,A,"∈","\\in",!0);h(m,b,A,"","\\@not");h(m,b,A,"⊂","\\subset",!0);h(m,b,A,"⊃","\\supset",!0);h(m,b,A,"⊆","\\subseteq",!0);h(m,b,A,"⊇","\\supseteq",!0);h(m,v,A,"⊈","\\nsubseteq",!0);h(m,v,A,"⊉","\\nsupseteq",!0);h(m,b,A,"⊨","\\models");h(m,b,A,"←","\\leftarrow",!0);h(m,b,A,"≤","\\le");h(m,b,A,"≤","\\leq",!0);h(m,b,A,"<","\\lt",!0);h(m,b,A,"→","\\rightarrow",!0);h(m,b,A,"→","\\to");h(m,v,A,"≱","\\ngeq",!0);h(m,v,A,"≰","\\nleq",!0);h(m,b,Yt," ","\\ ");h(m,b,Yt," ","\\space");h(m,b,Yt," ","\\nobreakspace");h(F,b,Yt," ","\\ ");h(F,b,Yt," "," ");h(F,b,Yt," ","\\space");h(F,b,Yt," ","\\nobreakspace");h(m,b,Yt,"","\\nobreak");h(m,b,Yt,"","\\allowbreak");h(m,b,kn,",",",");h(m,b,kn,";",";");h(m,v,te,"⊼","\\barwedge",!0);h(m,v,te,"⊻","\\veebar",!0);h(m,b,te,"⊙","\\odot",!0);h(m,b,te,"⊕","\\oplus",!0);h(m,b,te,"⊗","\\otimes",!0);h(m,b,I,"∂","\\partial",!0);h(m,b,te,"⊘","\\oslash",!0);h(m,v,te,"⊚","\\circledcirc",!0);h(m,v,te,"⊡","\\boxdot",!0);h(m,b,te,"△","\\bigtriangleup");h(m,b,te,"▽","\\bigtriangledown");h(m,b,te,"†","\\dagger");h(m,b,te,"⋄","\\diamond");h(m,b,te,"⋆","\\star");h(m,b,te,"◃","\\triangleleft");h(m,b,te,"▹","\\triangleright");h(m,b,ht,"{","\\{");h(F,b,I,"{","\\{");h(F,b,I,"{","\\textbraceleft");h(m,b,Ze,"}","\\}");h(F,b,I,"}","\\}");h(F,b,I,"}","\\textbraceright");h(m,b,ht,"{","\\lbrace");h(m,b,Ze,"}","\\rbrace");h(m,b,ht,"[","\\lbrack",!0);h(F,b,I,"[","\\lbrack",!0);h(m,b,Ze,"]","\\rbrack",!0);h(F,b,I,"]","\\rbrack",!0);h(m,b,ht,"(","\\lparen",!0);h(m,b,Ze,")","\\rparen",!0);h(F,b,I,"<","\\textless",!0);h(F,b,I,">","\\textgreater",!0);h(m,b,ht,"⌊","\\lfloor",!0);h(m,b,Ze,"⌋","\\rfloor",!0);h(m,b,ht,"⌈","\\lceil",!0);h(m,b,Ze,"⌉","\\rceil",!0);h(m,b,I,"\\","\\backslash");h(m,b,I,"∣","|");h(m,b,I,"∣","\\vert");h(F,b,I,"|","\\textbar",!0);h(m,b,I,"∥","\\|");h(m,b,I,"∥","\\Vert");h(F,b,I,"∥","\\textbardbl");h(F,b,I,"~","\\textasciitilde");h(F,b,I,"\\","\\textbackslash");h(F,b,I,"^","\\textasciicircum");h(m,b,A,"↑","\\uparrow",!0);h(m,b,A,"⇑","\\Uparrow",!0);h(m,b,A,"↓","\\downarrow",!0);h(m,b,A,"⇓","\\Downarrow",!0);h(m,b,A,"↕","\\updownarrow",!0);h(m,b,A,"⇕","\\Updownarrow",!0);h(m,b,Pe,"∐","\\coprod");h(m,b,Pe,"⋁","\\bigvee");h(m,b,Pe,"⋀","\\bigwedge");h(m,b,Pe,"⨄","\\biguplus");h(m,b,Pe,"⋂","\\bigcap");h(m,b,Pe,"⋃","\\bigcup");h(m,b,Pe,"∫","\\int");h(m,b,Pe,"∫","\\intop");h(m,b,Pe,"∬","\\iint");h(m,b,Pe,"∭","\\iiint");h(m,b,Pe,"∏","\\prod");h(m,b,Pe,"∑","\\sum");h(m,b,Pe,"⨂","\\bigotimes");h(m,b,Pe,"⨁","\\bigoplus");h(m,b,Pe,"⨀","\\bigodot");h(m,b,Pe,"∮","\\oint");h(m,b,Pe,"∯","\\oiint");h(m,b,Pe,"∰","\\oiiint");h(m,b,Pe,"⨆","\\bigsqcup");h(m,b,Pe,"∫","\\smallint");h(F,b,Hr,"…","\\textellipsis");h(m,b,Hr,"…","\\mathellipsis");h(F,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"…","\\ldots",!0);h(m,b,Hr,"⋯","\\@cdots",!0);h(m,b,Hr,"⋱","\\ddots",!0);h(m,b,I,"⋮","\\varvdots");h(F,b,I,"⋮","\\varvdots");h(m,b,Ce,"ˊ","\\acute");h(m,b,Ce,"ˋ","\\grave");h(m,b,Ce,"¨","\\ddot");h(m,b,Ce,"~","\\tilde");h(m,b,Ce,"ˉ","\\bar");h(m,b,Ce,"˘","\\breve");h(m,b,Ce,"ˇ","\\check");h(m,b,Ce,"^","\\hat");h(m,b,Ce,"⃗","\\vec");h(m,b,Ce,"˙","\\dot");h(m,b,Ce,"˚","\\mathring");h(m,b,ie,"","\\@imath");h(m,b,ie,"","\\@jmath");h(m,b,I,"ı","ı");h(m,b,I,"ȷ","ȷ");h(F,b,I,"ı","\\i",!0);h(F,b,I,"ȷ","\\j",!0);h(F,b,I,"ß","\\ss",!0);h(F,b,I,"æ","\\ae",!0);h(F,b,I,"œ","\\oe",!0);h(F,b,I,"ø","\\o",!0);h(F,b,I,"Æ","\\AE",!0);h(F,b,I,"Œ","\\OE",!0);h(F,b,I,"Ø","\\O",!0);h(F,b,Ce,"ˊ","\\'");h(F,b,Ce,"ˋ","\\`");h(F,b,Ce,"ˆ","\\^");h(F,b,Ce,"˜","\\~");h(F,b,Ce,"ˉ","\\=");h(F,b,Ce,"˘","\\u");h(F,b,Ce,"˙","\\.");h(F,b,Ce,"¸","\\c");h(F,b,Ce,"˚","\\r");h(F,b,Ce,"ˇ","\\v");h(F,b,Ce,"¨",'\\"');h(F,b,Ce,"˝","\\H");h(F,b,Ce,"◯","\\textcircled");var eo={"--":!0,"---":!0,"``":!0,"''":!0};h(F,b,I,"–","--",!0);h(F,b,I,"–","\\textendash");h(F,b,I,"—","---",!0);h(F,b,I,"—","\\textemdash");h(F,b,I,"‘","`",!0);h(F,b,I,"‘","\\textquoteleft");h(F,b,I,"’","'",!0);h(F,b,I,"’","\\textquoteright");h(F,b,I,"“","``",!0);h(F,b,I,"“","\\textquotedblleft");h(F,b,I,"”","''",!0);h(F,b,I,"”","\\textquotedblright");h(m,b,I,"°","\\degree",!0);h(F,b,I,"°","\\degree");h(F,b,I,"°","\\textdegree",!0);h(m,b,I,"£","\\pounds");h(m,b,I,"£","\\mathsterling",!0);h(F,b,I,"£","\\pounds");h(F,b,I,"£","\\textsterling",!0);h(m,v,I,"✠","\\maltese");h(F,v,I,"✠","\\maltese");var Ru='0123456789/@."';for(var ta=0;ta{var t=e.charCodeAt(0),r=e.charCodeAt(1),n=(t-55296)*1024+(r-56320)+65536;if(119808<=n&&n<120484){var a=Math.floor((n-119808)/26);return Gu[a]}else if(120782<=n&&n<=120831){var i=Math.floor((n-120782)/10);return t3[i]}else{if(n===120485||n===120486)return Gu[0];if(120486{if(Jt(e.classes)!==Jt(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize||e.italic!==0&&e.hasClass("mathnormal"))return!1;if(e.classes.length===1){var r=e.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n of Object.keys(e.style))if(e.style[n]!==t.style[n])return!1;for(var a of Object.keys(t.style))if(e.style[a]!==t.style[a])return!1;return!0},to=e=>{for(var t=0;tr&&(r=u.height),u.depth>n&&(n=u.depth),u.maxFontSize>a&&(a=u.maxFontSize)}t.height=r,t.depth=n,t.maxFontSize=a},z=function(t,r,n,a){var i=new Fr(t,r,n,a);return xi(i),i},er=(e,t,r,n)=>new Fr(e,t,r,n),Or=function(t,r,n){var a=z([t],[],r);return a.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),a.style.borderBottomWidth=V(a.height),a.maxFontSize=1,a},i3=function(t,r,n,a){var i=new E0(t,r,n,a);return xi(i),i},Gt=function(t){var r=new Br(t);return xi(r),r},Lr=function(t,r){return t instanceof Br?z([],[t],r):t},u3=function(t){if(t.positionType==="individualShift"){for(var r=t.children,n=[r[0]],a=-r[0].shift-r[0].elem.depth,i=a,u=1;u{var r=z(["mspace"],[],t),n=Ie(e,t);return r.style.marginRight=V(n),r},qn=(e,t,r)=>{var n,a;switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return t==="textbf"&&r==="textit"?a="BoldItalic":t==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},Ba={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},no={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},ao=function(t,r){var[n,a,i]=no[t],u=new Zt(n),s=new zt([u],{width:V(a),height:V(i),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),l=er(["overlay"],[s],r);return l.height=i,l.style.height=V(i),l.style.width=V(a),l},_e={number:3,unit:"mu"},cr={number:4,unit:"mu"},Pt={number:5,unit:"mu"},s3={mord:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mop:{mord:_e,mop:_e,mrel:Pt,minner:_e},mbin:{mord:cr,mop:cr,mopen:cr,minner:cr},mrel:{mord:Pt,mop:Pt,mopen:Pt,minner:Pt},mopen:{},mclose:{mop:_e,mbin:cr,mrel:Pt,minner:_e},mpunct:{mord:_e,mop:_e,mrel:Pt,mopen:_e,mclose:_e,mpunct:_e,minner:_e},minner:{mord:_e,mop:_e,mbin:cr,mrel:Pt,mopen:_e,mpunct:_e,minner:_e}},l3={mord:{mop:_e},mop:{mord:_e,mop:_e},mbin:{},mrel:{},mopen:{},mclose:{mop:_e},mpunct:{},minner:{mop:_e}},io={},a0={},i0={};function Z(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:a},l=0;l{var D=S.classes[0],_=x.classes[0];D==="mbin"&&c3.has(_)?S.classes[0]="mord":_==="mbin"&&o3.has(D)&&(x.classes[0]="mord")},{node:f},g,p),Fa(i,(x,S)=>{var D,_,N=za(S),M=za(x),W=N&&M?x.hasClass("mtight")?(D=l3[N])==null?void 0:D[M]:(_=s3[N])==null?void 0:_[M]:null;if(W)return ro(W,c)},{node:f},g,p),i},Fa=function(t,r,n,a,i){a&&t.push(a);for(var u=0;ug=>{t.splice(f+1,0,g),u++})(u)}a&&t.pop()},uo=function(t){return t instanceof Br||t instanceof E0||t instanceof Fr&&t.hasClass("enclosing")?t:null},Ha=function(t,r){var n=uo(t);if(n){var a=n.children;if(a.length){if(r==="right")return Ha(a[a.length-1],"right");if(r==="left")return Ha(a[0],"left")}}return t},za=function(t,r){if(!t)return null;r&&(t=Ha(t,r));var n=t.classes[0];return d3[n]||null},bn=function(t,r){var n=["nulldelimiter"].concat(t.baseSizingClasses());return z(r.concat(n))},Te=function(t,r,n){if(!t)return z();if(a0[t.type]){var a=a0[t.type](t,r);if(n&&r.size!==n.size){a=z(r.sizingClasses(n),[a],r);var i=r.sizeMultiplier/n.sizeMultiplier;a.height*=i,a.depth*=i}return a}else throw new Y("Got group of unknown type: '"+t.type+"'")};function Yn(e,t){var r=z(["base"],e,t),n=z(["strut"]);return n.style.height=V(r.height+r.depth),r.depth&&(n.style.verticalAlign=V(-r.depth)),r.children.unshift(n),r}function Ua(e,t){var r=null;e.length===1&&e[0].type==="tag"&&(r=e[0].tag,e=e[0].body);var n=He(e,t,"root"),a;n.length===2&&n[1].hasClass("tag")&&(a=n.pop());for(var i=[],u=[],s=0;s0&&(i.push(Yn(u,t)),u=[]),i.push(n[s]));u.length>0&&i.push(Yn(u,t));var c;r?(c=Yn(He(r,t,!0),t),c.classes=["tag"],i.push(c)):a&&i.push(a);var d=z(["katex-html"],i);if(d.setAttribute("aria-hidden","true"),c){var f=c.children[0];f.style.height=V(d.height+d.depth),d.depth&&(f.style.verticalAlign=V(-d.depth))}return d}function so(e){return new Br(e)}class G{constructor(t,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=t,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(t,r){this.attributes[t]=r}getAttribute(t){return this.attributes[t]}toNode(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);this.classes.length>0&&(t.className=Jt(this.classes));for(var n=0;n0&&(t+=' class ="'+Ve(Jt(this.classes))+'"'),t+=">";for(var n=0;n",t}toText(){return this.children.map(t=>t.toText()).join("")}}class Me{constructor(t){this.text=void 0,this.text=t}toNode(){return document.createTextNode(this.text)}toMarkup(){return Ve(this.toText())}toText(){return this.text}}class lo{constructor(t){this.width=void 0,this.character=void 0,this.width=t,t>=.05555&&t<=.05556?this.character=" ":t>=.1666&&t<=.1667?this.character=" ":t>=.2222&&t<=.2223?this.character=" ":t>=.2777&&t<=.2778?this.character="  ":t>=-.05556&&t<=-.05555?this.character=" ⁣":t>=-.1667&&t<=-.1666?this.character=" ⁣":t>=-.2223&&t<=-.2222?this.character=" ⁣":t>=-.2778&&t<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",V(this.width)),t}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var f3=new Set(["\\imath","\\jmath"]),m3=new Set(["mrow","mtable"]),bt=function(t,r,n){return we[r][t]&&we[r][t].replace&&t.charCodeAt(0)!==55349&&!(eo.hasOwnProperty(t)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(t=we[r][t].replace),new Me(t)},yi=function(t){return t.length===1?t[0]:new G("mrow",t)},p3={mathit:"italic",boldsymbol:e=>e.type==="textord"?"bold":"bold-italic",mathbf:"bold",mathbb:"double-struck",mathsfit:"sans-serif-italic",mathfrak:"fraktur",mathscr:"script",mathcal:"script",mathsf:"sans-serif",mathtt:"monospace"},vi=(e,t)=>{if(e.mode==="text"){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold"}var r=t.font;if(!r||r==="mathnormal")return null;var n=e.mode,a=p3[r];if(a)return typeof a=="function"?a(e):a;var i=e.text;if(f3.has(i))return null;if(we[n][i]){var u=we[n][i].replace;u&&(i=u)}var s=Ba[r].fontName;return Ei(i,s,n)?Ba[r].variant:null};function ia(e){if(!e)return!1;if(e.type==="mi"&&e.children.length===1){var t=e.children[0];return t instanceof Me&&t.text==="."}else if(e.type==="mo"&&e.children.length===1&&e.getAttribute("separator")==="true"&&e.getAttribute("lspace")==="0em"&&e.getAttribute("rspace")==="0em"){var r=e.children[0];return r instanceof Me&&r.text===","}else return!1}var dt=function(t,r,n){if(t.length===1){var a=Ae(t[0],r);return n&&a instanceof G&&a.type==="mo"&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var i=[],u,s=0;s=1&&(u.type==="mn"||ia(u))){var c=l.children[0];c instanceof G&&c.type==="mn"&&(c.children=[...u.children,...c.children],i.pop())}else if(u.type==="mi"&&u.children.length===1){var d=u.children[0];if(d instanceof Me&&d.text==="̸"&&(l.type==="mo"||l.type==="mi"||l.type==="mn")){var f=l.children[0];f instanceof Me&&f.text.length>0&&(f.text=f.text.slice(0,1)+"̸"+f.text.slice(1),i.pop())}}}i.push(l),u=l}return i},tr=function(t,r,n){return yi(dt(t,r,n))},Ae=function(t,r){if(!t)return new G("mrow");if(i0[t.type])return i0[t.type](t,r);throw new Y("Got group of unknown type: '"+t.type+"'")};function Vu(e,t,r,n,a){var i=dt(e,r),u;i.length===1&&i[0]instanceof G&&m3.has(i[0].type)?u=i[0]:u=new G("mrow",i);var s=new G("annotation",[new Me(t)]);s.setAttribute("encoding","application/x-tex");var l=new G("semantics",[u,s]),c=new G("math",[l]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var d=a?"katex":"katex-mathml";return z([d],[c])}var g3=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],ju=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Wu=function(t,r){return r.size<2?t:g3[t-1][r.size-1]};class Bt{constructor(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||Bt.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=ju[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}extend(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};return Object.assign(r,t),new Bt(r)}havingStyle(t){return this.style===t?this:this.extend({style:t,size:Wu(this.textSize,t)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:ju[t-1]})}havingBaseStyle(t){t=t||this.style.text();var r=Wu(Bt.BASESIZE,t);return this.size===r&&this.textSize===Bt.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}havingBaseSizing(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})}withColor(t){return this.extend({color:t})}withPhantom(){return this.extend({phantom:!0})}withFont(t){return this.extend({font:t})}withTextFontFamily(t){return this.extend({fontFamily:t,font:""})}withTextFontWeight(t){return this.extend({fontWeight:t,font:""})}withTextFontShape(t){return this.extend({fontShape:t,font:""})}sizingClasses(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==Bt.BASESIZE?["sizing","reset-size"+this.size,"size"+Bt.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Z4(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}Bt.BASESIZE=6;var oo=function(t){return new Bt({style:t.displayMode?oe.DISPLAY:oe.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},co=function(t,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),t=z(n,[t])}return t},b3=function(t,r,n){var a=oo(n),i;if(n.output==="mathml")return Vu(t,r,a,n.displayMode,!0);if(n.output==="html"){var u=Ua(t,a);i=z(["katex"],[u])}else{var s=Vu(t,r,a,n.displayMode,!1),l=Ua(t,a);i=z(["katex"],[s,l])}return co(i,n)},E3=function(t,r,n){var a=oo(n),i=Ua(t,a),u=z(["katex"],[i]);return co(u,n)},T3={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",underbracket:"⎵",overbracket:"⎴",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},y0=function(t){var r=new G("mo",[new Me(T3[t.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},x3={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overbracket:[["leftbracketover","rightbracketover"],1.6,440],underbracket:[["leftbracketunder","rightbracketunder"],1.6,410],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},y3=new Set(["widehat","widecheck","widetilde","utilde"]),v0=function(t,r){function n(){var s=4e5,l=t.label.slice(1);if(y3.has(l)&&"base"in t){var c=t.base.type==="ordgroup"?t.base.body.length:1,d,f,g;if(c>5)l==="widehat"||l==="widecheck"?(d=420,s=2364,g=.42,f=l+"4"):(d=312,s=2340,g=.34,f="tilde4");else{var p=[1,1,2,2,3,3][c];l==="widehat"||l==="widecheck"?(s=[0,1062,2364,2364,2364][p],d=[0,239,300,360,420][p],g=[0,.24,.3,.3,.36,.42][p],f=l+p):(s=[0,600,1033,2339,2340][p],d=[0,260,286,306,312][p],g=[0,.26,.286,.3,.306,.34][p],f="tilde"+p)}var x=new Zt(f),S=new zt([x],{width:"100%",height:V(g),viewBox:"0 0 "+s+" "+d,preserveAspectRatio:"none"});return{span:er([],[S],r),minWidth:0,height:g}}else{var D=[],_=x3[l];if(!_)throw new Error('No SVG data for "'+l+'".');var[N,M,W]=_,j=W/1e3,L=N.length,ee,re;if(L===1){if(_.length!==4)throw new Error('Expected 4-tuple for single-path SVG data "'+l+'".');ee=["hide-tail"],re=[_[3]]}else if(L===2)ee=["halfarrow-left","halfarrow-right"],re=["xMinYMin","xMaxYMin"];else if(L===3)ee=["brace-left","brace-center","brace-right"],re=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+L+" children.");for(var K=0;K0&&(a.style.minWidth=V(i)),a},v3=function(t,r,n,a,i){var u,s=t.height+t.depth+n+a;if(/fbox|color|angl/.test(r)){if(u=z(["stretchy",r],[],i),r==="fbox"){var l=i.color&&i.getColor();l&&(u.style.borderColor=l)}}else{var c=[];/^[bx]cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&c.push(new Da({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var d=new zt(c,{width:"100%",height:V(s)});u=er([],[d],i)}return u.height=s,u.style.height=V(s),u},A3={bin:1,close:1,inner:1,open:1,punct:1,rel:1},k3={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1};function S3(e){return e in A3}function ce(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function A0(e){var t=k0(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function k0(e){return e&&(e.type==="atom"||k3.hasOwnProperty(e.type))?e:null}var ho=e=>{if(e instanceof ct)return e;if(K4(e)&&e.children.length===1)return ho(e.children[0])},Ai=(e,t)=>{var r,n,a;e&&e.type==="supsub"?(n=ce(e.base,"accent"),r=n.base,e.base=r,a=Q4(Te(e,t)),e.base=n):(n=ce(e,"accent"),r=n.base);var i=Te(r,t.havingCrampedStyle()),u=n.isShifty&&qt(r),s=0;if(u){var l,c;s=(l=(c=ho(i))==null?void 0:c.skew)!=null?l:0}var d=n.label==="\\c",f=d?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight),g;if(n.isStretchy)g=v0(n,t),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:g,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+V(2*s)+")",marginLeft:V(2*s)}:void 0}]});else{var p,x;n.label==="\\vec"?(p=ao("vec",t),x=no.vec[1]):(p=x0({mode:n.mode,text:n.label},t,"textord"),p=$4(p),p.italic=0,x=p.width,d&&(f+=p.depth)),g=z(["accent-body"],[p]);var S=n.label==="\\textcircled";S&&(g.classes.push("accent-full"),f=i.height);var D=s;S||(D-=x/2),g.style.left=V(D),n.label==="\\textcircled"&&(g.style.top=".2em"),g=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-f},{type:"elem",elem:g}]})}var _=z(["mord","accent"],[g],t);return a?(a.children[0]=_,a.height=Math.max(_.height,a.height),a.classes[0]="mord",a):_},fo=(e,t)=>{var r=e.isStretchy?y0(e.label):new G("mo",[bt(e.label,e.mode)]),n=new G("mover",[Ae(e.base,t),r]);return n.setAttribute("accent","true"),n},w3=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));Z({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=u0(t[0]),n=!w3.test(e.funcName),a=!n||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],n=e.parser.mode;return n==="math"&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ai,mathmlBuilder:fo});Z({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:(e,t)=>{var r=Te(e.base,t),n=v0(e,t),a=e.label==="\\utilde"?.12:0,i=Ee({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]});return z(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=y0(e.label),n=new G("munder",[Ae(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Gn=e=>{var t=new G("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};Z({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n,funcName:a}=e;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder(e,t){var r=t.style,n=t.havingStyle(r.sup()),a=Lr(Te(e.body,n,t),t),i=e.label.slice(0,2)==="\\x"?"x":"cd";a.classes.push(i+"-arrow-pad");var u;e.below&&(n=t.havingStyle(r.sub()),u=Lr(Te(e.below,n,t),t),u.classes.push(i+"-arrow-pad"));var s=v0(e,t),l=-t.fontMetrics().axisHeight+.5*s.height,c=-t.fontMetrics().axisHeight-.5*s.height-.111;(a.depth>.25||e.label==="\\xleftequilibrium")&&(c-=a.depth);var d;if(u){var f=-t.fontMetrics().axisHeight+u.height+.5*s.height+.111;d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]},{type:"elem",elem:u,shift:f}]})}else d=Ee({positionType:"individualShift",children:[{type:"elem",elem:a,shift:c},{type:"elem",elem:s,shift:l,wrapperClasses:["svg-align"]}]});return z(["mrel","x-arrow"],[d],t)},mathmlBuilder(e,t){var r=y0(e.label);r.setAttribute("minsize",e.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(e.body){var a=Gn(Ae(e.body,t));if(e.below){var i=Gn(Ae(e.below,t));n=new G("munderover",[r,i,a])}else n=new G("mover",[r,a])}else if(e.below){var u=Gn(Ae(e.below,t));n=new G("munder",[r,u])}else n=Gn(),n=new G("mover",[r,n]);return n}});function mo(e,t){var r=He(e.body,t,!0);return z([e.mclass],r,t)}function po(e,t){var r,n=dt(e.body,t);return e.mclass==="minner"?r=new G("mpadded",n):e.mclass==="mord"?e.isCharacterBox?(r=n[0],r.type="mi"):r=new G("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new G("mo",n),e.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):e.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):e.mclass==="mopen"||e.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):e.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}Z({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Re(a),isCharacterBox:qt(a)}},htmlBuilder:mo,mathmlBuilder:po});var S0=e=>{var t=e.type==="ordgroup"&&e.body.length?e.body[0]:e;return t.type==="atom"&&(t.family==="bin"||t.family==="rel")?"m"+t.family:"mord"};Z({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:S0(t[0]),body:Re(t[1]),isCharacterBox:qt(t[1])}}});Z({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:n}=e,a=t[1],i=t[0],u;n!=="\\stackrel"?u=S0(a):u="mrel";var s={type:"op",mode:a.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:Re(a)},l={type:"supsub",mode:i.mode,base:s,sup:n==="\\underset"?null:i,sub:n==="\\underset"?i:null};return{type:"mclass",mode:r.mode,mclass:u,body:[l],isCharacterBox:qt(l)}},htmlBuilder:mo,mathmlBuilder:po});Z({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:S0(t[0]),body:Re(t[0])}},htmlBuilder(e,t){var r=He(e.body,t,!0),n=z([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){var r=dt(e.body,t),n=new G("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var C3={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xu=()=>({type:"styling",body:[],mode:"math",style:"display",resetFont:!0}),$u=e=>e.type==="textord"&&e.text==="@",_3=(e,t)=>(e.type==="mathord"||e.type==="atom")&&e.text===t;function I3(e,t,r){var n=C3[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{var a=r.callFunction("\\\\cdleft",[t[0]],[]),i={type:"atom",text:n,mode:"math",family:"rel"},u=r.callFunction("\\Big",[i],[]),s=r.callFunction("\\\\cdright",[t[1]],[]),l={type:"ordgroup",mode:"math",body:[a,u,s]};return r.callFunction("\\\\cdparent",[l],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var c={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[c],[])}default:return{type:"textord",text:" ",mode:"math"}}}function N3(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if(r==="&"||r==="\\\\")e.consume();else if(r==="\\end"){t[t.length-1].length===0&&t.pop();break}else throw new Y("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var n=[],a=[n],i=0;iAV".includes(c))for(var f=0;f<2;f++){for(var g=!0,p=l+1;pAV=|." after @',u[l]);var x=I3(c,d,e),S={type:"styling",body:[x],mode:"math",style:"display",resetFont:!0};n.push(S),s=Xu()}i%2===0?n.push(s):n.shift(),n=[],a.push(n)}e.gullet.endGroup(),e.gullet.endGroup();var D=new Array(a[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:a,arraystretch:1,addJot:!0,rowGaps:[null],cols:D,colSeparationType:"CD",hLinesBeforeRow:new Array(a.length+1).fill([])}}Z({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),n=Lr(Te(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){var r=new G("mrow",[Ae(e.label,t)]);return r=new G("mpadded",[r]),r.setAttribute("width","0"),e.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new G("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Z({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Lr(Te(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new G("mrow",[Ae(e.fragment,t)])}});Z({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,n=ce(t[0],"ordgroup"),a=n.body,i="",u=0;u=1114111)throw new Y("\\@char with invalid code point "+i);return l<=65535?c=String.fromCharCode(l):(l-=65536,c=String.fromCharCode((l>>10)+55296,(l&1023)+56320)),{type:"textord",mode:r.mode,text:c}}});var go=(e,t)=>{var r=He(e.body,t.withColor(e.color),!1);return Gt(r)},bo=(e,t)=>{var r=dt(e.body,t.withColor(e.color)),n=new G("mstyle",r);return n.setAttribute("mathcolor",e.color),n};Z({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,n=ce(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:Re(a)}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:n}=e,a=ce(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:go,mathmlBuilder:bo});Z({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:n}=e,a=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&ce(a,"size").value}},htmlBuilder(e,t){var r=z(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(Ie(e.size,t)))),r},mathmlBuilder(e,t){var r=new G("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(Ie(e.size,t)))),r}});var qa={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Eo=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new Y("Expected a control sequence",e);return t},D3=e=>{var t=e.gullet.popToken();return t.text==="="&&(t=e.gullet.popToken(),t.text===" "&&(t=e.gullet.popToken())),t},To=(e,t,r,n)=>{var a=e.gullet.macros.get(r.text);a==null&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};Z({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var n=t.fetch();if(qa[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=qa[n.text]),ce(t.parseFunction(),"internal");throw new Y("Invalid token after macro prefix",n)}});Z({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=t.gullet.popToken(),a=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(a))throw new Y("Expected a control sequence",n);for(var i=0,u,s=[[]];t.gullet.future().text!=="{";)if(n=t.gullet.popToken(),n.text==="#"){if(t.gullet.future().text==="{"){u=t.gullet.future(),s[i].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new Y('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==i+1)throw new Y('Argument number "'+n.text+'" out of order');i++,s.push([])}else{if(n.text==="EOF")throw new Y("Expected a macro definition");s[i].push(n.text)}var{tokens:l}=t.gullet.consumeArg();return u&&l.unshift(u),(r==="\\edef"||r==="\\xdef")&&(l=t.gullet.expandTokens(l),l.reverse()),t.gullet.macros.set(a,{tokens:l,numArgs:i,delimiters:s},r===qa[r]),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken());t.gullet.consumeSpaces();var a=D3(t);return To(t,n,a,r==="\\\\globallet"),{type:"internal",mode:t.mode}}});Z({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Eo(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return To(t,n,i,r==="\\\\globalfuture"),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var tn=function(t,r,n){var a=we.math[t]&&we.math[t].replace,i=Ei(a||t,r,n);if(!i)throw new Error("Unsupported symbol "+t+" and font size "+r+".");return i},ki=function(t,r,n,a){var i=n.havingBaseStyle(r),u=z(a.concat(i.sizingClasses(n)),[t],n),s=i.sizeMultiplier/n.sizeMultiplier;return u.height*=s,u.depth*=s,u.maxFontSize=i.sizeMultiplier,u},xo=function(t,r,n){var a=r.havingBaseStyle(n),i=(1-r.sizeMultiplier/a.sizeMultiplier)*r.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=V(i),t.height-=i,t.depth+=i},O3=function(t,r,n,a,i,u){var s=Qe(t,"Main-Regular",i,a),l=ki(s,r,a,u);return xo(l,a,r),l},L3=function(t,r,n,a){return Qe(t,"Size"+r+"-Regular",n,a)},yo=function(t,r,n,a,i,u){var s=L3(t,r,i,a),l=ki(z(["delimsizing","size"+r],[s],a),oe.TEXT,a,u);return n&&xo(l,a,oe.TEXT),l},ua=function(t,r,n){var a;r==="Size1-Regular"?a="delim-size1":a="delim-size4";var i=z(["delimsizinginner",a],[z([],[Qe(t,r,n)])]);return{type:"elem",elem:i}},sa=function(t,r,n){var a=wt["Size4-Regular"][t.charCodeAt(0)]?wt["Size4-Regular"][t.charCodeAt(0)][4]:wt["Size1-Regular"][t.charCodeAt(0)][4],i=new Zt("inner",q4(t,Math.round(1e3*r))),u=new zt([i],{width:V(a),height:V(r),style:"width:"+V(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),s=er([],[u],n);return s.height=r,s.style.height=V(r),s.style.width=V(a),{type:"elem",elem:s}},Ya=.008,Vn={type:"kern",size:-1*Ya},R3=new Set(["|","\\lvert","\\rvert","\\vert"]),M3=new Set(["\\|","\\lVert","\\rVert","\\Vert"]),vo=function(t,r,n,a,i,u){var s,l,c,d,f="",g=0;s=c=d=t,l=null;var p="Size1-Regular";t==="\\uparrow"?c=d="⏐":t==="\\Uparrow"?c=d="‖":t==="\\downarrow"?s=c="⏐":t==="\\Downarrow"?s=c="‖":t==="\\updownarrow"?(s="\\uparrow",c="⏐",d="\\downarrow"):t==="\\Updownarrow"?(s="\\Uparrow",c="‖",d="\\Downarrow"):R3.has(t)?(c="∣",f="vert",g=333):M3.has(t)?(c="∥",f="doublevert",g=556):t==="["||t==="\\lbrack"?(s="⎡",c="⎢",d="⎣",p="Size4-Regular",f="lbrack",g=667):t==="]"||t==="\\rbrack"?(s="⎤",c="⎥",d="⎦",p="Size4-Regular",f="rbrack",g=667):t==="\\lfloor"||t==="⌊"?(c=s="⎢",d="⎣",p="Size4-Regular",f="lfloor",g=667):t==="\\lceil"||t==="⌈"?(s="⎡",c=d="⎢",p="Size4-Regular",f="lceil",g=667):t==="\\rfloor"||t==="⌋"?(c=s="⎥",d="⎦",p="Size4-Regular",f="rfloor",g=667):t==="\\rceil"||t==="⌉"?(s="⎤",c=d="⎥",p="Size4-Regular",f="rceil",g=667):t==="("||t==="\\lparen"?(s="⎛",c="⎜",d="⎝",p="Size4-Regular",f="lparen",g=875):t===")"||t==="\\rparen"?(s="⎞",c="⎟",d="⎠",p="Size4-Regular",f="rparen",g=875):t==="\\{"||t==="\\lbrace"?(s="⎧",l="⎨",d="⎩",c="⎪",p="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(s="⎫",l="⎬",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lgroup"||t==="⟮"?(s="⎧",d="⎩",c="⎪",p="Size4-Regular"):t==="\\rgroup"||t==="⟯"?(s="⎫",d="⎭",c="⎪",p="Size4-Regular"):t==="\\lmoustache"||t==="⎰"?(s="⎧",d="⎭",c="⎪",p="Size4-Regular"):(t==="\\rmoustache"||t==="⎱")&&(s="⎫",d="⎩",c="⎪",p="Size4-Regular");var x=tn(s,p,i),S=x.height+x.depth,D=tn(c,p,i),_=D.height+D.depth,N=tn(d,p,i),M=N.height+N.depth,W=0,j=1;if(l!==null){var L=tn(l,p,i);W=L.height+L.depth,j=2}var ee=S+M+W,re=Math.max(0,Math.ceil((r-ee)/(j*_))),K=ee+re*j*_,R=a.fontMetrics().axisHeight;n&&(R*=a.sizeMultiplier);var J=K/2-R,Q=[];if(f.length>0){var be=K-S-M,ne=Math.round(K*1e3),X=Y4(f,Math.round(be*1e3)),me=new Zt(f,X),ke=V(g/1e3),ze=V(ne/1e3),at=new zt([me],{width:ke,height:ze,viewBox:"0 0 "+g+" "+ne}),w=er([],[at],a);w.height=ne/1e3,w.style.width=ke,w.style.height=ze,Q.push({type:"elem",elem:w})}else{if(Q.push(ua(d,p,i)),Q.push(Vn),l===null){var Oe=K-S-M+2*Ya;Q.push(sa(c,Oe,a))}else{var Xe=(K-S-M-W)/2+2*Ya;Q.push(sa(c,Xe,a)),Q.push(Vn),Q.push(ua(l,p,i)),Q.push(Vn),Q.push(sa(c,Xe,a))}Q.push(Vn),Q.push(ua(s,p,i))}var C=a.havingBaseStyle(oe.TEXT),Ye=Ee({positionType:"bottom",positionData:J,children:Q});return ki(z(["delimsizing","mult"],[Ye],C),oe.TEXT,a,u)},la=80,oa=.08,ca=function(t,r,n,a,i){var u=U4(t,a,n),s=new Zt(t,u),l=new zt([s],{width:"400em",height:V(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return er(["hide-tail"],[l],i)},P3=function(t,r){var n=r.havingBaseSizing(),a=Co("\\surd",t*n.sizeMultiplier,wo,n),i=n.sizeMultiplier,u=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),s,l,c,d,f;return a.type==="small"?(d=1e3+1e3*u+la,t<1?i=1:t<1.4&&(i=.7),l=(1+u+oa)/i,c=(1+u)/i,s=ca("sqrtMain",l,d,u,r),s.style.minWidth="0.853em",f=.833/i):a.type==="large"?(d=(1e3+la)*sn[a.size],c=(sn[a.size]+u)/i,l=(sn[a.size]+u+oa)/i,s=ca("sqrtSize"+a.size,l,d,u,r),s.style.minWidth="1.02em",f=1/i):(l=t+u+oa,c=t+u,d=Math.floor(1e3*t+u)+la,s=ca("sqrtTall",l,d,u,r),s.style.minWidth="0.742em",f=1.056),s.height=c,s.style.height=V(l),{span:s,advanceWidth:f,ruleWidth:(r.fontMetrics().sqrtRuleThickness+u)*i}},Ao=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"]),B3=new Set(["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"]),ko=new Set(["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),sn=[0,1.2,1.8,2.4,3],So=function(t,r,n,a,i){if(t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle"),Ao.has(t)||ko.has(t))return yo(t,r,!1,n,a,i);if(B3.has(t))return vo(t,sn[r],!1,n,a,i);throw new Y("Illegal delimiter: '"+t+"'")},F3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],H3=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"stack"}],wo=[{type:"small",style:oe.SCRIPTSCRIPT},{type:"small",style:oe.SCRIPT},{type:"small",style:oe.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],z3=function(t){if(t.type==="small")return"Main-Regular";if(t.type==="large")return"Size"+t.size+"-Regular";if(t.type==="stack")return"Size4-Regular";var r=t.type;throw new Error("Add support for delim type '"+r+"' here.")},Co=function(t,r,n,a){for(var i=Math.min(2,3-a.style.size),u=i;ur)return s}return n[n.length-1]},Ga=function(t,r,n,a,i,u){t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle");var s;ko.has(t)?s=F3:Ao.has(t)?s=wo:s=H3;var l=Co(t,r,s,a);return l.type==="small"?O3(t,l.style,n,a,i,u):l.type==="large"?yo(t,l.size,n,a,i,u):vo(t,r,n,a,i,u)},ha=function(t,r,n,a,i,u){var s=a.fontMetrics().axisHeight*a.sizeMultiplier,l=901,c=5/a.fontMetrics().ptPerEm,d=Math.max(r-s,n+s),f=Math.max(d/500*l,2*d-c);return Ga(t,f,!0,a,i,u)},Qu={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},U3=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."]);function Ku(e){return"isMiddle"in e}function w0(e,t){var r=k0(e);if(r&&U3.has(r.text))return r;throw r?new Y("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e):new Y("Invalid delimiter type '"+e.type+"'",e)}Z({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=w0(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Qu[e.funcName].size,mclass:Qu[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>e.delim==="."?z([e.mclass]):So(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];e.delim!=="."&&t.push(bt(e.delim,e.mode));var r=new G("mo",t);e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(sn[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}});function Ju(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Z({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new Y("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:w0(t[0],e).text,color:r}}});Z({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=ce(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Ju(e);for(var r=He(e.body,t,!0,["mopen","mclose"]),n=0,a=0,i=!1,u=0;u{Ju(e);var r=dt(e.body,t);if(e.left!=="."){var n=new G("mo",[bt(e.left,e.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(e.right!=="."){var a=new G("mo",[bt(e.right,e.mode)]);a.setAttribute("fence","true"),e.rightColor&&a.setAttribute("mathcolor",e.rightColor),r.push(a)}return yi(r)}});Z({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=w0(t[0],e);if(!e.parser.leftrightDepth)throw new Y("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;return e.delim==="."?r=bn(t,[]):(r=So(e.delim,1,t,e.mode,[]),r.isMiddle={delim:e.delim,options:t}),r},mathmlBuilder:(e,t)=>{var r=e.delim==="\\vert"||e.delim==="|"?bt("|","text"):bt(e.delim,e.mode),n=new G("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});var C0=(e,t)=>{var r=Lr(Te(e.body,t),t),n=e.label.slice(1),a=t.sizeMultiplier,i,u,s=qt(e.body);if(n==="sout")i=z(["stretchy","sout"]),i.height=t.fontMetrics().defaultRuleThickness/a,u=-.5*t.fontMetrics().xHeight;else if(n==="phase"){var l=Ie({number:.6,unit:"pt"},t),c=Ie({number:.35,unit:"ex"},t),d=t.havingBaseSizing();a=a/d.sizeMultiplier;var f=r.height+r.depth+l+c;r.style.paddingLeft=V(f/2+l);var g=Math.floor(1e3*f*a),p=H4(g),x=new zt([new Zt("phase",p)],{width:"400em",height:V(g/1e3),viewBox:"0 0 400000 "+g,preserveAspectRatio:"xMinYMin slice"});i=er(["hide-tail"],[x],t),i.style.height=V(f),u=r.depth+l+c}else{/cancel/.test(n)?s||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var S,D,_=0;/box/.test(n)?(_=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),S=t.fontMetrics().fboxsep+(n==="colorbox"?0:_),D=S):n==="angl"?(_=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),S=4*_,D=Math.max(0,.25-r.depth)):(S=s?.2:0,D=S),i=v3(r,n,S,D,t),/fbox|boxed|fcolorbox/.test(n)?(i.style.borderStyle="solid",i.style.borderWidth=V(_)):n==="angl"&&_!==.049&&(i.style.borderTopWidth=V(_),i.style.borderRightWidth=V(_)),u=r.depth+D,e.backgroundColor&&(i.style.backgroundColor=e.backgroundColor,e.borderColor&&(i.style.borderColor=e.borderColor))}var N;if(e.backgroundColor)N=Ee({positionType:"individualShift",children:[{type:"elem",elem:i,shift:u},{type:"elem",elem:r,shift:0}]});else{var M=/cancel|phase/.test(n)?["svg-align"]:[];N=Ee({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:i,shift:u,wrapperClasses:M}]})}return/cancel/.test(n)&&(N.height=r.height,N.depth=r.depth),/cancel/.test(n)&&!s?z(["mord","cancel-lap"],[N],t):z(["mord"],[N],t)},_0=(e,t)=>{var r,n=new G(e.label.includes("colorbox")?"mpadded":"menclose",[Ae(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+V(a)+" solid "+e.borderColor)}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};Z({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:u}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","hbox"]},handler(e,t,r){var{parser:n,funcName:a}=e,i=ce(t[0],"color-token").color,u=ce(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:u,borderColor:i,body:s}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}});Z({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\sout"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e;r.mode==="math"&&r.settings.reportNonstrict("mathVsSout","LaTeX's \\sout works only in text mode");var a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:C0,mathmlBuilder:_0});Z({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var _o={};function Nt(e){for(var{type:t,names:r,props:n,handler:a,htmlBuilder:i,mathmlBuilder:u}=e,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l{var t=e.parser.settings;if(!t.displayMode)throw new Y("{"+e.envName+"} can be used only in display mode.")},q3=new Set(["gather","gather*"]);function Si(e){if(!e.includes("ed"))return!e.includes("*")}function ar(e,t,r){var{hskipBeforeAndAfter:n,addJot:a,cols:i,arraystretch:u,colSeparationType:s,autoTag:l,singleRow:c,emptySingleRow:d,maxNumCols:f,leqno:g}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!u){var p=e.gullet.expandMacroAsText("\\arraystretch");if(p==null)u=1;else if(u=parseFloat(p),!u||u<0)throw new Y("Invalid \\arraystretch: "+p)}e.gullet.beginGroup();var x=[],S=[x],D=[],_=[],N=l!=null?[]:void 0;function M(){l&&e.gullet.macros.set("\\@eqnsw","1",!0)}function W(){N&&(e.gullet.macros.get("\\df@tag")?(N.push(e.subparse([new ot("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):N.push(!!l&&e.gullet.macros.get("\\@eqnsw")==="1"))}for(M(),_.push(Zu(e));;){var j=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup();var L={type:"ordgroup",mode:e.mode,body:j};r&&(L={type:"styling",mode:e.mode,style:r,resetFont:!0,body:[L]}),x.push(L);var ee=e.fetch().text;if(ee==="&"){if(f&&x.length===f){if(c||s)throw new Y("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else if(ee==="\\end"){W(),x.length===1&&L.type==="styling"&&L.body.length===1&&L.body[0].type==="ordgroup"&&L.body[0].body.length===0&&(S.length>1||!d)&&S.pop(),_.length0&&(M+=.25),c.push({pos:M,isDashed:ue[he]})}for(W(u[0]),n=0;n0&&(J+=N,eeue))for(n=0;n=s)){var it=void 0;if(a>0||t.hskipBeforeAndAfter){var Lt,ir;it=(Lt=(ir=C)==null?void 0:ir.pregap)!=null?Lt:g,it!==0&&(X=z(["arraycolsep"],[]),X.style.width=V(it),ne.push(X))}var _n=[];for(n=0;n0){for(var R0=Or("hline",r,d),M0=Or("hdashline",r,d),Vr=[{type:"elem",elem:ur,shift:0}];c.length>0;){var Ln=c.pop(),Rn=Ln.pos-Q;Ln.isDashed?Vr.push({type:"elem",elem:M0,shift:Rn}):Vr.push({type:"elem",elem:R0,shift:Rn})}ur=Ee({positionType:"individualShift",children:Vr})}if(ke.length===0)return z(["mord"],[ur],r);var B=Ee({positionType:"individualShift",children:ke}),$=z(["tag"],[B],r);return Gt([ur,$])},Y3={c:"center ",l:"left ",r:"right "},Ot=function(t,r){for(var n=[],a=new G("mtd",[],["mtr-glue"]),i=new G("mtd",[],["mml-eqn-num"]),u=0;u0){var x=t.cols,S="",D=!1,_=0,N=x.length;x[0].type==="separator"&&(g+="top ",_=1),x[x.length-1].type==="separator"&&(g+="bottom ",N-=1);for(var M=_;M0?"left ":"",g+=K[K.length-1].length>0?"right ":"";for(var R=1;R0&&p&&(D=1),n[x]={type:"align",align:S,pregap:D,postgap:0}}return u.colSeparationType=p?"align":"alignat",u};Nt({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(u){var s=A0(u),l=s.text;if("lcr".includes(l))return{type:"align",align:l};if(l==="|")return{type:"separator",separator:"|"};if(l===":")return{type:"separator",separator:":"};throw new Y("Unknown column alignment: "+l,u)}),i={cols:a,hskipBeforeAndAfter:!0,maxNumCols:a.length};return ar(e.parser,i,wi(e.envName))},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(e.envName.charAt(e.envName.length-1)==="*"){var a=e.parser;if(a.consumeSpaces(),a.fetch().text==="["){if(a.consume(),a.consumeSpaces(),r=a.fetch().text,!"lcr".includes(r))throw new Y("Expected l or c or r",a.nextToken);a.consume(),a.consumeSpaces(),a.expect("]"),a.consume(),n.cols=[{type:"align",align:r}]}}var i=ar(e.parser,n,wi(e.envName)),u=Math.max(0,...i.body.map(s=>s.length));return i.cols=new Array(u).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[i],left:t[0],right:t[1],rightColor:void 0}:i},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t={arraystretch:.5},r=ar(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=k0(t[0]),n=r?[t[0]]:ce(t[0],"ordgroup").body,a=n.map(function(s){var l=A0(s),c=l.text;if("lc".includes(c))return{type:"align",align:c};throw new Y("Unknown column alignment: "+c,s)});if(a.length>1)throw new Y("{subarray} can contain only one column");var i={cols:a,hskipBeforeAndAfter:!1,arraystretch:.5},u=ar(e.parser,i,"script");if(u.body.length>0&&u.body[0].length>1)throw new Y("{subarray} can contain only one column");return u},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ar(e.parser,t,wi(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:e.envName.includes("r")?".":"\\{",right:e.envName.includes("r")?"\\}":".",rightColor:void 0}},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){q3.has(e.envName)&&I0(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Si(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:No,htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){I0(e);var t={autoTag:Si(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return ar(e.parser,t,"display")},htmlBuilder:Dt,mathmlBuilder:Ot});Nt({type:"array",names:["CD"],props:{numArgs:0},handler(e){return I0(e),N3(e.parser)},htmlBuilder:Dt,mathmlBuilder:Ot});E("\\nonumber","\\gdef\\@eqnsw{0}");E("\\notag","\\nonumber");Z({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new Y(e.funcName+" valid only within array environment")}});var es=_o;Z({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];if(a.type!=="ordgroup")throw new Y("Invalid environment name",a);for(var i="",u=0;u{var r=e.font,n=t.withFont(r);return Te(e.body,n)},Oo=(e,t)=>{var r=e.font,n=t.withFont(r);return Ae(e.body,n)},ts={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};Z({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=u0(t[0]),i=n;return i in ts&&(i=ts[i]),{type:"font",mode:r.mode,font:i.slice(1),body:a}},htmlBuilder:Do,mathmlBuilder:Oo});Z({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:S0(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:qt(n)}}});Z({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n,breakOnTokenText:a}=e,{mode:i}=r,u=r.parseExpression(!0,a);return{type:"font",mode:i,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:u}}},htmlBuilder:Do,mathmlBuilder:Oo});var G3=(e,t)=>{var r=t.style,n=r.fracNum(),a=r.fracDen(),i;i=t.havingStyle(n);var u=Te(e.numer,i,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;u.height=u.height0?x=3*g:x=7*g,S=t.fontMetrics().denom1):(f>0?(p=t.fontMetrics().num2,x=g):(p=t.fontMetrics().num3,x=3*g),S=t.fontMetrics().denom2);var D;if(d){var N=t.fontMetrics().axisHeight;p-u.depth-(N+.5*f){var r=new G("mfrac",[Ae(e.numer,t),Ae(e.denom,t)]);if(!e.hasBarLine)r.setAttribute("linethickness","0px");else if(e.barSize){var n=Ie(e.barSize,t);r.setAttribute("linethickness",V(n))}if(e.leftDelim!=null||e.rightDelim!=null){var a=[];if(e.leftDelim!=null){var i=new G("mo",[new Me(e.leftDelim.replace("\\",""))]);i.setAttribute("fence","true"),a.push(i)}if(a.push(r),e.rightDelim!=null){var u=new G("mo",[new Me(e.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),a.push(u)}return yi(a)}return r},Lo=(e,t)=>{if(!t)return e;var r={type:"styling",mode:e.mode,style:t,body:[e]};return r};Z({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=t[1],u,s=null,l=null;switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":u=!0;break;case"\\\\atopfrac":u=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":u=!1,s="(",l=")";break;case"\\\\bracefrac":u=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":u=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}var c=n==="\\cfrac",d=null;return c||n.startsWith("\\d")?d="display":n.startsWith("\\t")&&(d="text"),Lo({type:"genfrac",mode:r.mode,numer:a,denom:i,continued:c,hasBarLine:u,leftDelim:s,rightDelim:l,barSize:null},d)},htmlBuilder:G3,mathmlBuilder:V3});Z({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var{parser:t,funcName:r,token:n}=e,a;switch(r){case"\\over":a="\\frac";break;case"\\choose":a="\\binom";break;case"\\atop":a="\\\\atopfrac";break;case"\\brace":a="\\\\bracefrac";break;case"\\brack":a="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:t.mode,replaceWith:a,token:n}}});var rs=["display","text","script","scriptscript"],ns=function(t){var r=null;return t.length>0&&(r=t,r=r==="."?null:r),r};Z({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var{parser:r}=e,n=t[4],a=t[5],i=u0(t[0]),u=i.type==="atom"&&i.family==="open"?ns(i.text):null,s=u0(t[1]),l=s.type==="atom"&&s.family==="close"?ns(s.text):null,c=ce(t[2],"size"),d,f=null;c.isBlank?d=!0:(f=c.value,d=f.number>0);var g=null,p=t[3];if(p.type==="ordgroup"){if(p.body.length>0){var x=ce(p.body[0],"textord");g=rs[Number(x.text)]}}else p=ce(p,"textord"),g=rs[Number(p.text)];return Lo({type:"genfrac",mode:r.mode,numer:n,denom:a,continued:!1,hasBarLine:d,barSize:f,leftDelim:u,rightDelim:l},g)}});Z({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:n,token:a}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:ce(t[0],"size").value,token:a}}});Z({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0],i=ce(t[1],"infix").size;if(!i)throw new Error("\\\\abovefrac expected size, but got "+String(i));var u=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:u,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null}}});var Ro=(e,t)=>{var r=t.style,n,a;e.type==="supsub"?(n=e.sup?Te(e.sup,t.havingStyle(r.sup()),t):Te(e.sub,t.havingStyle(r.sub()),t),a=ce(e.base,"horizBrace")):a=ce(e,"horizBrace");var i=Te(a.base,t.havingBaseStyle(oe.DISPLAY)),u=v0(a,t),s;if(a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:u,wrapperClasses:["svg-align"]}]}):s=Ee({positionType:"bottom",positionData:i.depth+.1+u.height,children:[{type:"elem",elem:u,wrapperClasses:["svg-align"]},{type:"kern",size:.1},{type:"elem",elem:i}]}),n){var l=z(["minner",a.isOver?"mover":"munder"],[s],t);a.isOver?s=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:n}]}):s=Ee({positionType:"bottom",positionData:l.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:l}]})}return z(["minner",a.isOver?"mover":"munder"],[s],t)},j3=(e,t)=>{var r=y0(e.label);return new G(e.isOver?"mover":"munder",[Ae(e.base,t),r])};Z({type:"horizBrace",names:["\\overbrace","\\underbrace","\\overbracket","\\underbracket"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:n.includes("\\over"),base:t[0]}},htmlBuilder:Ro,mathmlBuilder:j3});Z({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[1],a=ce(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:Re(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=He(e.body,t,!1);return i3(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=tr(e.body,t);return r instanceof G||(r=new G("mrow",[r])),r.setAttribute("href",e.href),r}});Z({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=ce(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i{var{parser:r,funcName:n,token:a}=e,i=ce(t[0],"raw").string,u=t[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var s,l={};switch(n){case"\\htmlClass":l.class=i,s={command:"\\htmlClass",class:i};break;case"\\htmlId":l.id=i,s={command:"\\htmlId",id:i};break;case"\\htmlStyle":l.style=i,s={command:"\\htmlStyle",style:i};break;case"\\htmlData":{for(var c=i.split(","),d=0;d{var r=He(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));var a=z(n,r,t);for(var i in e.attributes)i!=="class"&&e.attributes.hasOwnProperty(i)&&a.setAttribute(i,e.attributes[i]);return a},mathmlBuilder:(e,t)=>tr(e.body,t)});Z({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInArgument:!0,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Re(t[0]),mathml:Re(t[1])}},htmlBuilder:(e,t)=>{var r=He(e.html,t,!1);return Gt(r)},mathmlBuilder:(e,t)=>tr(e.mathml,t)});var da=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new Y("Invalid size: '"+t+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!Ql(n))throw new Y("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n};Z({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:n}=e,a={number:0,unit:"em"},i={number:.9,unit:"em"},u={number:0,unit:"em"},s="";if(r[0])for(var l=ce(r[0],"raw").string,c=l.split(","),d=0;d{var r=Ie(e.height,t),n=0;e.totalheight.number>0&&(n=Ie(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=Ie(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var u=new W4(e.src,e.alt,i);return u.height=r,u.depth=n,u},mathmlBuilder:(e,t)=>{var r=new G("mglyph",[]);r.setAttribute("alt",e.alt);var n=Ie(e.height,t),a=0;if(e.totalheight.number>0&&(a=Ie(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=Ie(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}});Z({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=ce(t[0],"size");if(r.settings.strict){var i=n[1]==="m",u=a.value.unit==="mu";i?(u||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+a.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):u&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder(e,t){return ro(e.dimension,t)},mathmlBuilder(e,t){var r=Ie(e.dimension,t);return new lo(r)}});Z({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:(e,t)=>{var r;e.alignment==="clap"?(r=z([],[Te(e.body,t)]),r=z(["inner"],[r],t)):r=z(["inner"],[Te(e.body,t)]);var n=z(["fix"],[]),a=z([e.alignment],[r,n],t),i=z(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=z(["thinbox"],[a],t),z(["mord","vbox"],[a],t)},mathmlBuilder:(e,t)=>{var r=new G("mpadded",[Ae(e.body,t)]);if(e.alignment!=="rlap"){var n=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}});Z({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:n}=e,a=n.mode;n.switchMode("math");var i=r==="\\("?"\\)":"$",u=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",resetFont:!0,body:u}}});Z({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new Y("Mismatched "+e.funcName)}});var as=(e,t)=>{switch(t.style.size){case oe.DISPLAY.size:return e.display;case oe.TEXT.size:return e.text;case oe.SCRIPT.size:return e.script;case oe.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};Z({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Re(t[0]),text:Re(t[1]),script:Re(t[2]),scriptscript:Re(t[3])}},htmlBuilder:(e,t)=>{var r=as(e,t),n=He(r,t,!1);return Gt(n)},mathmlBuilder:(e,t)=>{var r=as(e,t);return tr(r,t)}});var Mo=(e,t,r,n,a,i,u)=>{e=z([],[e]);var s=r&&qt(r),l,c;if(t){var d=Te(t,n.havingStyle(a.sup()),n);c={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-d.depth)}}if(r){var f=Te(r,n.havingStyle(a.sub()),n);l={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-f.height)}}var g;if(c&&l){var p=n.fontMetrics().bigOpSpacing5+l.elem.height+l.elem.depth+l.kern+e.depth+u;g=Ee({positionType:"bottom",positionData:p,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else if(l){var x=e.height-u;g=Ee({positionType:"top",positionData:x,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:V(-i)},{type:"kern",size:l.kern},{type:"elem",elem:e}]})}else if(c){var S=e.depth+u;g=Ee({positionType:"bottom",positionData:S,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else return e;var D=[g];if(l&&i!==0&&!s){var _=z(["mspace"],[],n);_.style.marginRight=V(i),D.unshift(_)}return z(["mop","op-limits"],D,n)},Po=new Set(["\\smallint"]),zr=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"op"),a=!0):i=ce(e,"op");var u=t.style,s=!1;u.size===oe.DISPLAY.size&&i.symbol&&!Po.has(i.name)&&(s=!0);var l,c;if(i.symbol){var d=s?"Size2-Regular":"Size1-Regular",f="";if((i.name==="\\oiint"||i.name==="\\oiiint")&&(f=i.name.slice(1),i.name=f==="oiint"?"\\iint":"\\iiint"),l=Qe(i.name,d,"math",t,["mop","op-symbol",s?"large-op":"small-op"]),c=l.italic,f.length>0){var g=ao(f+"Size"+(s?"2":"1"),t);l=Ee({positionType:"individualShift",children:[{type:"elem",elem:l,shift:0},{type:"elem",elem:g,shift:s?.08:0}]}),i.name="\\"+f,l.classes.unshift("mop"),l.italic=c}}else if(i.body){var p=He(i.body,t,!0);p.length===1&&p[0]instanceof ct?(l=p[0],l.classes[0]="mop"):l=z(["mop"],p,t)}else{for(var x=[],S=1;S{var r;if(e.symbol)r=new G("mo",[bt(e.name,e.mode)]),Po.has(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new G("mo",dt(e.body,t));else{r=new G("mi",[new Me(e.name.slice(1))]);var n=new G("mo",[bt("⁡","text")]);e.parentIsSupSub?r=new G("mrow",[r,n]):r=so([r,n])}return r},W3={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Z({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=n;return a.length===1&&(a=W3[a]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Re(n)}},htmlBuilder:zr,mathmlBuilder:Sn});var X3={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Z({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:zr,mathmlBuilder:Sn});Z({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0,allowedInArgument:!0},handler(e){var{parser:t,funcName:r}=e,n=r;return n.length===1&&(n=X3[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:zr,mathmlBuilder:Sn});var Bo=(e,t)=>{var r,n,a=!1,i;e.type==="supsub"?(r=e.sup,n=e.sub,i=ce(e.base,"operatorname"),a=!0):i=ce(e,"operatorname");var u;if(i.body.length>0){for(var s=i.body.map(f=>{var g="text"in f?f.text:void 0;return typeof g=="string"?{type:"textord",mode:f.mode,text:g}:f}),l=He(s,t.withFont("mathrm"),!0),c=0;c{for(var r=dt(e.body,t.withFont("mathrm")),n=!0,a=0;ad.toText()).join("");r=[new Me(s)]}var l=new G("mi",r);l.setAttribute("mathvariant","normal");var c=new G("mo",[bt("⁡","text")]);return e.parentIsSupSub?new G("mrow",[l,c]):so([l,c])};Z({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,a=t[0];return{type:"operatorname",mode:r.mode,body:Re(a),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:Bo,mathmlBuilder:$3});E("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");br({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Gt(He(e.body,t,!1)):z(["mord"],He(e.body,t,!0),t)},mathmlBuilder(e,t){return tr(e.body,t,!0)}});Z({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle()),n=Or("overline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*a},{type:"elem",elem:n},{type:"kern",size:a}]});return z(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("mover",[Ae(e.body,t),r]);return n.setAttribute("accent","true"),n}});Z({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"phantom",mode:r.mode,body:Re(n)}},htmlBuilder:(e,t)=>{var r=He(e.body,t.withPhantom(),!1);return Gt(r)},mathmlBuilder:(e,t)=>{var r=dt(e.body,t);return new G("mphantom",r)}});E("\\hphantom","\\smash{\\phantom{#1}}");Z({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{var r=z(["inner"],[Te(e.body,t.withPhantom())]),n=z(["fix"],[]);return z(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{var r=dt(Re(e.body),t),n=new G("mphantom",r),a=new G("mpadded",[n]);return a.setAttribute("width","0px"),a}});Z({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,n=ce(t[0],"size").value,a=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:a}},htmlBuilder(e,t){var r=Te(e.body,t),n=Ie(e.dy,t);return Ee({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}});Z({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}});Z({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){var{parser:n}=e,a=r[0],i=ce(t[0],"size"),u=ce(t[1],"size");return{type:"rule",mode:n.mode,shift:a&&ce(a,"size").value,width:i.value,height:u.value}},htmlBuilder(e,t){var r=z(["mord","rule"],[],t),n=Ie(e.width,t),a=Ie(e.height,t),i=e.shift?Ie(e.shift,t):0;return r.style.borderRightWidth=V(n),r.style.borderTopWidth=V(a),r.style.bottom=V(i),r.width=n,r.height=a+i,r.depth=-i,r.maxFontSize=a*1.125*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=Ie(e.width,t),n=Ie(e.height,t),a=e.shift?Ie(e.shift,t):0,i=t.color&&t.getColor()||"black",u=new G("mspace");u.setAttribute("mathbackground",i),u.setAttribute("width",V(r)),u.setAttribute("height",V(n));var s=new G("mpadded",[u]);return a>=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});function Fo(e,t,r){for(var n=He(e,t,!1),a=t.sizeMultiplier/r.sizeMultiplier,i=0;i{var r=t.havingSize(e.size);return Fo(e.body,r,t)};Z({type:"sizing",names:is,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:is.indexOf(n)+1,body:i}},htmlBuilder:Q3,mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),n=dt(e.body,r),a=new G("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}});Z({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:n}=e,a=!1,i=!1,u=r[0]&&ce(r[0],"ordgroup");if(u)for(var s,l=0;l{var r=z([],[Te(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0),e.smashDepth&&(r.depth=0),e.smashHeight&&e.smashDepth)return z(["mord","smash"],[r],t);if(r.children)for(var n=0;n{var r=new G("mpadded",[Ae(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}});Z({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n}=e,a=r[0],i=t[0];return{type:"sqrt",mode:n.mode,body:i,index:a}},htmlBuilder(e,t){var r=Te(e.body,t.havingCrampedStyle());r.height===0&&(r.height=t.fontMetrics().xHeight),r=Lr(r,t);var n=t.fontMetrics(),a=n.defaultRuleThickness,i=a;t.style.idr.height+r.depth+u&&(u=(u+f-r.height-r.depth)/2);var g=l.height-r.height-u-c;r.style.paddingLeft=V(d);var p=Ee({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+g)},{type:"elem",elem:l},{type:"kern",size:c}]});if(e.index){var x=t.havingStyle(oe.SCRIPTSCRIPT),S=Te(e.index,x,t),D=.6*(p.height-p.depth),_=Ee({positionType:"shift",positionData:-D,children:[{type:"elem",elem:S}]}),N=z(["root"],[_]);return z(["mord","sqrt"],[N,p],t)}else return z(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:n}=e;return n?new G("mroot",[Ae(r,t),Ae(n,t)]):new G("msqrt",[Ae(r,t)])}});var Va={display:oe.DISPLAY,text:oe.TEXT,script:oe.SCRIPT,scriptscript:oe.SCRIPTSCRIPT};function K3(e){return e in Va}Z({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:n,parser:a}=e,i=a.parseExpression(!0,r),u=n.slice(1,n.length-5);if(!K3(u))throw new Error("Unknown style: "+u);return{type:"styling",mode:a.mode,style:u,body:i}},htmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);return e.resetFont&&(n=n.withFont("")),Fo(e.body,n,t)},mathmlBuilder(e,t){var r=Va[e.style],n=t.havingStyle(r);e.resetFont&&(n=n.withFont(""));var a=dt(e.body,n),i=new G("mstyle",a),u={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},s=u[e.style];return i.setAttribute("scriptlevel",s[0]),i.setAttribute("displaystyle",s[1]),i}});var J3=function(t,r){var n=t.base;if(n)if(n.type==="op"){var a=n.limits&&(r.style.size===oe.DISPLAY.size||n.alwaysHandleSupSub);return a?zr:null}else if(n.type==="operatorname"){var i=n.alwaysHandleSupSub&&(r.style.size===oe.DISPLAY.size||n.limits);return i?Bo:null}else{if(n.type==="accent")return qt(n.base)?Ai:null;if(n.type==="horizBrace"){var u=!t.sub;return u===n.isOver?Ro:null}else return null}else return null};br({type:"supsub",htmlBuilder(e,t){var r=J3(e,t);if(r)return r(e,t);var{base:n,sup:a,sub:i}=e,u=Te(n,t),s,l,c=t.fontMetrics(),d=0,f=0,g=n&&qt(n);if(a){var p=t.havingStyle(t.style.sup());s=Te(a,p,t),g||(d=u.height-p.fontMetrics().supDrop*p.sizeMultiplier/t.sizeMultiplier)}if(i){var x=t.havingStyle(t.style.sub());l=Te(i,x,t),g||(f=u.depth+x.fontMetrics().subDrop*x.sizeMultiplier/t.sizeMultiplier)}var S;t.style===oe.DISPLAY?S=c.sup1:t.style.cramped?S=c.sup3:S=c.sup2;var D=t.sizeMultiplier,_=V(.5/c.ptPerEm/D),N=null;if(l){var M=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");if(u instanceof ct||M){var W;N=V(-((W=u.italic)!=null?W:0))}}var j;if(s&&l){d=Math.max(d,S,s.depth+.25*c.xHeight),f=Math.max(f,c.sub2);var L=c.defaultRuleThickness,ee=4*L;if(d-s.depth-(l.height-f)0&&(d+=re,f-=re)}var K=[{type:"elem",elem:l,shift:f,marginRight:_,marginLeft:N},{type:"elem",elem:s,shift:-d,marginRight:_}];j=Ee({positionType:"individualShift",children:K})}else if(l){f=Math.max(f,c.sub1,l.height-.8*c.xHeight);var R=[{type:"elem",elem:l,marginLeft:N,marginRight:_}];j=Ee({positionType:"shift",positionData:f,children:R})}else if(s)d=Math.max(d,S,s.depth+.25*c.xHeight),j=Ee({positionType:"shift",positionData:-d,children:[{type:"elem",elem:s,marginRight:_}]});else throw new Error("supsub must have either sup or sub.");var J=za(u,"right")||"mord";return z([J],[u,z(["msupsub"],[j])],t)},mathmlBuilder(e,t){var r=!1,n,a;e.base&&e.base.type==="horizBrace"&&(a=!!e.sup,a===e.base.isOver&&(r=!0,n=e.base.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var i=[Ae(e.base,t)];e.sub&&i.push(Ae(e.sub,t)),e.sup&&i.push(Ae(e.sup,t));var u;if(r)u=n?"mover":"munder";else if(e.sub)if(e.sup){var c=e.base;c&&c.type==="op"&&c.limits&&t.style===oe.DISPLAY||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(t.style===oe.DISPLAY||c.limits)?u="munderover":u="msubsup"}else{var l=e.base;l&&l.type==="op"&&l.limits&&(t.style===oe.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||t.style===oe.DISPLAY)?u="munder":u="msub"}else{var s=e.base;s&&s.type==="op"&&s.limits&&(t.style===oe.DISPLAY||s.alwaysHandleSupSub)||s&&s.type==="operatorname"&&s.alwaysHandleSupSub&&(s.limits||t.style===oe.DISPLAY)?u="mover":u="msup"}return new G(u,i)}});br({type:"atom",htmlBuilder(e,t){return Ti(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){var r=new G("mo",[bt(e.text,e.mode)]);if(e.family==="bin"){var n=vi(e,t);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});var Ho={mi:"italic",mn:"normal",mtext:"normal"};br({type:"mathord",htmlBuilder(e,t){return x0(e,t,"mathord")},mathmlBuilder(e,t){var r=new G("mi",[bt(e.text,e.mode,t)]),n=vi(e,t)||"italic";return n!==Ho[r.type]&&r.setAttribute("mathvariant",n),r}});br({type:"textord",htmlBuilder(e,t){return x0(e,t,"textord")},mathmlBuilder(e,t){var r=bt(e.text,e.mode,t),n=vi(e,t)||"normal",a;return e.mode==="text"?a=new G("mtext",[r]):/[0-9]/.test(e.text)?a=new G("mn",[r]):e.text==="\\prime"?a=new G("mo",[r]):a=new G("mi",[r]),n!==Ho[a.type]&&a.setAttribute("mathvariant",n),a}});var fa={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ma={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};br({type:"spacing",htmlBuilder(e,t){if(ma.hasOwnProperty(e.text)){var r=ma[e.text].className||"";if(e.mode==="text"){var n=x0(e,t,"textord");return n.classes.push(r),n}else return z(["mspace",r],[Ti(e.text,e.mode,t)],t)}else{if(fa.hasOwnProperty(e.text))return z(["mspace",fa[e.text]],[],t);throw new Y('Unknown type of space "'+e.text+'"')}},mathmlBuilder(e,t){var r;if(ma.hasOwnProperty(e.text))r=new G("mtext",[new Me(" ")]);else{if(fa.hasOwnProperty(e.text))return new G("mspace");throw new Y('Unknown type of space "'+e.text+'"')}return r}});var us=()=>{var e=new G("mtd",[]);return e.setAttribute("width","50%"),e};br({type:"tag",mathmlBuilder(e,t){var r=new G("mtable",[new G("mtr",[us(),new G("mtd",[tr(e.body,t)]),us(),new G("mtd",[tr(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var ss={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ls={"\\textbf":"textbf","\\textmd":"textmd"},Z3={"\\textit":"textit","\\textup":"textup"},os=(e,t)=>{var r=e.font;if(r){if(ss[r])return t.withTextFontFamily(ss[r]);if(ls[r])return t.withTextFontWeight(ls[r]);if(r==="\\emph")return t.fontShape==="textit"?t.withTextFontShape("textup"):t.withTextFontShape("textit")}else return t;return t.withTextFontShape(Z3[r])};Z({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,a=t[0];return{type:"text",mode:r.mode,body:Re(a),font:n}},htmlBuilder(e,t){var r=os(e,t),n=He(e.body,r,!0);return z(["mord","text"],n,r)},mathmlBuilder(e,t){var r=os(e,t);return tr(e.body,r)}});Z({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=Or("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ee({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]});return z(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new G("mo",[new Me("‾")]);r.setAttribute("stretchy","true");var n=new G("munder",[Ae(e.body,t),r]);return n.setAttribute("accentunder","true"),n}});Z({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Te(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ee({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new G("mpadded",[Ae(e.body,t)],["vcenter"]);return new G("mrow",[r])}});Z({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new Y("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=cs(e),n=[],a=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"␣":" "),Qt=io,zo=`[ \r - ]`,e6="\\\\[a-zA-Z@]+",t6="\\\\[^\uD800-\uDFFF]",r6="("+e6+")"+zo+"*",n6=`\\\\( -|[ \r ]+ -?)[ \r ]*`,ja="[̀-ͯ]",a6=new RegExp(ja+"+$"),i6="("+zo+"+)|"+(n6+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(ja+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(ja+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+r6)+("|"+t6+")");class hs{constructor(t,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=r,this.tokenRegex=new RegExp(i6,"g"),this.catcodes={"%":14,"~":13}}setCatcode(t,r){this.catcodes[t]=r}lex(){var t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new ot("EOF",new rt(this,r,r));var n=this.tokenRegex.exec(t);if(n===null||n.index!==r)throw new Y("Unexpected character: '"+t[r]+"'",new ot(t[r],new rt(this,r,r+1)));var a=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[a]===14){var i=t.indexOf(` -`,this.tokenRegex.lastIndex);return i===-1?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=i+1,this.lex()}return new ot(a,new rt(this,r,this.tokenRegex.lastIndex))}}class u6{constructor(t,r){t===void 0&&(t={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=t,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Y("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var r in t)t.hasOwnProperty(r)&&(t[r]==null?delete this.current[r]:this.current[r]=t[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,r,n){if(n===void 0&&(n=!1),n){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][t]=r)}else{var i=this.undefStack[this.undefStack.length-1];i&&!i.hasOwnProperty(t)&&(i[t]=this.current[t])}r==null?delete this.current[t]:this.current[t]=r}}var s6=Io;E("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});E("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});E("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});E("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});E("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return t[0].length===1&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});E("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");E("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});var ds={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};E("\\char",function(e){var t=e.popToken(),r,n=0;if(t.text==="'")r=8,t=e.popToken();else if(t.text==='"')r=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")n=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new Y("\\char` missing argument");n=t.text.charCodeAt(0)}else r=10;if(r){if(n=ds[t.text],n==null||n>=r)throw new Y("Invalid base-"+r+" digit "+t.text);for(var a;(a=ds[e.future().text])!=null&&a{var a=e.consumeArg().tokens;if(a.length!==1)throw new Y("\\newcommand's first argument must be a macro name");var i=a[0].text,u=e.isDefined(i);if(u&&!t)throw new Y("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!u&&!r)throw new Y("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(a=e.consumeArg().tokens,a.length===1&&a[0].text==="["){for(var l="",c=e.expandNextToken();c.text!=="]"&&c.text!=="EOF";)l+=c.text,c=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new Y("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return u&&n||e.macros.set(i,{tokens:a,numArgs:s}),""};E("\\newcommand",e=>Ci(e,!1,!0,!1));E("\\renewcommand",e=>Ci(e,!0,!1,!1));E("\\providecommand",e=>Ci(e,!0,!0,!0));E("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(r=>r.text).join("")),""});E("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(r=>r.text).join("")),""});E("\\show",e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Qt[r],we.math[r],we.text[r]),""});E("\\bgroup","{");E("\\egroup","}");E("~","\\nobreakspace");E("\\lq","`");E("\\rq","'");E("\\aa","\\r a");E("\\AA","\\r A");E("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");E("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");E("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");E("ℬ","\\mathscr{B}");E("ℰ","\\mathscr{E}");E("ℱ","\\mathscr{F}");E("ℋ","\\mathscr{H}");E("ℐ","\\mathscr{I}");E("ℒ","\\mathscr{L}");E("ℳ","\\mathscr{M}");E("ℛ","\\mathscr{R}");E("ℭ","\\mathfrak{C}");E("ℌ","\\mathfrak{H}");E("ℨ","\\mathfrak{Z}");E("\\Bbbk","\\Bbb{k}");E("\\llap","\\mathllap{\\textrm{#1}}");E("\\rlap","\\mathrlap{\\textrm{#1}}");E("\\clap","\\mathclap{\\textrm{#1}}");E("\\mathstrut","\\vphantom{(}");E("\\underbar","\\underline{\\text{#1}}");E("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');E("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");E("\\ne","\\neq");E("≠","\\neq");E("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");E("∉","\\notin");E("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");E("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");E("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");E("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");E("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");E("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");E("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");E("⟂","\\perp");E("‼","\\mathclose{!\\mkern-0.8mu!}");E("∌","\\notni");E("⌜","\\ulcorner");E("⌝","\\urcorner");E("⌞","\\llcorner");E("⌟","\\lrcorner");E("©","\\copyright");E("®","\\textregistered");E("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');E("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');E("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');E("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');E("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");E("⋮","\\vdots");E("\\varGamma","\\mathit{\\Gamma}");E("\\varDelta","\\mathit{\\Delta}");E("\\varTheta","\\mathit{\\Theta}");E("\\varLambda","\\mathit{\\Lambda}");E("\\varXi","\\mathit{\\Xi}");E("\\varPi","\\mathit{\\Pi}");E("\\varSigma","\\mathit{\\Sigma}");E("\\varUpsilon","\\mathit{\\Upsilon}");E("\\varPhi","\\mathit{\\Phi}");E("\\varPsi","\\mathit{\\Psi}");E("\\varOmega","\\mathit{\\Omega}");E("\\substack","\\begin{subarray}{c}#1\\end{subarray}");E("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");E("\\boxed","\\fbox{$\\displaystyle{#1}$}");E("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");E("\\implies","\\DOTSB\\;\\Longrightarrow\\;");E("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");E("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");E("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var fs={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},l6=new Set(["bin","rel"]);E("\\dots",function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in fs?t=fs[r]:(r.slice(0,4)==="\\not"||r in we.math&&l6.has(we.math[r].group))&&(t="\\dotsb"),t});var _i={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};E("\\dotso",function(e){var t=e.future().text;return t in _i?"\\ldots\\,":"\\ldots"});E("\\dotsc",function(e){var t=e.future().text;return t in _i&&t!==","?"\\ldots\\,":"\\ldots"});E("\\cdots",function(e){var t=e.future().text;return t in _i?"\\@cdots\\,":"\\@cdots"});E("\\dotsb","\\cdots");E("\\dotsm","\\cdots");E("\\dotsi","\\!\\cdots");E("\\dotsx","\\ldots\\,");E("\\DOTSI","\\relax");E("\\DOTSB","\\relax");E("\\DOTSX","\\relax");E("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");E("\\,","\\tmspace+{3mu}{.1667em}");E("\\thinspace","\\,");E("\\>","\\mskip{4mu}");E("\\:","\\tmspace+{4mu}{.2222em}");E("\\medspace","\\:");E("\\;","\\tmspace+{5mu}{.2777em}");E("\\thickspace","\\;");E("\\!","\\tmspace-{3mu}{.1667em}");E("\\negthinspace","\\!");E("\\negmedspace","\\tmspace-{4mu}{.2222em}");E("\\negthickspace","\\tmspace-{5mu}{.277em}");E("\\enspace","\\kern.5em ");E("\\enskip","\\hskip.5em\\relax");E("\\quad","\\hskip1em\\relax");E("\\qquad","\\hskip2em\\relax");E("\\tag","\\@ifstar\\tag@literal\\tag@paren");E("\\tag@paren","\\tag@literal{({#1})}");E("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new Y("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});E("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");E("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");E("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");E("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");E("\\newline","\\\\\\relax");E("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Uo=V(wt["Main-Regular"][84][1]-.7*wt["Main-Regular"][65][1]);E("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");E("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+Uo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");E("\\hspace","\\@ifstar\\@hspacer\\@hspace");E("\\@hspace","\\hskip #1\\relax");E("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");E("\\ordinarycolon",":");E("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");E("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');E("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');E("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');E("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');E("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');E("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');E("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');E("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');E("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');E("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');E("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');E("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');E("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');E("∷","\\dblcolon");E("∹","\\eqcolon");E("≔","\\coloneqq");E("≕","\\eqqcolon");E("⩴","\\Coloneqq");E("\\ratio","\\vcentcolon");E("\\coloncolon","\\dblcolon");E("\\colonequals","\\coloneqq");E("\\coloncolonequals","\\Coloneqq");E("\\equalscolon","\\eqqcolon");E("\\equalscoloncolon","\\Eqqcolon");E("\\colonminus","\\coloneq");E("\\coloncolonminus","\\Coloneq");E("\\minuscolon","\\eqcolon");E("\\minuscoloncolon","\\Eqcolon");E("\\coloncolonapprox","\\Colonapprox");E("\\coloncolonsim","\\Colonsim");E("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");E("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");E("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");E("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");E("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");E("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");E("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");E("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");E("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");E("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");E("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");E("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");E("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");E("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");E("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");E("\\nleqq","\\html@mathml{\\@nleqq}{≰}");E("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");E("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");E("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");E("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");E("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");E("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");E("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");E("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");E("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");E("\\imath","\\html@mathml{\\@imath}{ı}");E("\\jmath","\\html@mathml{\\@jmath}{ȷ}");E("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");E("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");E("⟦","\\llbracket");E("⟧","\\rrbracket");E("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");E("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");E("⦃","\\lBrace");E("⦄","\\rBrace");E("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");E("⦵","\\minuso");E("\\darr","\\downarrow");E("\\dArr","\\Downarrow");E("\\Darr","\\Downarrow");E("\\lang","\\langle");E("\\rang","\\rangle");E("\\uarr","\\uparrow");E("\\uArr","\\Uparrow");E("\\Uarr","\\Uparrow");E("\\N","\\mathbb{N}");E("\\R","\\mathbb{R}");E("\\Z","\\mathbb{Z}");E("\\alef","\\aleph");E("\\alefsym","\\aleph");E("\\Alpha","\\mathrm{A}");E("\\Beta","\\mathrm{B}");E("\\bull","\\bullet");E("\\Chi","\\mathrm{X}");E("\\clubs","\\clubsuit");E("\\cnums","\\mathbb{C}");E("\\Complex","\\mathbb{C}");E("\\Dagger","\\ddagger");E("\\diamonds","\\diamondsuit");E("\\empty","\\emptyset");E("\\Epsilon","\\mathrm{E}");E("\\Eta","\\mathrm{H}");E("\\exist","\\exists");E("\\harr","\\leftrightarrow");E("\\hArr","\\Leftrightarrow");E("\\Harr","\\Leftrightarrow");E("\\hearts","\\heartsuit");E("\\image","\\Im");E("\\infin","\\infty");E("\\Iota","\\mathrm{I}");E("\\isin","\\in");E("\\Kappa","\\mathrm{K}");E("\\larr","\\leftarrow");E("\\lArr","\\Leftarrow");E("\\Larr","\\Leftarrow");E("\\lrarr","\\leftrightarrow");E("\\lrArr","\\Leftrightarrow");E("\\Lrarr","\\Leftrightarrow");E("\\Mu","\\mathrm{M}");E("\\natnums","\\mathbb{N}");E("\\Nu","\\mathrm{N}");E("\\Omicron","\\mathrm{O}");E("\\plusmn","\\pm");E("\\rarr","\\rightarrow");E("\\rArr","\\Rightarrow");E("\\Rarr","\\Rightarrow");E("\\real","\\Re");E("\\reals","\\mathbb{R}");E("\\Reals","\\mathbb{R}");E("\\Rho","\\mathrm{P}");E("\\sdot","\\cdot");E("\\sect","\\S");E("\\spades","\\spadesuit");E("\\sub","\\subset");E("\\sube","\\subseteq");E("\\supe","\\supseteq");E("\\Tau","\\mathrm{T}");E("\\thetasym","\\vartheta");E("\\weierp","\\wp");E("\\Zeta","\\mathrm{Z}");E("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");E("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");E("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");E("\\bra","\\mathinner{\\langle{#1}|}");E("\\ket","\\mathinner{|{#1}\\rangle}");E("\\braket","\\mathinner{\\langle{#1}\\rangle}");E("\\Bra","\\left\\langle#1\\right|");E("\\Ket","\\left|#1\\right\\rangle");var qo=e=>t=>{var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,u=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=f=>g=>{e&&(g.macros.set("|",u),a.length&&g.macros.set("\\|",s));var p=f;if(!f&&a.length){var x=g.future();x.text==="|"&&(g.popToken(),p=!0)}return{tokens:p?a:n,numArgs:0}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var c=t.consumeArg().tokens,d=t.expandTokens([...i,...c,...r]);return t.macros.endGroup(),{tokens:d.reverse(),numArgs:0}};E("\\bra@ket",qo(!1));E("\\bra@set",qo(!0));E("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");E("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");E("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");E("\\angln","{\\angl n}");E("\\blue","\\textcolor{##6495ed}{#1}");E("\\orange","\\textcolor{##ffa500}{#1}");E("\\pink","\\textcolor{##ff00af}{#1}");E("\\red","\\textcolor{##df0030}{#1}");E("\\green","\\textcolor{##28ae7b}{#1}");E("\\gray","\\textcolor{gray}{#1}");E("\\purple","\\textcolor{##9d38bd}{#1}");E("\\blueA","\\textcolor{##ccfaff}{#1}");E("\\blueB","\\textcolor{##80f6ff}{#1}");E("\\blueC","\\textcolor{##63d9ea}{#1}");E("\\blueD","\\textcolor{##11accd}{#1}");E("\\blueE","\\textcolor{##0c7f99}{#1}");E("\\tealA","\\textcolor{##94fff5}{#1}");E("\\tealB","\\textcolor{##26edd5}{#1}");E("\\tealC","\\textcolor{##01d1c1}{#1}");E("\\tealD","\\textcolor{##01a995}{#1}");E("\\tealE","\\textcolor{##208170}{#1}");E("\\greenA","\\textcolor{##b6ffb0}{#1}");E("\\greenB","\\textcolor{##8af281}{#1}");E("\\greenC","\\textcolor{##74cf70}{#1}");E("\\greenD","\\textcolor{##1fab54}{#1}");E("\\greenE","\\textcolor{##0d923f}{#1}");E("\\goldA","\\textcolor{##ffd0a9}{#1}");E("\\goldB","\\textcolor{##ffbb71}{#1}");E("\\goldC","\\textcolor{##ff9c39}{#1}");E("\\goldD","\\textcolor{##e07d10}{#1}");E("\\goldE","\\textcolor{##a75a05}{#1}");E("\\redA","\\textcolor{##fca9a9}{#1}");E("\\redB","\\textcolor{##ff8482}{#1}");E("\\redC","\\textcolor{##f9685d}{#1}");E("\\redD","\\textcolor{##e84d39}{#1}");E("\\redE","\\textcolor{##bc2612}{#1}");E("\\maroonA","\\textcolor{##ffbde0}{#1}");E("\\maroonB","\\textcolor{##ff92c6}{#1}");E("\\maroonC","\\textcolor{##ed5fa6}{#1}");E("\\maroonD","\\textcolor{##ca337c}{#1}");E("\\maroonE","\\textcolor{##9e034e}{#1}");E("\\purpleA","\\textcolor{##ddd7ff}{#1}");E("\\purpleB","\\textcolor{##c6b9fc}{#1}");E("\\purpleC","\\textcolor{##aa87ff}{#1}");E("\\purpleD","\\textcolor{##7854ab}{#1}");E("\\purpleE","\\textcolor{##543b78}{#1}");E("\\mintA","\\textcolor{##f5f9e8}{#1}");E("\\mintB","\\textcolor{##edf2df}{#1}");E("\\mintC","\\textcolor{##e0e5cc}{#1}");E("\\grayA","\\textcolor{##f6f7f7}{#1}");E("\\grayB","\\textcolor{##f0f1f2}{#1}");E("\\grayC","\\textcolor{##e3e5e6}{#1}");E("\\grayD","\\textcolor{##d6d8da}{#1}");E("\\grayE","\\textcolor{##babec2}{#1}");E("\\grayF","\\textcolor{##888d93}{#1}");E("\\grayG","\\textcolor{##626569}{#1}");E("\\grayH","\\textcolor{##3b3e40}{#1}");E("\\grayI","\\textcolor{##21242c}{#1}");E("\\kaBlue","\\textcolor{##314453}{#1}");E("\\kaGreen","\\textcolor{##71B307}{#1}");var Yo={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class o6{constructor(t,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new u6(s6,r.macros),this.mode=n,this.stack=[]}feed(t){this.lexer=new hs(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var r,n,a;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:a,end:n}=this.consumeArg(["]"])}else({tokens:a,start:r,end:n}=this.consumeArg());return this.pushToken(new ot("EOF",n.loc)),this.pushTokens(a),new ot("",rt.range(r,n))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var r=[],n=t&&t.length>0;n||this.consumeSpaces();var a=this.future(),i,u=0,s=0;do{if(i=this.popToken(),r.push(i),i.text==="{")++u;else if(i.text==="}"){if(--u,u===-1)throw new Y("Extra }",i)}else if(i.text==="EOF")throw new Y("Unexpected end of input in a macro argument, expected '"+(t&&n?t[s]:"}")+"'",i);if(t&&n)if((u===0||u===1&&t[s]==="{")&&i.text===t[s]){if(++s,s===t.length){r.splice(-s,s);break}}else s=0}while(u!==0||n);return a.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:a,end:i}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new Y("The length of delimiters doesn't match the number of args!");for(var n=r[0],a=0;athis.settings.maxExpand)throw new Y("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var r=this.popToken(),n=r.text,a=r.noexpand?null:this._getExpansion(n);if(a==null||t&&a.unexpandable){if(t&&a==null&&n[0]==="\\"&&!this.isDefined(n))throw new Y("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var i=a.tokens,u=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs){i=i.slice();for(var s=i.length-1;s>=0;--s){var l=i[s];if(l.text==="#"){if(s===0)throw new Y("Incomplete placeholder at end of macro body",l);if(l=i[--s],l.text==="#")i.splice(s+1,1);else if(/^[1-9]$/.test(l.text))i.splice(s,2,...u[+l.text-1]);else throw new Y("Not a valid argument number",l)}}}return this.pushTokens(i),i.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}}expandMacro(t){return this.macros.has(t)?this.expandTokens([new ot(t)]):void 0}expandTokens(t){var r=[],n=this.stack.length;for(this.pushTokens(t);this.stack.length>n;)if(this.expandOnce(!0)===!1){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),r.push(a)}return this.countExpansion(r.length),r}expandMacroAsText(t){var r=this.expandMacro(t);return r&&r.map(n=>n.text).join("")}_getExpansion(t){var r=this.macros.get(t);if(r==null)return r;if(t.length===1){var n=this.lexer.catcodes[t];if(n!=null&&n!==13)return}var a=typeof r=="function"?r(this):r;if(typeof a=="string"){var i=0;if(a.includes("#"))for(var u=a.replace(/##/g,"");u.includes("#"+(i+1));)++i;for(var s=new hs(a,this.settings),l=[],c=s.lex();c.text!=="EOF";)l.push(c),c=s.lex();l.reverse();var d={tokens:l,numArgs:i};return d}return a}isDefined(t){return this.macros.has(t)||Qt.hasOwnProperty(t)||we.math.hasOwnProperty(t)||we.text.hasOwnProperty(t)||Yo.hasOwnProperty(t)}isExpandable(t){var r=this.macros.get(t);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Qt.hasOwnProperty(t)&&!Qt[t].primitive}}var ms=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,jn=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),pa={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ps={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};let Go=class Vo{constructor(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new o6(t,r,this.mode),this.settings=r,this.leftrightDepth=0,this.nextToken=null}expect(t,r){if(r===void 0&&(r=!0),this.fetch().text!==t)throw new Y("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var r=this.nextToken;this.consume(),this.gullet.pushToken(new ot("}")),this.gullet.pushTokens(t);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(t,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var a=this.fetch();if(Vo.endOfExpression.has(a.text)||r&&a.text===r||t&&Qt[a.text]&&Qt[a.text].infix)break;var i=this.parseAtom(r);if(i){if(i.type==="internal")continue}else break;n.push(i)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){for(var r=-1,n,a=0;a=128)this.settings.strict&&($l(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),t)),u={type:"textord",mode:"text",loc:rt.range(t),text:r};else return null;if(this.consume(),i)for(var d=0;dc&&(c=d):d&&(c!==void 0&&c>-1&&l.push(` -`.repeat(c)||" "),c=-1,l.push(d))}return l.join("")}function ec(e,t,r){return e.type==="element"?F6(e,t,r):e.type==="text"?r.whitespace==="normal"?tc(e,r):H6(e):[]}function F6(e,t,r){const n=rc(e,r),a=e.children||[];let i=-1,u=[];if(P6(e))return u;let s,l;for(Xa(e)||ks(e)&&xs(t,e,ks)?l=` -`:M6(e)?(s=2,l=2):Zo(e)&&(s=1,l=1);++i-1&&i<=t.length){let u=0;for(;;){let s=r[u];if(s===void 0){const l=Ss(t,r[u-1]);s=l===-1?t.length+1:l+1,r[u]=s}if(s>i)return{line:u+1,column:i-(u>0?r[u-1]:0)+1,offset:i};u++}}}function a(i){if(i&&typeof i.line=="number"&&typeof i.column=="number"&&!Number.isNaN(i.line)&&!Number.isNaN(i.column)){for(;r.length1?r[i.line-2]:0)+i.column-1;if(u=55296&&e<=57343}function cp(e){return e>=56320&&e<=57343}function hp(e,t){return(e-55296)*1024+9216+t}function sc(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function lc(e){return e>=64976&&e<=65007||op.has(e)}var P;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(P||(P={}));const dp=65536;class fp{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=dp,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,r){const{line:n,col:a,offset:i}=this,u=a+r,s=i+r;return{code:t,startLine:n,endLine:n,startCol:u,endCol:u,startOffset:s,endOffset:s}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){const r=this.html.charCodeAt(this.pos+1);if(cp(r))return this.pos++,this._addGap(),hp(t,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,T.EOF;return this._err(P.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,r){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,r){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(t,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;const n=this.html.charCodeAt(r);return n===T.CARRIAGE_RETURN?T.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,T.EOF;let t=this.html.charCodeAt(this.pos);return t===T.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,T.LINE_FEED):t===T.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,uc(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===T.LINE_FEED||t===T.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){sc(t)?this._err(P.controlCharacterInInputStream):lc(t)&&this._err(P.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}const mp=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),pp=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function gp(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=pp.get(e))!==null&&t!==void 0?t:e}var qe;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(qe||(qe={}));const bp=32;var Kt;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(Kt||(Kt={}));function $a(e){return e>=qe.ZERO&&e<=qe.NINE}function Ep(e){return e>=qe.UPPER_A&&e<=qe.UPPER_F||e>=qe.LOWER_A&&e<=qe.LOWER_F}function Tp(e){return e>=qe.UPPER_A&&e<=qe.UPPER_Z||e>=qe.LOWER_A&&e<=qe.LOWER_Z||$a(e)}function xp(e){return e===qe.EQUALS||Tp(e)}var Ue;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(Ue||(Ue={}));var Ft;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Ft||(Ft={}));class yp{constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n,this.state=Ue.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Ft.Strict}startEntity(t){this.decodeMode=t,this.state=Ue.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,r){switch(this.state){case Ue.EntityStart:return t.charCodeAt(r)===qe.NUM?(this.state=Ue.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=Ue.NamedEntity,this.stateNamedEntity(t,r));case Ue.NumericStart:return this.stateNumericStart(t,r);case Ue.NumericDecimal:return this.stateNumericDecimal(t,r);case Ue.NumericHex:return this.stateNumericHex(t,r);case Ue.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|bp)===qe.LOWER_X?(this.state=Ue.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=Ue.NumericDecimal,this.stateNumericDecimal(t,r))}addToNumericResult(t,r,n,a){if(r!==n){const i=n-r;this.result=this.result*Math.pow(a,i)+Number.parseInt(t.substr(r,i),a),this.consumed+=i}}stateNumericHex(t,r){const n=r;for(;r>14;for(;r>14,i!==0){if(u===qe.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Ft.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;const{result:r,decodeTree:n}=this,a=(n[r]&Kt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,a,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){const{decodeTree:a}=this;return this.emitCodePoint(r===1?a[t]&~Kt.VALUE_LENGTH:a[t+1],n),r===3&&this.emitCodePoint(a[t+2],n),n}end(){var t;switch(this.state){case Ue.NamedEntity:return this.result!==0&&(this.decodeMode!==Ft.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ue.NumericDecimal:return this.emitNumericEntity(0,2);case Ue.NumericHex:return this.emitNumericEntity(0,3);case Ue.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ue.EntityStart:return 0}}}function vp(e,t,r,n){const a=(t&Kt.BRANCH_LENGTH)>>7,i=t&Kt.JUMP_TABLE;if(a===0)return i!==0&&n===i?r:-1;if(i){const l=n-i;return l<0||l>=a?-1:e[r+l]-1}let u=r,s=u+a-1;for(;u<=s;){const l=u+s>>>1,c=e[l];if(cn)s=l-1;else return e[l+a]}return-1}var H;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(H||(H={}));var mr;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(mr||(mr={}));var pt;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})(pt||(pt={}));var O;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(O||(O={}));var o;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(o||(o={}));const Ap=new Map([[O.A,o.A],[O.ADDRESS,o.ADDRESS],[O.ANNOTATION_XML,o.ANNOTATION_XML],[O.APPLET,o.APPLET],[O.AREA,o.AREA],[O.ARTICLE,o.ARTICLE],[O.ASIDE,o.ASIDE],[O.B,o.B],[O.BASE,o.BASE],[O.BASEFONT,o.BASEFONT],[O.BGSOUND,o.BGSOUND],[O.BIG,o.BIG],[O.BLOCKQUOTE,o.BLOCKQUOTE],[O.BODY,o.BODY],[O.BR,o.BR],[O.BUTTON,o.BUTTON],[O.CAPTION,o.CAPTION],[O.CENTER,o.CENTER],[O.CODE,o.CODE],[O.COL,o.COL],[O.COLGROUP,o.COLGROUP],[O.DD,o.DD],[O.DESC,o.DESC],[O.DETAILS,o.DETAILS],[O.DIALOG,o.DIALOG],[O.DIR,o.DIR],[O.DIV,o.DIV],[O.DL,o.DL],[O.DT,o.DT],[O.EM,o.EM],[O.EMBED,o.EMBED],[O.FIELDSET,o.FIELDSET],[O.FIGCAPTION,o.FIGCAPTION],[O.FIGURE,o.FIGURE],[O.FONT,o.FONT],[O.FOOTER,o.FOOTER],[O.FOREIGN_OBJECT,o.FOREIGN_OBJECT],[O.FORM,o.FORM],[O.FRAME,o.FRAME],[O.FRAMESET,o.FRAMESET],[O.H1,o.H1],[O.H2,o.H2],[O.H3,o.H3],[O.H4,o.H4],[O.H5,o.H5],[O.H6,o.H6],[O.HEAD,o.HEAD],[O.HEADER,o.HEADER],[O.HGROUP,o.HGROUP],[O.HR,o.HR],[O.HTML,o.HTML],[O.I,o.I],[O.IMG,o.IMG],[O.IMAGE,o.IMAGE],[O.INPUT,o.INPUT],[O.IFRAME,o.IFRAME],[O.KEYGEN,o.KEYGEN],[O.LABEL,o.LABEL],[O.LI,o.LI],[O.LINK,o.LINK],[O.LISTING,o.LISTING],[O.MAIN,o.MAIN],[O.MALIGNMARK,o.MALIGNMARK],[O.MARQUEE,o.MARQUEE],[O.MATH,o.MATH],[O.MENU,o.MENU],[O.META,o.META],[O.MGLYPH,o.MGLYPH],[O.MI,o.MI],[O.MO,o.MO],[O.MN,o.MN],[O.MS,o.MS],[O.MTEXT,o.MTEXT],[O.NAV,o.NAV],[O.NOBR,o.NOBR],[O.NOFRAMES,o.NOFRAMES],[O.NOEMBED,o.NOEMBED],[O.NOSCRIPT,o.NOSCRIPT],[O.OBJECT,o.OBJECT],[O.OL,o.OL],[O.OPTGROUP,o.OPTGROUP],[O.OPTION,o.OPTION],[O.P,o.P],[O.PARAM,o.PARAM],[O.PLAINTEXT,o.PLAINTEXT],[O.PRE,o.PRE],[O.RB,o.RB],[O.RP,o.RP],[O.RT,o.RT],[O.RTC,o.RTC],[O.RUBY,o.RUBY],[O.S,o.S],[O.SCRIPT,o.SCRIPT],[O.SEARCH,o.SEARCH],[O.SECTION,o.SECTION],[O.SELECT,o.SELECT],[O.SOURCE,o.SOURCE],[O.SMALL,o.SMALL],[O.SPAN,o.SPAN],[O.STRIKE,o.STRIKE],[O.STRONG,o.STRONG],[O.STYLE,o.STYLE],[O.SUB,o.SUB],[O.SUMMARY,o.SUMMARY],[O.SUP,o.SUP],[O.TABLE,o.TABLE],[O.TBODY,o.TBODY],[O.TEMPLATE,o.TEMPLATE],[O.TEXTAREA,o.TEXTAREA],[O.TFOOT,o.TFOOT],[O.TD,o.TD],[O.TH,o.TH],[O.THEAD,o.THEAD],[O.TITLE,o.TITLE],[O.TR,o.TR],[O.TRACK,o.TRACK],[O.TT,o.TT],[O.U,o.U],[O.UL,o.UL],[O.SVG,o.SVG],[O.VAR,o.VAR],[O.WBR,o.WBR],[O.XMP,o.XMP]]);function qr(e){var t;return(t=Ap.get(e))!==null&&t!==void 0?t:o.UNKNOWN}const U=o,kp={[H.HTML]:new Set([U.ADDRESS,U.APPLET,U.AREA,U.ARTICLE,U.ASIDE,U.BASE,U.BASEFONT,U.BGSOUND,U.BLOCKQUOTE,U.BODY,U.BR,U.BUTTON,U.CAPTION,U.CENTER,U.COL,U.COLGROUP,U.DD,U.DETAILS,U.DIR,U.DIV,U.DL,U.DT,U.EMBED,U.FIELDSET,U.FIGCAPTION,U.FIGURE,U.FOOTER,U.FORM,U.FRAME,U.FRAMESET,U.H1,U.H2,U.H3,U.H4,U.H5,U.H6,U.HEAD,U.HEADER,U.HGROUP,U.HR,U.HTML,U.IFRAME,U.IMG,U.INPUT,U.LI,U.LINK,U.LISTING,U.MAIN,U.MARQUEE,U.MENU,U.META,U.NAV,U.NOEMBED,U.NOFRAMES,U.NOSCRIPT,U.OBJECT,U.OL,U.P,U.PARAM,U.PLAINTEXT,U.PRE,U.SCRIPT,U.SECTION,U.SELECT,U.SOURCE,U.STYLE,U.SUMMARY,U.TABLE,U.TBODY,U.TD,U.TEMPLATE,U.TEXTAREA,U.TFOOT,U.TH,U.THEAD,U.TITLE,U.TR,U.TRACK,U.UL,U.WBR,U.XMP]),[H.MATHML]:new Set([U.MI,U.MO,U.MN,U.MS,U.MTEXT,U.ANNOTATION_XML]),[H.SVG]:new Set([U.TITLE,U.FOREIGN_OBJECT,U.DESC]),[H.XLINK]:new Set,[H.XML]:new Set,[H.XMLNS]:new Set},Qa=new Set([U.H1,U.H2,U.H3,U.H4,U.H5,U.H6]);O.STYLE,O.SCRIPT,O.XMP,O.IFRAME,O.NOEMBED,O.NOFRAMES,O.PLAINTEXT;var y;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(y||(y={}));const De={DATA:y.DATA,RCDATA:y.RCDATA,RAWTEXT:y.RAWTEXT,SCRIPT_DATA:y.SCRIPT_DATA,PLAINTEXT:y.PLAINTEXT,CDATA_SECTION:y.CDATA_SECTION};function Sp(e){return e>=T.DIGIT_0&&e<=T.DIGIT_9}function rn(e){return e>=T.LATIN_CAPITAL_A&&e<=T.LATIN_CAPITAL_Z}function wp(e){return e>=T.LATIN_SMALL_A&&e<=T.LATIN_SMALL_Z}function Xt(e){return wp(e)||rn(e)}function Cs(e){return Xt(e)||Sp(e)}function Wn(e){return e+32}function cc(e){return e===T.SPACE||e===T.LINE_FEED||e===T.TABULATION||e===T.FORM_FEED}function _s(e){return cc(e)||e===T.SOLIDUS||e===T.GREATER_THAN_SIGN}function Cp(e){return e===T.NULL?P.nullCharacterReference:e>1114111?P.characterReferenceOutsideUnicodeRange:uc(e)?P.surrogateCharacterReference:lc(e)?P.noncharacterCharacterReference:sc(e)||e===T.CARRIAGE_RETURN?P.controlCharacterReference:null}class _p{constructor(t,r){this.options=t,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=y.DATA,this.returnState=y.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new fp(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new yp(mp,(n,a)=>{this.preprocessor.pos=this.entityStartPos+a-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(P.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(P.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{const a=Cp(n);a&&this._err(a,1)}}:void 0)}_err(t,r=0){var n,a;(a=(n=this.handler).onParseError)===null||a===void 0||a.call(n,this.preprocessor.getError(t,r))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.())}write(t,r,n){this.active=!0,this.preprocessor.write(t,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let r=0;r0&&this._err(P.endTagWithAttributes),t.selfClosing&&this._err(P.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case de.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case de.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case de.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){const t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:de.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,r)}_emitCodePoint(t){const r=cc(t)?de.WHITESPACE_CHARACTER:t===T.NULL?de.NULL_CHARACTER:de.CHARACTER;this._appendCharToCurrentCharacterToken(r,String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(de.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=y.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Ft.Attribute:Ft.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===y.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===y.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case y.DATA:{this._stateData(t);break}case y.RCDATA:{this._stateRcdata(t);break}case y.RAWTEXT:{this._stateRawtext(t);break}case y.SCRIPT_DATA:{this._stateScriptData(t);break}case y.PLAINTEXT:{this._statePlaintext(t);break}case y.TAG_OPEN:{this._stateTagOpen(t);break}case y.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case y.TAG_NAME:{this._stateTagName(t);break}case y.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case y.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case y.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case y.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case y.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case y.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case y.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case y.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case y.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case y.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case y.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case y.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case y.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case y.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case y.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case y.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case y.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case y.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case y.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case y.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case y.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case y.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case y.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case y.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case y.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case y.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case y.BOGUS_COMMENT:{this._stateBogusComment(t);break}case y.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case y.COMMENT_START:{this._stateCommentStart(t);break}case y.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case y.COMMENT:{this._stateComment(t);break}case y.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case y.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case y.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case y.COMMENT_END:{this._stateCommentEnd(t);break}case y.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case y.DOCTYPE:{this._stateDoctype(t);break}case y.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case y.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case y.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case y.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case y.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case y.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case y.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case y.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case y.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case y.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case y.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case y.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case y.CDATA_SECTION:{this._stateCdataSection(t);break}case y.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case y.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case y.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case y.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.TAG_OPEN;break}case T.AMPERSAND:{this._startCharacterReference();break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitCodePoint(t);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case T.AMPERSAND:{this._startCharacterReference();break}case T.LESS_THAN_SIGN:{this.state=y.RCDATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.RAWTEXT_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case T.LESS_THAN_SIGN:{this.state=y.SCRIPT_DATA_LESS_THAN_SIGN;break}case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case T.NULL:{this._err(P.unexpectedNullCharacter),this._emitChars(Se);break}case T.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(Xt(t))this._createStartTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.EXCLAMATION_MARK:{this.state=y.MARKUP_DECLARATION_OPEN;break}case T.SOLIDUS:{this.state=y.END_TAG_OPEN;break}case T.QUESTION_MARK:{this._err(P.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=y.BOGUS_COMMENT,this._stateBogusComment(t);break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(P.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=y.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(Xt(t))this._createEndTagToken(),this.state=y.TAG_NAME,this._stateTagName(t);else switch(t){case T.GREATER_THAN_SIGN:{this._err(P.missingEndTagName),this.state=y.DATA;break}case T.EOF:{this._err(P.eofBeforeTagName),this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===T.SOLIDUS?this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Xt(t)?(this._emitChars("<"),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=y.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){Xt(t)?(this.state=y.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("");break}case T.NULL:{this._err(P.unexpectedNullCharacter),this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Se);break}case T.EOF:{this._err(P.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===T.SOLIDUS?(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=y.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(et.SCRIPT,!1)&&_s(this.preprocessor.peek(et.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,r){const n=this._indexOf(t);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(t,r,n){const a=this._indexOf(t)+1;this.items.splice(a,0,r),this.tagIDs.splice(a,0,n),this.stackTop++,a===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,a===this.stackTop)}popUntilTagNamePopped(t){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(t,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==H.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(t){for(;this.stackTop>=t;){const r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(t,r){const n=this._indexOfTagNames(t,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(Lp,H.HTML)}clearBackToTableBodyContext(){this.clearBackTo(Op,H.HTML)}clearBackToTableRowContext(){this.clearBackTo(Dp,H.HTML)}remove(t){const r=this._indexOf(t);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===o.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){const r=this._indexOf(t)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===o.HTML}hasInDynamicScope(t,r){for(let n=this.stackTop;n>=0;n--){const a=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case H.HTML:{if(a===t)return!0;if(r.has(a))return!1;break}case H.SVG:{if(Ds.has(a))return!1;break}case H.MATHML:{if(Ns.has(a))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,s0)}hasInListItemScope(t){return this.hasInDynamicScope(t,Ip)}hasInButtonScope(t){return this.hasInDynamicScope(t,Np)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case H.HTML:{if(Qa.has(r))return!0;if(s0.has(r))return!1;break}case H.SVG:{if(Ds.has(r))return!1;break}case H.MATHML:{if(Ns.has(r))return!1;break}}}return!0}hasInTableScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===H.HTML)switch(this.tagIDs[t]){case o.TBODY:case o.THEAD:case o.TFOOT:return!0;case o.TABLE:case o.HTML:return!1}return!0}hasInSelectScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===H.HTML)switch(this.tagIDs[r]){case t:return!0;case o.OPTION:case o.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&hc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Is.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Is.has(this.currentTagId);)this.pop()}}const ga=3;var St;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(St||(St={}));const Os={type:St.Marker};class Pp{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,r){const n=[],a=r.length,i=this.treeAdapter.getTagName(t),u=this.treeAdapter.getNamespaceURI(t);for(let s=0;s[u.name,u.value]));let i=0;for(let u=0;ua.get(l.name)===l.value)&&(i+=1,i>=ga&&this.entries.splice(s.idx,1))}}insertMarker(){this.entries.unshift(Os)}pushElement(t,r){this._ensureNoahArkCondition(t),this.entries.unshift({type:St.Element,element:t,token:r})}insertElementAfterBookmark(t,r){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:St.Element,element:t,token:r})}removeEntry(t){const r=this.entries.indexOf(t);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){const t=this.entries.indexOf(Os);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){const r=this.entries.find(n=>n.type===St.Marker||this.treeAdapter.getTagName(n.element)===t);return r&&r.type===St.Element?r:null}getElementEntry(t){return this.entries.find(r=>r.type===St.Element&&r.element===t)}}const $t={createDocument(){return{nodeName:"#document",mode:pt.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){const n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,r,n){const a=e.childNodes.find(i=>i.nodeName==="#documentType");if(a)a.name=t,a.publicId=r,a.systemId=n;else{const i={nodeName:"#documentType",name:t,publicId:r,systemId:n,parentNode:null};$t.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const r=e.childNodes[e.childNodes.length-1];if($t.isTextNode(r)){r.value+=t;return}}$t.appendChild(e,$t.createTextNode(t))},insertTextBefore(e,t,r){const n=e.childNodes[e.childNodes.indexOf(r)-1];n&&$t.isTextNode(n)?n.value+=t:$t.insertBefore(e,$t.createTextNode(t),r)},adoptAttributes(e,t){const r=new Set(e.attrs.map(n=>n.name));for(let n=0;ne.startsWith(r))}function qp(e){return e.name===dc&&e.publicId===null&&(e.systemId===null||e.systemId===Bp)}function Yp(e){if(e.name!==dc)return pt.QUIRKS;const{systemId:t}=e;if(t&&t.toLowerCase()===Fp)return pt.QUIRKS;let{publicId:r}=e;if(r!==null){if(r=r.toLowerCase(),zp.has(r))return pt.QUIRKS;let n=t===null?Hp:fc;if(Ls(r,n))return pt.QUIRKS;if(n=t===null?mc:Up,Ls(r,n))return pt.LIMITED_QUIRKS}return pt.NO_QUIRKS}const Rs={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},Gp="definitionurl",Vp="definitionURL",jp=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),Wp=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:H.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:H.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:H.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:H.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:H.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:H.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:H.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:H.XML}],["xml:space",{prefix:"xml",name:"space",namespace:H.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:H.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:H.XMLNS}]]),Xp=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),$p=new Set([o.B,o.BIG,o.BLOCKQUOTE,o.BODY,o.BR,o.CENTER,o.CODE,o.DD,o.DIV,o.DL,o.DT,o.EM,o.EMBED,o.H1,o.H2,o.H3,o.H4,o.H5,o.H6,o.HEAD,o.HR,o.I,o.IMG,o.LI,o.LISTING,o.MENU,o.META,o.NOBR,o.OL,o.P,o.PRE,o.RUBY,o.S,o.SMALL,o.SPAN,o.STRONG,o.STRIKE,o.SUB,o.SUP,o.TABLE,o.TT,o.U,o.UL,o.VAR]);function Qp(e){const t=e.tagID;return t===o.FONT&&e.attrs.some(({name:n})=>n===mr.COLOR||n===mr.SIZE||n===mr.FACE)||$p.has(t)}function pc(e){for(let t=0;t0&&this._setContextModes(t,r)}onItemPop(t,r){var n,a;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(a=(n=this.treeAdapter).onItemPop)===null||a===void 0||a.call(n,t,this.openElements.current),r){let i,u;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,u=this.fragmentContextID):{current:i,currentTagId:u}=this.openElements,this._setContextModes(i,u)}}_setContextModes(t,r){const n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===H.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,t)}_switchToTextParsing(t,r){this._insertElement(t,H.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=k.TEXT}switchToPlaintextParsing(){this.insertionMode=k.TEXT,this.originalInsertionMode=k.IN_BODY,this.tokenizer.state=De.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===O.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==H.HTML))switch(this.fragmentContextID){case o.TITLE:case o.TEXTAREA:{this.tokenizer.state=De.RCDATA;break}case o.STYLE:case o.XMP:case o.IFRAME:case o.NOEMBED:case o.NOFRAMES:case o.NOSCRIPT:{this.tokenizer.state=De.RAWTEXT;break}case o.SCRIPT:{this.tokenizer.state=De.SCRIPT_DATA;break}case o.PLAINTEXT:{this.tokenizer.state=De.PLAINTEXT;break}}}_setDocumentType(t){const r=t.name||"",n=t.publicId||"",a=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,a),t.location){const u=this.treeAdapter.getChildNodes(this.document).find(s=>this.treeAdapter.isDocumentTypeNode(s));u&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}}_attachElementToTree(t,r){if(this.options.sourceCodeLocationInfo){const n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(t,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t)}}_appendElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location)}_insertElement(t,r){const n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID)}_insertFakeElement(t,r){const n=this.treeAdapter.createElement(t,H.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(t){const r=this.treeAdapter.createElement(t.tagName,H.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,t.location),this.openElements.push(r,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const t=this.treeAdapter.createElement(O.HTML,H.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,o.HTML)}_appendCommentNode(t,r){const n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location)}_insertCharacters(t){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,t.chars,n):this.treeAdapter.insertText(r,t.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,t.chars)),!t.location)return;const a=this.treeAdapter.getChildNodes(r),i=n?a.lastIndexOf(n):a.length,u=a[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(u)){const{endLine:l,endCol:c,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(u,{endLine:l,endCol:c,endOffset:d})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(u,t.location)}_adoptNodes(t,r){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(t,r){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&r.location){const n=r.location,a=this.treeAdapter.getTagName(t),i=r.type===de.END_TAG&&a===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,t.tagID===o.SVG&&this.treeAdapter.getTagName(r)===O.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===H.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===o.MGLYPH||t.tagID===o.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,H.HTML)}_processToken(t){switch(t.type){case de.CHARACTER:{this.onCharacter(t);break}case de.NULL_CHARACTER:{this.onNullCharacter(t);break}case de.COMMENT:{this.onComment(t);break}case de.DOCTYPE:{this.onDoctype(t);break}case de.START_TAG:{this._processStartTag(t);break}case de.END_TAG:{this.onEndTag(t);break}case de.EOF:{this.onEof(t);break}case de.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,r,n){const a=this.treeAdapter.getNamespaceURI(r),i=this.treeAdapter.getAttrList(r);return e5(t,a,i,n)}_reconstructActiveFormattingElements(){const t=this.activeFormattingElements.entries.length;if(t){const r=this.activeFormattingElements.entries.findIndex(a=>a.type===St.Marker||this.openElements.contains(a.element)),n=r===-1?t-1:r-1;for(let a=n;a>=0;a--){const i=this.activeFormattingElements.entries[a];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=k.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(o.P),this.openElements.popUntilTagNamePopped(o.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case o.TR:{this.insertionMode=k.IN_ROW;return}case o.TBODY:case o.THEAD:case o.TFOOT:{this.insertionMode=k.IN_TABLE_BODY;return}case o.CAPTION:{this.insertionMode=k.IN_CAPTION;return}case o.COLGROUP:{this.insertionMode=k.IN_COLUMN_GROUP;return}case o.TABLE:{this.insertionMode=k.IN_TABLE;return}case o.BODY:{this.insertionMode=k.IN_BODY;return}case o.FRAMESET:{this.insertionMode=k.IN_FRAMESET;return}case o.SELECT:{this._resetInsertionModeForSelect(t);return}case o.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case o.HTML:{this.insertionMode=this.headElement?k.AFTER_HEAD:k.BEFORE_HEAD;return}case o.TD:case o.TH:{if(t>0){this.insertionMode=k.IN_CELL;return}break}case o.HEAD:{if(t>0){this.insertionMode=k.IN_HEAD;return}break}}this.insertionMode=k.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let r=t-1;r>0;r--){const n=this.openElements.tagIDs[r];if(n===o.TEMPLATE)break;if(n===o.TABLE){this.insertionMode=k.IN_SELECT_IN_TABLE;return}}this.insertionMode=k.IN_SELECT}_isElementCausesFosterParenting(t){return bc.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){const r=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case o.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===H.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case o.TABLE:{const n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){const r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,t,r.beforeElement):this.treeAdapter.appendChild(r.parent,t)}_isSpecialElement(t,r){const n=this.treeAdapter.getNamespaceURI(t);return kp[n].has(r)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){R7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:{Tc(this,t);break}case k.TEXT:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{Sc(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){L7(this,t);return}switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.TEXT:{this._insertCharacters(t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_COLUMN_GROUP:{l0(this,t);break}case k.AFTER_BODY:{o0(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){Ka(this,t);return}switch(this.insertionMode){case k.INITIAL:case k.BEFORE_HTML:case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_TEMPLATE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{Ka(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.AFTER_BODY:{h5(this,t);break}case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{d5(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case k.INITIAL:{f5(this,t);break}case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:{this._err(t,P.misplacedDoctype);break}case k.IN_TABLE_TEXT:{en(this,t);break}}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,P.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?M7(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{m5(this,t);break}case k.BEFORE_HEAD:{g5(this,t);break}case k.IN_HEAD:{yt(this,t);break}case k.IN_HEAD_NO_SCRIPT:{T5(this,t);break}case k.AFTER_HEAD:{y5(this,t);break}case k.IN_BODY:{We(this,t);break}case k.IN_TABLE:{Rr(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{b7(this,t);break}case k.IN_COLUMN_GROUP:{Bi(this,t);break}case k.IN_TABLE_BODY:{O0(this,t);break}case k.IN_ROW:{L0(this,t);break}case k.IN_CELL:{x7(this,t);break}case k.IN_SELECT:{_c(this,t);break}case k.IN_SELECT_IN_TABLE:{v7(this,t);break}case k.IN_TEMPLATE:{k7(this,t);break}case k.AFTER_BODY:{w7(this,t);break}case k.IN_FRAMESET:{C7(this,t);break}case k.AFTER_FRAMESET:{I7(this,t);break}case k.AFTER_AFTER_BODY:{D7(this,t);break}case k.AFTER_AFTER_FRAMESET:{O7(this,t);break}}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?P7(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{p5(this,t);break}case k.BEFORE_HEAD:{b5(this,t);break}case k.IN_HEAD:{E5(this,t);break}case k.IN_HEAD_NO_SCRIPT:{x5(this,t);break}case k.AFTER_HEAD:{v5(this,t);break}case k.IN_BODY:{D0(this,t);break}case k.TEXT:{s7(this,t);break}case k.IN_TABLE:{En(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_CAPTION:{E7(this,t);break}case k.IN_COLUMN_GROUP:{T7(this,t);break}case k.IN_TABLE_BODY:{Ja(this,t);break}case k.IN_ROW:{Cc(this,t);break}case k.IN_CELL:{y7(this,t);break}case k.IN_SELECT:{Ic(this,t);break}case k.IN_SELECT_IN_TABLE:{A7(this,t);break}case k.IN_TEMPLATE:{S7(this,t);break}case k.AFTER_BODY:{Dc(this,t);break}case k.IN_FRAMESET:{_7(this,t);break}case k.AFTER_FRAMESET:{N7(this,t);break}case k.AFTER_AFTER_BODY:{Jn(this,t);break}}}onEof(t){switch(this.insertionMode){case k.INITIAL:{Zr(this,t);break}case k.BEFORE_HTML:{ln(this,t);break}case k.BEFORE_HEAD:{on(this,t);break}case k.IN_HEAD:{cn(this,t);break}case k.IN_HEAD_NO_SCRIPT:{hn(this,t);break}case k.AFTER_HEAD:{dn(this,t);break}case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{Ac(this,t);break}case k.TEXT:{l7(this,t);break}case k.IN_TABLE_TEXT:{en(this,t);break}case k.IN_TEMPLATE:{Nc(this,t);break}case k.AFTER_BODY:case k.IN_FRAMESET:case k.AFTER_FRAMESET:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Pi(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===T.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.TEXT:case k.IN_COLUMN_GROUP:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{this._insertCharacters(t);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:case k.AFTER_BODY:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Ec(this,t);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{ba(this,t);break}case k.IN_TABLE_TEXT:{kc(this,t);break}}}}function i5(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):vc(e,t),r}function u5(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){const a=e.openElements.items[n];if(a===t.element)break;e._isSpecialElement(a,e.openElements.tagIDs[n])&&(r=a)}return r||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),r}function s5(e,t,r){let n=t,a=e.openElements.getCommonAncestor(t);for(let i=0,u=a;u!==r;i++,u=a){a=e.openElements.getCommonAncestor(u);const s=e.activeFormattingElements.getElementEntry(u),l=s&&i>=n5;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(u)):(u=l5(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(u,n),n=u)}return n}function l5(e,t){const r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function o5(e,t,r){const n=e.treeAdapter.getTagName(t),a=qr(n);if(e._isElementCausesFosterParenting(a))e._fosterParentElement(r);else{const i=e.treeAdapter.getNamespaceURI(t);a===o.TEMPLATE&&i===H.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function c5(e,t,r){const n=e.treeAdapter.getNamespaceURI(r.element),{token:a}=r,i=e.treeAdapter.createElement(a.tagName,n,a.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,a),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,i,a.tagID)}function Mi(e,t){for(let r=0;r=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],a=e.treeAdapter.getNodeSourceCodeLocation(n);if(a&&!a.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const i=e.openElements.items[1],u=e.treeAdapter.getNodeSourceCodeLocation(i);u&&!u.endTag&&e._setEndLocation(i,t)}}}}function f5(e,t){e._setDocumentType(t);const r=t.forceQuirks?pt.QUIRKS:Yp(t);qp(t)||e._err(t,P.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=k.BEFORE_HTML}function Zr(e,t){e._err(t,P.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,pt.QUIRKS),e.insertionMode=k.BEFORE_HTML,e._processToken(t)}function m5(e,t){t.tagID===o.HTML?(e._insertElement(t,H.HTML),e.insertionMode=k.BEFORE_HEAD):ln(e,t)}function p5(e,t){const r=t.tagID;(r===o.HTML||r===o.HEAD||r===o.BODY||r===o.BR)&&ln(e,t)}function ln(e,t){e._insertFakeRootElement(),e.insertionMode=k.BEFORE_HEAD,e._processToken(t)}function g5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.HEAD:{e._insertElement(t,H.HTML),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD;break}default:on(e,t)}}function b5(e,t){const r=t.tagID;r===o.HEAD||r===o.BODY||r===o.HTML||r===o.BR?on(e,t):e._err(t,P.endTagWithoutMatchingOpenElement)}function on(e,t){e._insertFakeElement(O.HEAD,o.HEAD),e.headElement=e.openElements.current,e.insertionMode=k.IN_HEAD,e._processToken(t)}function yt(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.TITLE:{e._switchToTextParsing(t,De.RCDATA);break}case o.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,De.RAWTEXT):(e._insertElement(t,H.HTML),e.insertionMode=k.IN_HEAD_NO_SCRIPT);break}case o.NOFRAMES:case o.STYLE:{e._switchToTextParsing(t,De.RAWTEXT);break}case o.SCRIPT:{e._switchToTextParsing(t,De.SCRIPT_DATA);break}case o.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=k.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(k.IN_TEMPLATE);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:cn(e,t)}}function E5(e,t){switch(t.tagID){case o.HEAD:{e.openElements.pop(),e.insertionMode=k.AFTER_HEAD;break}case o.BODY:case o.BR:case o.HTML:{cn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function Tr(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==o.TEMPLATE&&e._err(t,P.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,P.endTagWithoutMatchingOpenElement)}function cn(e,t){e.openElements.pop(),e.insertionMode=k.AFTER_HEAD,e._processToken(t)}function T5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BASEFONT:case o.BGSOUND:case o.HEAD:case o.LINK:case o.META:case o.NOFRAMES:case o.STYLE:{yt(e,t);break}case o.NOSCRIPT:{e._err(t,P.nestedNoscriptInHead);break}default:hn(e,t)}}function x5(e,t){switch(t.tagID){case o.NOSCRIPT:{e.openElements.pop(),e.insertionMode=k.IN_HEAD;break}case o.BR:{hn(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function hn(e,t){const r=t.type===de.EOF?P.openElementsLeftAfterEof:P.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=k.IN_HEAD,e._processToken(t)}function y5(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.BODY:{e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_BODY;break}case o.FRAMESET:{e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET;break}case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{e._err(t,P.abandonedHeadElementChild),e.openElements.push(e.headElement,o.HEAD),yt(e,t),e.openElements.remove(e.headElement);break}case o.HEAD:{e._err(t,P.misplacedStartTagForHeadElement);break}default:dn(e,t)}}function v5(e,t){switch(t.tagID){case o.BODY:case o.HTML:case o.BR:{dn(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:e._err(t,P.endTagWithoutMatchingOpenElement)}}function dn(e,t){e._insertFakeElement(O.BODY,o.BODY),e.insertionMode=k.IN_BODY,N0(e,t)}function N0(e,t){switch(t.type){case de.CHARACTER:{Tc(e,t);break}case de.WHITESPACE_CHARACTER:{Ec(e,t);break}case de.COMMENT:{Ka(e,t);break}case de.START_TAG:{We(e,t);break}case de.END_TAG:{D0(e,t);break}case de.EOF:{Ac(e,t);break}}}function Ec(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function Tc(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function A5(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function k5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}function S5(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_FRAMESET)}function w5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function C5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&Qa.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,H.HTML)}function _5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function I5(e,t){const r=e.openElements.tmplCount>0;(!e.formElement||r)&&(e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),r||(e.formElement=e.openElements.current))}function N5(e,t){e.framesetOk=!1;const r=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){const a=e.openElements.tagIDs[n];if(r===o.LI&&a===o.LI||(r===o.DD||r===o.DT)&&(a===o.DD||a===o.DT)){e.openElements.generateImpliedEndTagsWithExclusion(a),e.openElements.popUntilTagNamePopped(a);break}if(a!==o.ADDRESS&&a!==o.DIV&&a!==o.P&&e._isSpecialElement(e.openElements.items[n],a))break}e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML)}function D5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.tokenizer.state=De.PLAINTEXT}function O5(e,t){e.openElements.hasInScope(o.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1}function L5(e,t){const r=e.activeFormattingElements.getElementEntryInScopeWithTagName(O.A);r&&(Mi(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function R5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function M5(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(o.NOBR)&&(Mi(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,H.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function P5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function B5(e,t){e.treeAdapter.getDocumentMode(e.document)!==pt.QUIRKS&&e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=k.IN_TABLE}function xc(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function yc(e){const t=oc(e,mr.TYPE);return t!=null&&t.toLowerCase()===t5}function F5(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,H.HTML),yc(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function H5(e,t){e._appendElement(t,H.HTML),t.ackSelfClosing=!0}function z5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._appendElement(t,H.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function U5(e,t){t.tagName=O.IMG,t.tagID=o.IMG,xc(e,t)}function q5(e,t){e._insertElement(t,H.HTML),e.skipNextNewLine=!0,e.tokenizer.state=De.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=k.TEXT}function Y5(e,t){e.openElements.hasInButtonScope(o.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function G5(e,t){e.framesetOk=!1,e._switchToTextParsing(t,De.RAWTEXT)}function Bs(e,t){e._switchToTextParsing(t,De.RAWTEXT)}function V5(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===k.IN_TABLE||e.insertionMode===k.IN_CAPTION||e.insertionMode===k.IN_TABLE_BODY||e.insertionMode===k.IN_ROW||e.insertionMode===k.IN_CELL?k.IN_SELECT_IN_TABLE:k.IN_SELECT}function j5(e,t){e.openElements.currentTagId===o.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function W5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,H.HTML)}function X5(e,t){e.openElements.hasInScope(o.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(o.RTC),e._insertElement(t,H.HTML)}function $5(e,t){e._reconstructActiveFormattingElements(),pc(t),Ri(t),t.selfClosing?e._appendElement(t,H.MATHML):e._insertElement(t,H.MATHML),t.ackSelfClosing=!0}function Q5(e,t){e._reconstructActiveFormattingElements(),gc(t),Ri(t),t.selfClosing?e._appendElement(t,H.SVG):e._insertElement(t,H.SVG),t.ackSelfClosing=!0}function Fs(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,H.HTML)}function We(e,t){switch(t.tagID){case o.I:case o.S:case o.B:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.SMALL:case o.STRIKE:case o.STRONG:{R5(e,t);break}case o.A:{L5(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{C5(e,t);break}case o.P:case o.DL:case o.OL:case o.UL:case o.DIV:case o.DIR:case o.NAV:case o.MAIN:case o.MENU:case o.ASIDE:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.DETAILS:case o.ADDRESS:case o.ARTICLE:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{w5(e,t);break}case o.LI:case o.DD:case o.DT:{N5(e,t);break}case o.BR:case o.IMG:case o.WBR:case o.AREA:case o.EMBED:case o.KEYGEN:{xc(e,t);break}case o.HR:{z5(e,t);break}case o.RB:case o.RTC:{W5(e,t);break}case o.RT:case o.RP:{X5(e,t);break}case o.PRE:case o.LISTING:{_5(e,t);break}case o.XMP:{Y5(e,t);break}case o.SVG:{Q5(e,t);break}case o.HTML:{A5(e,t);break}case o.BASE:case o.LINK:case o.META:case o.STYLE:case o.TITLE:case o.SCRIPT:case o.BGSOUND:case o.BASEFONT:case o.TEMPLATE:{yt(e,t);break}case o.BODY:{k5(e,t);break}case o.FORM:{I5(e,t);break}case o.NOBR:{M5(e,t);break}case o.MATH:{$5(e,t);break}case o.TABLE:{B5(e,t);break}case o.INPUT:{F5(e,t);break}case o.PARAM:case o.TRACK:case o.SOURCE:{H5(e,t);break}case o.IMAGE:{U5(e,t);break}case o.BUTTON:{O5(e,t);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{P5(e,t);break}case o.IFRAME:{G5(e,t);break}case o.SELECT:{V5(e,t);break}case o.OPTION:case o.OPTGROUP:{j5(e,t);break}case o.NOEMBED:case o.NOFRAMES:{Bs(e,t);break}case o.FRAMESET:{S5(e,t);break}case o.TEXTAREA:{q5(e,t);break}case o.NOSCRIPT:{e.options.scriptingEnabled?Bs(e,t):Fs(e,t);break}case o.PLAINTEXT:{D5(e,t);break}case o.COL:case o.TH:case o.TD:case o.TR:case o.HEAD:case o.FRAME:case o.TBODY:case o.TFOOT:case o.THEAD:case o.CAPTION:case o.COLGROUP:break;default:Fs(e,t)}}function K5(e,t){if(e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,e.options.sourceCodeLocationInfo)){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}function J5(e,t){e.openElements.hasInScope(o.BODY)&&(e.insertionMode=k.AFTER_BODY,Dc(e,t))}function Z5(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function e7(e){const t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(o.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(o.FORM):r&&e.openElements.remove(r))}function t7(e){e.openElements.hasInButtonScope(o.P)||e._insertFakeElement(O.P,o.P),e._closePElement()}function r7(e){e.openElements.hasInListItemScope(o.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(o.LI),e.openElements.popUntilTagNamePopped(o.LI))}function n7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}function a7(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function i7(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function u7(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(O.BR,o.BR),e.openElements.pop(),e.framesetOk=!1}function vc(e,t){const r=t.tagName,n=t.tagID;for(let a=e.openElements.stackTop;a>0;a--){const i=e.openElements.items[a],u=e.openElements.tagIDs[a];if(n===u&&(n!==o.UNKNOWN||e.treeAdapter.getTagName(i)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=a&&e.openElements.shortenToLength(a);break}if(e._isSpecialElement(i,u))break}}function D0(e,t){switch(t.tagID){case o.A:case o.B:case o.I:case o.S:case o.U:case o.EM:case o.TT:case o.BIG:case o.CODE:case o.FONT:case o.NOBR:case o.SMALL:case o.STRIKE:case o.STRONG:{Mi(e,t);break}case o.P:{t7(e);break}case o.DL:case o.UL:case o.OL:case o.DIR:case o.DIV:case o.NAV:case o.PRE:case o.MAIN:case o.MENU:case o.ASIDE:case o.BUTTON:case o.CENTER:case o.FIGURE:case o.FOOTER:case o.HEADER:case o.HGROUP:case o.DIALOG:case o.ADDRESS:case o.ARTICLE:case o.DETAILS:case o.SEARCH:case o.SECTION:case o.SUMMARY:case o.LISTING:case o.FIELDSET:case o.BLOCKQUOTE:case o.FIGCAPTION:{Z5(e,t);break}case o.LI:{r7(e);break}case o.DD:case o.DT:{n7(e,t);break}case o.H1:case o.H2:case o.H3:case o.H4:case o.H5:case o.H6:{a7(e);break}case o.BR:{u7(e);break}case o.BODY:{K5(e,t);break}case o.HTML:{J5(e,t);break}case o.FORM:{e7(e);break}case o.APPLET:case o.OBJECT:case o.MARQUEE:{i7(e,t);break}case o.TEMPLATE:{Tr(e,t);break}default:vc(e,t)}}function Ac(e,t){e.tmplInsertionModeStack.length>0?Nc(e,t):Pi(e,t)}function s7(e,t){var r;t.tagID===o.SCRIPT&&((r=e.scriptHandler)===null||r===void 0||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function l7(e,t){e._err(t,P.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function ba(e,t){if(e.openElements.currentTagId!==void 0&&bc.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=k.IN_TABLE_TEXT,t.type){case de.CHARACTER:{Sc(e,t);break}case de.WHITESPACE_CHARACTER:{kc(e,t);break}}else wn(e,t)}function o7(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_CAPTION}function c7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_COLUMN_GROUP}function h7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.COLGROUP,o.COLGROUP),e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t)}function d7(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,H.HTML),e.insertionMode=k.IN_TABLE_BODY}function f7(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(O.TBODY,o.TBODY),e.insertionMode=k.IN_TABLE_BODY,O0(e,t)}function m7(e,t){e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function p7(e,t){yc(t)?e._appendElement(t,H.HTML):wn(e,t),t.ackSelfClosing=!0}function g7(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,H.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Rr(e,t){switch(t.tagID){case o.TD:case o.TH:case o.TR:{f7(e,t);break}case o.STYLE:case o.SCRIPT:case o.TEMPLATE:{yt(e,t);break}case o.COL:{h7(e,t);break}case o.FORM:{g7(e,t);break}case o.TABLE:{m7(e,t);break}case o.TBODY:case o.TFOOT:case o.THEAD:{d7(e,t);break}case o.INPUT:{p7(e,t);break}case o.CAPTION:{o7(e,t);break}case o.COLGROUP:{c7(e,t);break}default:wn(e,t)}}function En(e,t){switch(t.tagID){case o.TABLE:{e.openElements.hasInTableScope(o.TABLE)&&(e.openElements.popUntilTagNamePopped(o.TABLE),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}case o.BODY:case o.CAPTION:case o.COL:case o.COLGROUP:case o.HTML:case o.TBODY:case o.TD:case o.TFOOT:case o.TH:case o.THEAD:case o.TR:break;default:wn(e,t)}}function wn(e,t){const r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,N0(e,t),e.fosterParentingEnabled=r}function kc(e,t){e.pendingCharacterTokens.push(t)}function Sc(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function en(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r0&&e.openElements.currentTagId===o.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===o.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===o.OPTGROUP&&e.openElements.pop();break}case o.OPTION:{e.openElements.currentTagId===o.OPTION&&e.openElements.pop();break}case o.SELECT:{e.openElements.hasInSelectScope(o.SELECT)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode());break}case o.TEMPLATE:{Tr(e,t);break}}}function v7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e._processStartTag(t)):_c(e,t)}function A7(e,t){const r=t.tagID;r===o.CAPTION||r===o.TABLE||r===o.TBODY||r===o.TFOOT||r===o.THEAD||r===o.TR||r===o.TD||r===o.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(o.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Ic(e,t)}function k7(e,t){switch(t.tagID){case o.BASE:case o.BASEFONT:case o.BGSOUND:case o.LINK:case o.META:case o.NOFRAMES:case o.SCRIPT:case o.STYLE:case o.TEMPLATE:case o.TITLE:{yt(e,t);break}case o.CAPTION:case o.COLGROUP:case o.TBODY:case o.TFOOT:case o.THEAD:{e.tmplInsertionModeStack[0]=k.IN_TABLE,e.insertionMode=k.IN_TABLE,Rr(e,t);break}case o.COL:{e.tmplInsertionModeStack[0]=k.IN_COLUMN_GROUP,e.insertionMode=k.IN_COLUMN_GROUP,Bi(e,t);break}case o.TR:{e.tmplInsertionModeStack[0]=k.IN_TABLE_BODY,e.insertionMode=k.IN_TABLE_BODY,O0(e,t);break}case o.TD:case o.TH:{e.tmplInsertionModeStack[0]=k.IN_ROW,e.insertionMode=k.IN_ROW,L0(e,t);break}default:e.tmplInsertionModeStack[0]=k.IN_BODY,e.insertionMode=k.IN_BODY,We(e,t)}}function S7(e,t){t.tagID===o.TEMPLATE&&Tr(e,t)}function Nc(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(o.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Pi(e,t)}function w7(e,t){t.tagID===o.HTML?We(e,t):o0(e,t)}function Dc(e,t){var r;if(t.tagID===o.HTML){if(e.fragmentContext||(e.insertionMode=k.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===o.HTML){e._setEndLocation(e.openElements.items[0],t);const n=e.openElements.items[1];n&&!(!((r=e.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&e._setEndLocation(n,t)}}else o0(e,t)}function o0(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function C7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.FRAMESET:{e._insertElement(t,H.HTML);break}case o.FRAME:{e._appendElement(t,H.HTML),t.ackSelfClosing=!0;break}case o.NOFRAMES:{yt(e,t);break}}}function _7(e,t){t.tagID===o.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==o.FRAMESET&&(e.insertionMode=k.AFTER_FRAMESET))}function I7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function N7(e,t){t.tagID===o.HTML&&(e.insertionMode=k.AFTER_AFTER_FRAMESET)}function D7(e,t){t.tagID===o.HTML?We(e,t):Jn(e,t)}function Jn(e,t){e.insertionMode=k.IN_BODY,N0(e,t)}function O7(e,t){switch(t.tagID){case o.HTML:{We(e,t);break}case o.NOFRAMES:{yt(e,t);break}}}function L7(e,t){t.chars=Se,e._insertCharacters(t)}function R7(e,t){e._insertCharacters(t),e.framesetOk=!1}function Oc(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==H.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function M7(e,t){if(Qp(t))Oc(e),e._startTagOutsideForeignContent(t);else{const r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===H.MATHML?pc(t):n===H.SVG&&(Kp(t),gc(t)),Ri(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}function P7(e,t){if(t.tagID===o.P||t.tagID===o.BR){Oc(e),e._endTagOutsideForeignContent(t);return}for(let r=e.openElements.stackTop;r>0;r--){const n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===H.HTML){e._endTagOutsideForeignContent(t);break}const a=e.treeAdapter.getTagName(n);if(a.toLowerCase()===t.tagName){t.tagName=a,e.openElements.shortenToLength(r);break}}}O.AREA,O.BASE,O.BASEFONT,O.BGSOUND,O.BR,O.COL,O.EMBED,O.FRAME,O.HR,O.IMG,O.INPUT,O.KEYGEN,O.LINK,O.META,O.PARAM,O.SOURCE,O.TRACK,O.WBR;const B7=/<(\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\t\n\f\r />])/gi,F7=new Set(["mdxFlowExpression","mdxJsxFlowElement","mdxJsxTextElement","mdxTextExpression","mdxjsEsm"]),Hs={sourceCodeLocationInfo:!0,scriptingEnabled:!1};function Lc(e,t){const r=X7(e),n=_l("type",{handlers:{root:H7,element:z7,text:U7,comment:Mc,doctype:q7,raw:G7},unknown:V7}),a={parser:r?new Ps(Hs):Ps.getFragmentParser(void 0,Hs),handle(s){n(s,a)},stitches:!1,options:t||{}};n(e,a),Yr(a,_t());const i=r?a.parser.document:a.parser.getFragment(),u=$6(i,{file:a.options.file});return a.stitches&&b0(u,"comment",function(s,l,c){const d=s;if(d.value.stitch&&c&&l!==void 0){const f=c.children;return f[l]=d.value.stitch,l}}),u.type==="root"&&u.children.length===1&&u.children[0].type===e.type?u.children[0]:u}function Rc(e,t){let r=-1;if(e)for(;++r4&&(t.parser.tokenizer.state=0);const r={type:de.CHARACTER,chars:e.value,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function q7(e,t){const r={type:de.DOCTYPE,name:"html",forceQuirks:!1,publicId:"",systemId:"",location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function Y7(e,t){t.stitches=!0;const r=$7(e);if("children"in e&&"children"in r){const n=Lc({type:"root",children:e.children},t.options);r.children=n.children}Mc({type:"comment",value:{stitch:r}},t)}function Mc(e,t){const r=e.value,n={type:de.COMMENT,data:r,location:Cn(e)};Yr(t,_t(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function G7(e,t){if(t.parser.tokenizer.preprocessor.html="",t.parser.tokenizer.preprocessor.pos=-1,t.parser.tokenizer.preprocessor.lastGapPos=-2,t.parser.tokenizer.preprocessor.gapStack=[],t.parser.tokenizer.preprocessor.skipNextNewLine=!1,t.parser.tokenizer.preprocessor.lastChunkWritten=!1,t.parser.tokenizer.preprocessor.endOfChunkHit=!1,t.parser.tokenizer.preprocessor.isEol=!1,Pc(t,_t(e)),t.parser.tokenizer.write(t.options.tagfilter?e.value.replace(B7,"<$1$2"):e.value,!1),t.parser.tokenizer._runParsingLoop(),t.parser.tokenizer.state===72||t.parser.tokenizer.state===78){t.parser.tokenizer.preprocessor.lastChunkWritten=!0;const r=t.parser.tokenizer._consume();t.parser.tokenizer._callState(r)}}function V7(e,t){const r=e;if(t.options.passThrough&&t.options.passThrough.includes(r.type))Y7(r,t);else{let n="";throw F7.has(r.type)&&(n=". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax"),new Error("Cannot compile `"+r.type+"` node"+n)}}function Yr(e,t){Pc(e,t);const r=e.parser.tokenizer.currentCharacterToken;r&&r.location&&(r.location.endLine=e.parser.tokenizer.preprocessor.line,r.location.endCol=e.parser.tokenizer.preprocessor.col+1,r.location.endOffset=e.parser.tokenizer.preprocessor.offset+1,e.parser.currentToken=r,e.parser._processToken(e.parser.currentToken)),e.parser.tokenizer.paused=!1,e.parser.tokenizer.inLoop=!1,e.parser.tokenizer.active=!1,e.parser.tokenizer.returnState=De.DATA,e.parser.tokenizer.charRefCode=-1,e.parser.tokenizer.consumedAfterSnapshot=-1,e.parser.tokenizer.currentLocation=null,e.parser.tokenizer.currentCharacterToken=null,e.parser.tokenizer.currentToken=null,e.parser.tokenizer.currentAttr={name:"",value:""}}function Pc(e,t){if(t&&t.offset!==void 0){const r={startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:-1,endCol:-1,endOffset:-1};e.parser.tokenizer.preprocessor.lineStartPos=-t.column+1,e.parser.tokenizer.preprocessor.droppedBufferSize=t.offset,e.parser.tokenizer.preprocessor.line=t.line,e.parser.tokenizer.currentLocation=r}}function j7(e,t){const r=e.tagName.toLowerCase();if(t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,_t(e));const n=t.parser.openElements.current;let a="namespaceURI"in n?n.namespaceURI:Ct.html;a===Ct.html&&r==="svg"&&(a=Ct.svg);const i=ep({...e,children:[]},{space:a===Ct.svg?"svg":"html"}),u={type:de.START_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:"attrs"in i?i.attrs:[],location:Cn(e)};t.parser.currentToken=u,t.parser._processToken(t.parser.currentToken),t.parser.tokenizer.lastStartTagName=r}function W7(e,t){const r=e.tagName.toLowerCase();if(!t.parser.tokenizer.inForeignNode&&lp.includes(r)||t.parser.tokenizer.state===De.PLAINTEXT)return;Yr(t,d0(e));const n={type:de.END_TAG,tagName:r,tagID:qr(r),selfClosing:!1,ackSelfClosing:!1,attrs:[],location:Cn(e)};t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken),r===t.parser.tokenizer.lastStartTagName&&(t.parser.tokenizer.state===De.RCDATA||t.parser.tokenizer.state===De.RAWTEXT||t.parser.tokenizer.state===De.SCRIPT_DATA)&&(t.parser.tokenizer.state=De.DATA)}function X7(e){const t=e.type==="root"?e.children[0]:e;return!!(t&&(t.type==="doctype"||t.type==="element"&&t.tagName.toLowerCase()==="html"))}function Cn(e){const t=_t(e)||{line:void 0,column:void 0,offset:void 0},r=d0(e)||{line:void 0,column:void 0,offset:void 0};return{startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:r.line,endCol:r.column,endOffset:r.offset}}function $7(e){return"children"in e?Nr({...e,children:[]}):Nr(e)}function Q7(e){return function(t,r){return Lc(t,{...e,file:r})}}function c0(e){return typeof e=="string"?e:typeof e=="number"?String(e):e?Array.isArray(e)?e.map(c0).join(""):typeof e=="object"&&"props"in e?c0(e.props.children):"":""}function K7(e){return e.replace(/\$[^$]*\$/g,"").replace(/\\[a-zA-Z]+\{[^}]*\}/g,"").replace(/[\\{}]/g,"").toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function Sr(e){return function({children:r,...n}){const a=c0(r),i=n.id||K7(a);return pe.jsx(e,{...n,id:i,children:r})}}const J7={h1:Sr("h1"),h2:Sr("h2"),h3:Sr("h3"),h4:Sr("h4"),h5:Sr("h5"),h6:Sr("h6")};function a8(){const{id:e}=Bc(),t=zc.find(d=>d.id===e),[r,n]=Xr.useState(""),[a,i]=Xr.useState(null),[u,s]=Xr.useState(null);Xr.useEffect(()=>{if(!t)return;const d=new AbortController,f=t.filename;return fetch(`/blog/${f}`,{signal:d.signal}).then(g=>{if(!g.ok)throw new Error("Failed to load post");return g.text()}).then(g=>{const p=g.replace(/^\s*#[^#\n]*\r?\n/,"");n(p),i(f),s(null)}).catch(g=>{g instanceof DOMException&&g.name==="AbortError"||(console.error(g),i(f),s(f))}),()=>d.abort()},[t]);const l=!!(t&&a!==t.filename),c=!!(t&&u===t.filename);return Xr.useEffect(()=>{function d(f){const p=f.target.closest("a");if(!p)return;const x=p.getAttribute("href");if(!x||!x.startsWith("#"))return;f.preventDefault();const S=document.getElementById(x.slice(1));S&&(S.scrollIntoView({behavior:"smooth",block:"start"}),window.history.pushState(null,"",x))}return document.addEventListener("click",d),()=>document.removeEventListener("click",d)},[]),t?pe.jsxs("div",{className:"min-h-screen bg-slate-950 text-slate-50 font-sans selection:bg-cyan-400/30",children:[pe.jsx(Fc,{title:`${t.title} - QECTOR Blog`,description:t.description}),pe.jsxs("div",{className:"pt-32 pb-24 relative overflow-hidden",children:[pe.jsx("div",{className:"absolute top-0 right-0 w-[800px] h-[800px] bg-cyan-900/10 blur-[120px] rounded-full pointer-events-none -translate-y-1/2 translate-x-1/3"}),pe.jsx("div",{className:"absolute bottom-0 left-0 w-[600px] h-[600px] bg-slate-800/20 blur-[100px] rounded-full pointer-events-none translate-y-1/3 -translate-x-1/3"}),pe.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[pe.jsxs(P0,{to:"/blog",className:"inline-flex items-center min-h-[44px] text-slate-400 hover:text-cyan-300 mb-12 transition-colors duration-300 font-medium tracking-wide",children:[pe.jsx(Uc,{size:18,className:"mr-2"}),"Back to All Articles"]}),pe.jsxs("header",{className:"mb-16 border-b border-slate-800/60 pb-10",children:[pe.jsxs("div",{className:"flex flex-wrap items-center text-cyan-300 mb-6 gap-4",children:[pe.jsxs("span",{className:"flex items-center text-sm font-semibold tracking-widest uppercase",children:[pe.jsx(qc,{size:16,className:"mr-2"}),t.date]}),pe.jsx("span",{className:"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold tracking-wider text-slate-400",children:t.category}),pe.jsxs("span",{className:"text-sm text-slate-400",children:["By ",pe.jsx(P0,{to:"/guillaume-lessard",className:"hover:text-cyan-300",children:"Guillaume Lessard"}),r?` · ${Math.max(1,Math.round(r.split(/\s+/).length/220))} min read`:""]})]}),pe.jsx("h1",{className:"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-8 leading-tight text-white",children:t.title}),pe.jsx("p",{className:"text-xl text-slate-300 leading-relaxed max-w-3xl",children:t.description})]}),pe.jsx("div",{className:"bg-slate-900/40 backdrop-blur-md border border-slate-800/80 rounded-3xl p-8 md:p-12 shadow-2xl",children:l?pe.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-slate-400",children:[pe.jsx(Yc,{size:48,className:"animate-spin text-cyan-400 mb-4"}),pe.jsx("p",{className:"animate-pulse",children:"Loading article..."})]}):c?pe.jsx("div",{className:"py-20 text-center text-red-400",children:pe.jsx("p",{children:"Failed to load the article. Please try again later."})}):pe.jsx("article",{className:"prose prose-invert prose-cyan max-w-none prose-headings:font-bold prose-headings:tracking-tight prose-a:text-cyan-300 prose-a:no-underline hover:prose-a:underline prose-code:text-cyan-200 prose-code:bg-cyan-950/30 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-pre:bg-slate-950/80 prose-pre:border prose-pre:border-slate-800 prose-img:rounded-xl prose-img:border prose-img:border-slate-800",children:pe.jsx(Qf,{remarkPlugins:[l4,g6],rehypePlugins:[j6,Q7],components:{...J7,table:d=>{const{node:f,...g}=d;return pe.jsx("div",{className:"overflow-x-auto",children:pe.jsx("table",{...g})})},pre:d=>{const{children:f}=d,g=Fi.Children.toArray(f)[0];let p="",x="text";if(Fi.isValidElement(g)){const S=g.props,D=/language-([\w-]+)/.exec(S.className||"");D&&(x=D[1]),p=c0(S.children).replace(/\n$/,"")}return pe.jsx(Hc,{code:p,language:x,className:"not-prose"})},img:d=>{const f=d.width!=null&&d.height!=null;return pe.jsx("img",{...d,className:f?"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto":"rounded-xl border border-slate-800 shadow-xl max-w-full h-auto aspect-video object-cover",loading:"lazy"})}},children:r})})})]})]})]}):pe.jsx("div",{className:"min-h-screen bg-slate-950 text-slate-50 flex items-center justify-center",children:pe.jsxs("div",{className:"text-center",children:[pe.jsx("h1",{className:"text-4xl font-bold mb-4",children:"Post Not Found"}),pe.jsx(P0,{to:"/blog",className:"text-cyan-300 hover:text-cyan-200",children:"Return to Blog"})]})})}export{a8 as default}; diff --git a/assets/CalendlyWidget-BuhQfp2_.js b/assets/CalendlyWidget-BuhQfp2_.js deleted file mode 100644 index 777fe27e..00000000 --- a/assets/CalendlyWidget-BuhQfp2_.js +++ /dev/null @@ -1 +0,0 @@ -import{r as d,j as c}from"./vendor-react-BiHfrq0e.js";const l="https://assets.calendly.com/assets/external/widget.js";function f({url:r,minWidth:o="320px",height:a="700px"}){const e=d.useRef(null);return d.useEffect(()=>{const i=e.current;if(!i)return;const n=()=>{!e.current||!window.Calendly||e.current.childElementCount>0||window.Calendly.initInlineWidget({url:r,parentElement:e.current})},s=document.querySelector(`script[src="${l}"]`);if(window.Calendly)n();else if(s)s.addEventListener("load",n);else{const t=document.createElement("script");t.src=l,t.async=!0,t.addEventListener("load",n),document.body.appendChild(t)}return()=>{s?.removeEventListener("load",n),i&&(i.innerHTML="")}},[r]),c.jsx("div",{ref:e,className:"calendly-inline-widget rounded-xl overflow-hidden border border-gridline",style:{minWidth:o,height:a},"data-url":r,role:"region","aria-label":"Schedule a meeting"})}export{f as C}; diff --git a/assets/Changelog-BA1YtsYp.js b/assets/Changelog-BA1YtsYp.js deleted file mode 100644 index 59024a04..00000000 --- a/assets/Changelog-BA1YtsYp.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l}from"./index-CxWP17m6.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-1-HBloZv.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function s({version:t,items:o,latest:r=!1,note:a,className:n=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${n}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),a&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:a}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:o.map(i=>e.jsx("li",{children:i},i))})]})}function f(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(s,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(s,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(s,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:t,releaseDate:o,label:r})=>`v${t} · ${o} · ${r}`)]})]})]})})]})}export{f as default}; diff --git a/assets/Changelog-BSmWk3a0.js b/assets/Changelog-BSmWk3a0.js deleted file mode 100644 index dbec0523..00000000 --- a/assets/Changelog-BSmWk3a0.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l}from"./index-abfjMTlQ.js";import{N as d}from"./NeuralReveal-D-EQoOl2.js";import{P as c}from"./releases-1-HBloZv.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function s({version:t,items:o,latest:r=!1,note:a,className:n=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${n}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),a&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:a}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:o.map(i=>e.jsx("li",{children:i},i))})]})}function f(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(s,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(s,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(s,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:t,releaseDate:o,label:r})=>`v${t} · ${o} · ${r}`)]})]})]})})]})}export{f as default}; diff --git a/assets/Changelog-Ba4YptBq.js b/assets/Changelog-Ba4YptBq.js deleted file mode 100644 index 796a7e52..00000000 --- a/assets/Changelog-Ba4YptBq.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l}from"./index-PdoH5kLF.js";import{N as d}from"./NeuralReveal-Bsl9IGCr.js";import{P as c}from"./releases-1-HBloZv.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function a({version:s,items:t,latest:r=!1,note:o,className:n=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${n}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:s})]}),o&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:o}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:t.map(i=>e.jsx("li",{children:i},i))})]})}function g(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(a,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(a,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(a,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:s,releaseDate:t,label:r})=>`v${s} · ${t} · ${r}`)]})]})]})})]})}export{g as default}; diff --git a/assets/Changelog-BkfmouBY.js b/assets/Changelog-BkfmouBY.js deleted file mode 100644 index d1510c06..00000000 --- a/assets/Changelog-BkfmouBY.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l}from"./index-Bh9DBCb3.js";import{N as d}from"./NeuralReveal-D-EQoOl2.js";import{P as c}from"./releases-1-HBloZv.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function s({version:t,items:o,latest:r=!1,note:a,className:n=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${n}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),a&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:a}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:o.map(i=>e.jsx("li",{children:i},i))})]})}function f(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(s,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(s,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(s,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:t,releaseDate:o,label:r})=>`v${t} · ${o} · ${r}`)]})]})]})})]})}export{f as default}; diff --git a/assets/Changelog-BytfgdnJ.js b/assets/Changelog-BytfgdnJ.js deleted file mode 100644 index 31e46cad..00000000 --- a/assets/Changelog-BytfgdnJ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l}from"./index-BUYYSLdX.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-1-HBloZv.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function o({version:t,items:s,latest:r=!1,note:a,className:n=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${n}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),a&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:a}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:s.map(i=>e.jsx("li",{children:i},i))})]})}function f(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(o,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now the SPDX expression PolyForm-Noncommercial-1.0.0","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(o,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(o,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:t,releaseDate:s,label:r})=>`v${t} · ${s} · ${r}`)]})]})]})})]})}export{f as default}; diff --git a/assets/Changelog-CgHVHcJg.js b/assets/Changelog-CgHVHcJg.js deleted file mode 100644 index b0b4b8cc..00000000 --- a/assets/Changelog-CgHVHcJg.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-DlmjLVYe.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-ChPZLgGp.js b/assets/Changelog-ChPZLgGp.js deleted file mode 100644 index 96aa8969..00000000 --- a/assets/Changelog-ChPZLgGp.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-c1PDYu0j.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import{a as c}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function t({version:s,items:a,latest:r=!1,note:o,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:s})]}),o&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:o}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:a.map(i=>e.jsx("li",{children:i},i))})]})}function g(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-8 p-5 rounded-2xl border border-cyan-300/20 bg-surface/60 text-left",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Get release alerts"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"No mailing list to join: subscribe with the tools you already use."}),e.jsxs("ul",{className:"text-sm space-y-1.5",children:[e.jsxs("li",{children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases.atom",className:"text-cyan-300 hover:underline",children:"Decoder releases (Atom feed)"})," ",e.jsx("span",{className:"text-muted-foreground",children:"or GitHub: Watch → Custom → Releases"})]}),e.jsx("li",{children:e.jsx("a",{href:"https://pypi.org/rss/project/qector-decoder-v3/releases.xml",className:"text-cyan-300 hover:underline",children:"PyPI releases (RSS)"})}),e.jsx("li",{children:e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases.atom",className:"text-cyan-300 hover:underline",children:"Claude plugin releases (Atom feed)"})}),e.jsx("li",{children:e.jsx("a",{href:"/feed.xml",className:"text-cyan-300 hover:underline",children:"Blog (Atom feed)"})})]})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(t,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(t,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(t,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:s,releaseDate:a,label:r})=>`v${s} · ${a} · ${r}`)]})]})]})})]})}export{g as default}; diff --git a/assets/Changelog-Coh13L0q.js b/assets/Changelog-Coh13L0q.js deleted file mode 100644 index b3835f59..00000000 --- a/assets/Changelog-Coh13L0q.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-CCmwjNGU.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import{a as c}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function t({version:s,items:a,latest:r=!1,note:o,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:s})]}),o&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:o}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:a.map(i=>e.jsx("li",{children:i},i))})]})}function g(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-8 p-5 rounded-2xl border border-cyan-300/20 bg-surface/60 text-left",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Get release alerts"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"No mailing list to join: subscribe with the tools you already use."}),e.jsxs("ul",{className:"text-sm space-y-1.5",children:[e.jsxs("li",{children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases.atom",className:"text-cyan-300 hover:underline",children:"Decoder releases (Atom feed)"})," ",e.jsx("span",{className:"text-muted-foreground",children:"or GitHub: Watch → Custom → Releases"})]}),e.jsx("li",{children:e.jsx("a",{href:"https://pypi.org/rss/project/qector-decoder-v3/releases.xml",className:"text-cyan-300 hover:underline",children:"PyPI releases (RSS)"})}),e.jsx("li",{children:e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases.atom",className:"text-cyan-300 hover:underline",children:"Claude plugin releases (Atom feed)"})}),e.jsx("li",{children:e.jsx("a",{href:"/feed.xml",className:"text-cyan-300 hover:underline",children:"Blog (Atom feed)"})})]})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(t,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(t,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(t,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:s,releaseDate:a,label:r})=>`v${s} · ${a} · ${r}`)]})]})]})})]})}export{g as default}; diff --git a/assets/Changelog-D-ebSC0G.js b/assets/Changelog-D-ebSC0G.js deleted file mode 100644 index 29d7ac8c..00000000 --- a/assets/Changelog-D-ebSC0G.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-WV1aysjN.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-DKAmnRzh.js b/assets/Changelog-DKAmnRzh.js deleted file mode 100644 index 2d2ebf52..00000000 --- a/assets/Changelog-DKAmnRzh.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-B9kEGiWi.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-DNm5nvLJ.js b/assets/Changelog-DNm5nvLJ.js deleted file mode 100644 index a7dcf9da..00000000 --- a/assets/Changelog-DNm5nvLJ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-CqAA-ZXu.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-DY0j-PRO.js b/assets/Changelog-DY0j-PRO.js deleted file mode 100644 index 63aad789..00000000 --- a/assets/Changelog-DY0j-PRO.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-_BpMZhV3.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-LaCmY9AZ.js b/assets/Changelog-LaCmY9AZ.js deleted file mode 100644 index 2e2591e7..00000000 --- a/assets/Changelog-LaCmY9AZ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-CpdATiEY.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-_zFwkt5K.js b/assets/Changelog-_zFwkt5K.js deleted file mode 100644 index f1ead2c1..00000000 --- a/assets/Changelog-_zFwkt5K.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-iVST85F-.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-dTKijDWa.js b/assets/Changelog-dTKijDWa.js deleted file mode 100644 index f3e30ab2..00000000 --- a/assets/Changelog-dTKijDWa.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-BcbVjARk.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-gIx07919.js b/assets/Changelog-gIx07919.js deleted file mode 100644 index 10277b24..00000000 --- a/assets/Changelog-gIx07919.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-BN-vOeL2.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-mI7mdncX.js b/assets/Changelog-mI7mdncX.js deleted file mode 100644 index ebe8ac91..00000000 --- a/assets/Changelog-mI7mdncX.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l}from"./index-CcwlvHYJ.js";import{N as d}from"./NeuralReveal-Bsl9IGCr.js";import{P as c}from"./releases-1-HBloZv.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function a({version:s,items:t,latest:r=!1,note:o,className:n=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${n}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:s})]}),o&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:o}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:t.map(i=>e.jsx("li",{children:i},i))})]})}function g(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(a,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(a,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(a,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:s,releaseDate:t,label:r})=>`v${s} · ${t} · ${r}`)]})]})]})})]})}export{g as default}; diff --git a/assets/Changelog-rqydXTBu.js b/assets/Changelog-rqydXTBu.js deleted file mode 100644 index d3859e1f..00000000 --- a/assets/Changelog-rqydXTBu.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l}from"./index-DkYdPRY7.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-1-HBloZv.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function o({version:t,items:s,latest:r=!1,note:a,className:n=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${n}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),a&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:a}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:s.map(i=>e.jsx("li",{children:i},i))})]})}function f(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(o,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(o,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(o,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:t,releaseDate:s,label:r})=>`v${t} · ${s} · ${r}`)]})]})]})})]})}export{f as default}; diff --git a/assets/Changelog-s4ZdEfl3.js b/assets/Changelog-s4ZdEfl3.js deleted file mode 100644 index 34a949e6..00000000 --- a/assets/Changelog-s4ZdEfl3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-DRAXObZB.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{P as c}from"./releases-DiQz_IDu.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function i({version:t,items:a,latest:r=!1,note:s,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:t})]}),s&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:s}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:a.map(o=>e.jsx("li",{children:o},o))})]})}function v(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.0 Decoder (first stable release, live from PyPI RSS) · Workbench GUI (current)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(i,{latest:!0,version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin registered; sinter.collect() works without custom_decoders=",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(i,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(1).map(({version:t,releaseDate:a,label:r})=>`v${t} · ${a} · ${r}`)]})]})]})})]})}export{v as default}; diff --git a/assets/Changelog-tzpHr6ui.js b/assets/Changelog-tzpHr6ui.js deleted file mode 100644 index 4c6188c2..00000000 --- a/assets/Changelog-tzpHr6ui.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-DayaklK-.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import{a as c}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function t({version:s,items:a,latest:r=!1,note:o,className:l=""}){return e.jsxs("div",{className:`card-surface ${r?"border-cyan-300/20":""} ${l}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r&&e.jsx("span",{className:"px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300",children:"LATEST"}),e.jsx("h2",{className:"text-xl font-bold",children:s})]}),o&&e.jsx("p",{className:"text-muted-foreground text-xs mb-3",children:o}),e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 [overflow-wrap:anywhere]",children:a.map(i=>e.jsx("li",{children:i},i))})]})}function g(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Changelog · QECTOR",description:"Version history for QECTOR Decoder v3. PyPI release train, feature additions, and validation milestones."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Changelog",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Version history for QECTOR Decoder v3. Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),". All artifacts and validation on GitHub."]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-8 p-5 rounded-2xl border border-cyan-300/20 bg-surface/60 text-left",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Get release alerts"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"No mailing list to join: subscribe with the tools you already use."}),e.jsxs("ul",{className:"text-sm space-y-1.5",children:[e.jsxs("li",{children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases.atom",className:"text-cyan-300 hover:underline",children:"Decoder releases (Atom feed)"})," ",e.jsx("span",{className:"text-muted-foreground",children:"or GitHub: Watch → Custom → Releases"})]}),e.jsx("li",{children:e.jsx("a",{href:"https://pypi.org/rss/project/qector-decoder-v3/releases.xml",className:"text-cyan-300 hover:underline",children:"PyPI releases (RSS)"})}),e.jsx("li",{children:e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases.atom",className:"text-cyan-300 hover:underline",children:"Claude plugin releases (Atom feed)"})}),e.jsx("li",{children:e.jsx("a",{href:"/feed.xml",className:"text-cyan-300 hover:underline",children:"Blog (Atom feed)"})})]})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto pl-8 ml-2 sm:ml-6 md:ml-8 relative space-y-12 border-l border-gridline/60",children:[e.jsx("div",{className:"absolute left-[-1px] top-0 bottom-0 w-[1px] bg-gradient-to-b from-cyan-300 via-gold-400/30 to-transparent shadow-[0_0_8px_rgba(103,232,249,0.5)]"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-cyan-300 border-4 border-void shadow-[0_0_8px_rgba(103,232,249,0.8)]"}),e.jsx(t,{latest:!0,version:"v1.0.1 · 2026-11-06 (current)",note:e.jsxs(e.Fragment,{children:["Full notes in"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"the GitHub release"}),"."]}),items:["Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed","18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64","Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release","Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token","Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)","QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)","Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(t,{version:"v1.0.0 · 2026-08-06 (first stable release)",note:e.jsxs(e.Fragment,{children:["Exact release dates on"," ",e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/#history",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"PyPI"}),"."]}),items:["First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)","Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin",'New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")','Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD','Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth',"qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)","pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families","SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)","Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist","Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)","Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode","No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-[40px] top-6 w-4 h-4 rounded-full bg-gridline border-4 border-void"}),e.jsx(t,{version:"Verified PyPI release dates · UTC",items:["No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.","Dates below are PyPI upload dates, not inferred development or local file dates.",...c.slice(2).map(({version:s,releaseDate:a,label:r})=>`v${s} · ${a} · ${r}`)]})]})]})})]})}export{g as default}; diff --git a/assets/ClaudePlugin-BeNgMSb2.js b/assets/ClaudePlugin-BeNgMSb2.js deleted file mode 100644 index ad20dbeb..00000000 --- a/assets/ClaudePlugin-BeNgMSb2.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-B9kEGiWi.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3==1.0.0"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-BiXDoOQI.js b/assets/ClaudePlugin-BiXDoOQI.js deleted file mode 100644 index 6ac11f5f..00000000 --- a/assets/ClaudePlugin-BiXDoOQI.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-WV1aysjN.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-C3NqTK6h.js b/assets/ClaudePlugin-C3NqTK6h.js deleted file mode 100644 index a27449a1..00000000 --- a/assets/ClaudePlugin-C3NqTK6h.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,L as i,C as r}from"./index-CcwlvHYJ.js";import{N as f}from"./NeuralReveal-Bsl9IGCr.js";import{C as t}from"./releases-1-HBloZv.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as c,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function Q(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(i,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(c,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(c,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(i,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{Q as default}; diff --git a/assets/ClaudePlugin-C5p2CNaj.js b/assets/ClaudePlugin-C5p2CNaj.js deleted file mode 100644 index 3ab42dc4..00000000 --- a/assets/ClaudePlugin-C5p2CNaj.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-DlmjLVYe.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-C8eza7n_.js b/assets/ClaudePlugin-C8eza7n_.js deleted file mode 100644 index 59b9181b..00000000 --- a/assets/ClaudePlugin-C8eza7n_.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as r}from"./index-BUYYSLdX.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as t}from"./releases-1-HBloZv.js";import{S as b,T as i,c as y,d as j,E as v,f as N,L as w,a as o,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function U(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(o,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(i,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(o,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{U as default}; diff --git a/assets/ClaudePlugin-CE-0Xttn.js b/assets/ClaudePlugin-CE-0Xttn.js deleted file mode 100644 index a3d6d794..00000000 --- a/assets/ClaudePlugin-CE-0Xttn.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,C as r}from"./index-DkYdPRY7.js";import{N as f}from"./NeuralReveal-BflyZYSb.js";import{C as t}from"./releases-1-HBloZv.js";import{S as b,T as i,c as y,d as j,E as v,f as N,L as w,a as o,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function U(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(o,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(i,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(o,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{U as default}; diff --git a/assets/ClaudePlugin-CHEQddAt.js b/assets/ClaudePlugin-CHEQddAt.js deleted file mode 100644 index c61893d7..00000000 --- a/assets/ClaudePlugin-CHEQddAt.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,L as i,C as r}from"./index-PdoH5kLF.js";import{N as f}from"./NeuralReveal-Bsl9IGCr.js";import{C as t}from"./releases-1-HBloZv.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as c,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function Q(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(i,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(c,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(c,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(i,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{Q as default}; diff --git a/assets/ClaudePlugin-ClObfYRc.js b/assets/ClaudePlugin-ClObfYRc.js deleted file mode 100644 index e09bb8ca..00000000 --- a/assets/ClaudePlugin-ClObfYRc.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-BN-vOeL2.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-CrITqdfl.js b/assets/ClaudePlugin-CrITqdfl.js deleted file mode 100644 index f0c41545..00000000 --- a/assets/ClaudePlugin-CrITqdfl.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-CqAA-ZXu.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-D2YUaHWD.js b/assets/ClaudePlugin-D2YUaHWD.js deleted file mode 100644 index dc8654e2..00000000 --- a/assets/ClaudePlugin-D2YUaHWD.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-DRAXObZB.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-D4c0dp2L.js b/assets/ClaudePlugin-D4c0dp2L.js deleted file mode 100644 index bbfe66ca..00000000 --- a/assets/ClaudePlugin-D4c0dp2L.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,C as r}from"./index-Bh9DBCb3.js";import{N as f}from"./NeuralReveal-D-EQoOl2.js";import{C as t}from"./releases-1-HBloZv.js";import{S as b,T as i,c as y,d as j,E as v,f as N,L as w,a as o,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function U(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(o,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(i,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(o,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{U as default}; diff --git a/assets/ClaudePlugin-D87KUJYw.js b/assets/ClaudePlugin-D87KUJYw.js deleted file mode 100644 index 4e551f61..00000000 --- a/assets/ClaudePlugin-D87KUJYw.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,L as i,C as r}from"./index-c1PDYu0j.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{C as t}from"./releases--9GgxpSb.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as c,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function Q(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(i,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(c,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(c,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(i,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{Q as default}; diff --git a/assets/ClaudePlugin-DA4c0s-8.js b/assets/ClaudePlugin-DA4c0s-8.js deleted file mode 100644 index a0220b95..00000000 --- a/assets/ClaudePlugin-DA4c0s-8.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-iVST85F-.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3==1.0.0"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-Dch9HZQU.js b/assets/ClaudePlugin-Dch9HZQU.js deleted file mode 100644 index 6bbb801c..00000000 --- a/assets/ClaudePlugin-Dch9HZQU.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,C as r}from"./index-abfjMTlQ.js";import{N as f}from"./NeuralReveal-D-EQoOl2.js";import{C as t}from"./releases-1-HBloZv.js";import{S as b,T as i,c as y,d as j,E as v,f as N,L as w,a as o,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function U(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(o,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(i,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(o,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{U as default}; diff --git a/assets/ClaudePlugin-DdB5MGg7.js b/assets/ClaudePlugin-DdB5MGg7.js deleted file mode 100644 index c255d8fe..00000000 --- a/assets/ClaudePlugin-DdB5MGg7.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-BcbVjARk.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3==1.0.0"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-Di39W-hr.js b/assets/ClaudePlugin-Di39W-hr.js deleted file mode 100644 index ef3e3026..00000000 --- a/assets/ClaudePlugin-Di39W-hr.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,L as i,C as r}from"./index-DayaklK-.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{C as t}from"./releases--9GgxpSb.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as c,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function Q(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(i,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(c,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(c,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(i,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{Q as default}; diff --git a/assets/ClaudePlugin-IaKl8Ymk.js b/assets/ClaudePlugin-IaKl8Ymk.js deleted file mode 100644 index 1b3ccbd9..00000000 --- a/assets/ClaudePlugin-IaKl8Ymk.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-CpdATiEY.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/ClaudePlugin-JC5Ptu3v.js b/assets/ClaudePlugin-JC5Ptu3v.js deleted file mode 100644 index f3c07814..00000000 --- a/assets/ClaudePlugin-JC5Ptu3v.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,C as r}from"./index-CxWP17m6.js";import{N as f}from"./NeuralReveal-BflyZYSb.js";import{C as t}from"./releases-1-HBloZv.js";import{S as b,T as i,c as y,d as j,E as v,f as N,L as w,a as o,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function U(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(o,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(i,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(o,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{U as default}; diff --git a/assets/ClaudePlugin-RchU6fia.js b/assets/ClaudePlugin-RchU6fia.js deleted file mode 100644 index da8be0ee..00000000 --- a/assets/ClaudePlugin-RchU6fia.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as g,L as i,C as r}from"./index-CCmwjNGU.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{C as t}from"./releases--9GgxpSb.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as c,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],A=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function Q(){const[l,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},n=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v2.0.1: air-gapped qector-secure MCP server (12 schema-validated tools), 28 skills and 5 agents on qector-decoder-v3 1.0.1."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v2.0.1 for Claude Code and Claude Desktop: air-gapped qector-secure MCP server with 12 schema-validated tools, 28 skills, 5 agents, 11 commands; 29 research and 3 admin tools are opt-in.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:t.version,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",t.version," · published ",t.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(f,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"qector-secure"})," server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"})," and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(n,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[l?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:l?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:n})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(i,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(c,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3 1.0.x"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:A.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Local MCP Servers, Air-Gapped by Default"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-secure "})," server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files;",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(r,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(r,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install --require-hashes -r requirements.lock -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(c,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(r,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsxs("span",{children:["v",t.version," Release, Checksums & Signatures"]})]}),e.jsxs(i,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{Q as default}; diff --git a/assets/ClaudePlugin-utSYcLIe.js b/assets/ClaudePlugin-utSYcLIe.js deleted file mode 100644 index 71e81560..00000000 --- a/assets/ClaudePlugin-utSYcLIe.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as h,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as f,C as t}from"./index-_BpMZhV3.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{C as n}from"./releases-DiQz_IDu.js";import{S as b,T as o,c as y,d as j,E as v,f as N,L as w,a as i,g as k,W as C,h as _,i as q,A as S,j as E,D as L,B as P}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const O=[{name:"qector-core",role:"Core Ground Truth",desc:"Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.",keyFeatures:["Grounds tool names & signatures","Enforces strict math boundary","Local verification"]},{name:"qector-math-foundations",role:"Mathematical Axioms",desc:"Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.",keyFeatures:["Theorem 1 fail-closed verification","Theorem 2 logical coset scoring","Wilson score intervals"]},{name:"qector-developer",role:"SDK & Engineering",desc:"Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.",keyFeatures:["Python SDK best practices","Matrix construction helpers","Local test automation"]},{name:"qector-researcher",role:"Quantum Information Science",desc:"Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.",keyFeatures:["Code-capacity sweeps","Noise model parameterization","Reproducible artifact export"]},{name:"qector-hardware-engineer",role:"Experimental & Cryogenic",desc:"Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.",keyFeatures:["Physical qubit layout mapping","Hardware latency analysis","Cryogenic error budgets"]},{name:"qector-educator",role:"Pedagogy & Concepts",desc:"Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.",keyFeatures:["Step-by-step decoding explanations","Interactive code walkthroughs","Visual homology concepts"]},{name:"qector-sysadmin",role:"Operations & Hygiene",desc:"Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.",keyFeatures:["15-point runtime health check","DoS & memory limit guards","Platform compatibility audit"]}],T=["qector-architecture","qector-batch-decoding","qector-bp-osd","qector-codes-builder","qector-core","qector-decoders-deep-dive","qector-dem-pipeline","qector-deployment","qector-developer","qector-educator","qector-glossary","qector-hardware-engineer","qector-ler-methodology","qector-licensing","qector-math-foundations","qector-orchestration","qector-pymatching-compat","qector-release-engineering","qector-reproducibility","qector-researcher","qector-roadmap","qector-services","qector-sinter","qector-space-time","qector-sysadmin","qector-testing-strategy","qector-two-stage-css","qector-workbench"],R=[{file:"qec-developer.md",title:"QEC Software Engineer",desc:"Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment."},{file:"qec-researcher.md",title:"QEC Research Scientist",desc:"Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies."},{file:"qec-validator.md",title:"Mathematical Proof Validator",desc:"Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement."},{file:"qec-sysadmin.md",title:"Systems & Runtime Engineer",desc:"Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging."},{file:"qec-hardware-engineer.md",title:"Quantum Hardware Architect",desc:"Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets."}],D=[{name:"list_code_families",desc:"Lists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product)."},{name:"list_decoders",desc:"Lists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto."},{name:"get_license_info",desc:"Reads live offline licensing tier and feature flags from the installed qector-decoder-v3 package."},{name:"decode_syndrome",desc:"Decodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2)."},{name:"decode_single",desc:"Executes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables."},{name:"threshold_sweep",desc:"Runs device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts."},{name:"build_code_from_matrix",desc:"Validates and compiles an arbitrary binary parity-check matrix with rank and observable analysis."},{name:"compat_report",desc:"Audits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries."}],d=["artifacts_sha256","artifact_metadata_check","code_distance_check","code_export_matrices","code_family_info","code_logicals_inspect","compat_report","decode_faithfulness_check","dem_collapse_parallel","dem_inspect","env_block","glossary_lookup","hardware_probe","hot_path_microbench","license_active_check","logical_coset_score","pymatching_compat_check","qiskit_plugin_check","reproduction_command_lookup","sinter_decoder_list","sinter_task_template","stim_circuit_probe","theorem_lookup","wilson_ci","wilson_table","workload_hash","get_capability_matrix","get_evidence_policy","get_runtime_provenance"],m=["system_setup","configure_claude_desktop","workbench_probe"];function B(){const[r,x]=h.useState(!1),p=(s,a)=>{navigator.clipboard.writeText(s),a(!0),setTimeout(()=>a(!1),2e3)},l=`claude plugin marketplace add GuillaumeLessard/qector-claude-plugin -claude plugin install qector@qector-tools`;return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"QECTOR Claude Plugin · Quantum Error Correction for Claude Code",description:"Official QECTOR Claude Code and Claude Desktop plugin v1.0.6. 28 skills, 5 agents, four MCP servers, and qector-decoder-v3 1.0.0 with local stdio-based decoding."}),e.jsx(f,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Claude Plugin",description:"Official QECTOR plugin v1.0.6 for Claude Code and Claude Desktop. 28 skills, 5 agents, four MCP servers, 8 stable library tools, 29 opt-in research tools, and 3 opt-in admin tools.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",softwareVersion:"1.0.6",author:{"@type":"Person",name:"Guillaume Lessard",url:"https://orcid.org/0009-0000-3465-3753"},offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-400/5 via-surface/40 to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-cyan-400/10 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 relative z-10 text-center",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-cyan-950/60 border border-cyan-800/60 text-cyan-300 text-xs font-mono font-medium mb-6 backdrop-blur-sm",children:[e.jsx(b,{className:"w-3.5 h-3.5 text-cyan-400"}),e.jsxs("span",{children:["ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v",n.version," · published ",n.releaseDate]})]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-100 mb-6 max-w-4xl mx-auto leading-[1.1]",children:e.jsx(g,{text:"QECTOR Claude Plugin"})}),e.jsxs("p",{className:"text-lg md:text-xl text-slate-300 max-w-3xl mx-auto leading-relaxed mb-8",children:["Empower Claude with local Quantum Error Correction engineering. Release v1.0.6 adds marketplace compliance hardening and environment-agnostic setup. It includes"," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"28 domain skills"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"5 specialized agents"}),","," ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"8 stable library tools"}),", 29 opt-in research tools, and 3 opt-in admin tools across four MCP servers. The default configuration uses local stdio transport."]}),e.jsxs("div",{className:"max-w-2xl mx-auto bg-slate-950/90 border border-cyan-900/60 rounded-2xl p-5 mb-10 shadow-2xl backdrop-blur-md text-left",children:[e.jsxs("div",{className:"flex items-center justify-between pb-3 mb-3 border-b border-slate-800/80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{className:"text-xs font-mono font-semibold uppercase tracking-wider text-slate-400",children:"Instant Marketplace Install"})]}),e.jsxs("button",{onClick:()=>p(l,x),className:"flex items-center gap-1.5 text-xs font-mono text-cyan-400 hover:text-cyan-300 transition-colors px-2.5 py-1 rounded bg-cyan-950/50 border border-cyan-800/40",children:[r?e.jsx(y,{className:"w-3.5 h-3.5 text-green-400"}):e.jsx(j,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r?"Copied":"Copy"})]})]}),e.jsx("pre",{className:"font-mono text-sm text-cyan-300 overflow-x-auto whitespace-pre leading-relaxed",children:l})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin",target:"_blank",rel:"noopener noreferrer",className:"px-6 py-3 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-sm transition-all shadow-lg shadow-cyan-400/20 inline-flex items-center gap-2",children:[e.jsx("span",{children:"GitHub Repository"}),e.jsx(v,{className:"w-4 h-4"})]}),e.jsxs(c,{to:"/mcp-server",className:"px-6 py-3 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-sm transition-all inline-flex items-center gap-2",children:[e.jsx("span",{children:"MCP Server Reference"}),e.jsx(N,{className:"w-4 h-4 text-cyan-400"})]})]}),e.jsx("p",{className:"text-xs text-slate-400 mt-6",children:"Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic."})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(w,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Local-First Security"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters."})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(i,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Strict Mathematics"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Decodes are checked against ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"H c = s (mod 2)"}),". Scored with logical cosets and Wilson 95% CIs."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(k,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"App-Free Library"}),e.jsxs("p",{className:"text-sm text-slate-400 leading-relaxed",children:["Built on the official ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"qector-decoder-v3==1.0.0"})," Rust/PyO3 wheel. No desktop GUI required."]})]}),e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 hover:border-cyan-500/40 transition-all",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-950/80 border border-cyan-800/50 flex items-center justify-center text-cyan-400 mb-4",children:e.jsx(C,{className:"w-6 h-6"})}),e.jsx("h2",{className:"text-lg font-bold text-slate-100 mb-2",children:"Multi-Agent System"}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:"28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering."})]})]})}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"DOMAIN SKILLS ECOSYSTEM"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"28 Grounded QEC Skills"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in v1.0.6."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:O.map(s=>e.jsxs("div",{className:"card-surface p-6 rounded-2xl border border-slate-800/90 flex flex-col justify-between hover:border-cyan-500/30 transition-all",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"font-mono text-sm font-bold text-cyan-400",children:s.name}),e.jsx("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded bg-slate-800 text-slate-300 border border-slate-700",children:s.role})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed mb-4",children:s.desc})]}),e.jsx("div",{className:"pt-3 border-t border-slate-800/80 space-y-1.5",children:s.keyFeatures.map(a=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-400",children:[e.jsx(q,{className:"w-3.5 h-3.5 text-cyan-400 shrink-0"}),e.jsx("span",{children:a})]},a))})]},s.name))}),e.jsxs("div",{className:"mt-10",children:[e.jsx("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:"All 28 skills shipped in the plugin"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:T.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-cyan-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(S,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"AGENT ROLES & PERSONAS"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"5 Specialized QEC Agents"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:"Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:R.map(s=>e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 font-mono text-xs text-cyan-400",children:[e.jsx(o,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:s.file})]}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-2",children:s.title}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed",children:s.desc})]})},s.file))})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-cyan-950/50 border border-cyan-800/40 text-cyan-300 text-xs font-mono font-medium mb-3",children:[e.jsx(E,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"MCP SERVER TOOL SURFACE"})]}),e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Four Local MCP Servers"}),e.jsxs("p",{className:"text-slate-400 text-sm mt-2 max-w-2xl",children:["The v1.0.6 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose:",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-library "})," (8 stable tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-research "})," (29 provisional tools),",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-admin "})," (3 explicitly enabled tools), and",e.jsx("code",{className:"text-cyan-300 font-mono",children:" qector-desktop-mcp "})," (the safe Desktop profile)."]})]}),e.jsx("div",{className:"card-surface rounded-2xl border border-slate-800 overflow-hidden shadow-xl",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm",children:[e.jsx("thead",{className:"bg-slate-900/90 text-xs font-mono text-cyan-400 uppercase tracking-wider border-b border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4",children:"Tool Name"}),e.jsx("th",{className:"px-6 py-4",children:"Functionality & Mathematical Invariant"})]})}),e.jsx("tbody",{className:"divide-y divide-slate-800/60 font-mono text-xs text-slate-300",children:D.map(s=>e.jsxs("tr",{className:"hover:bg-slate-900/40 transition-colors",children:[e.jsx("td",{className:"px-6 py-4 font-semibold text-cyan-300 whitespace-nowrap",children:s.name}),e.jsx("td",{className:"px-6 py-4 font-sans text-sm text-slate-400",children:s.desc})]},s.name))})]})})}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-research server · ",d.length," provisional tools"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-slate-300",children:s},s))})]}),e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-sm font-bold text-slate-100 mb-3 uppercase tracking-wider",children:["qector-admin server · ",m.length," privileged tools"]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-3",children:["Disabled by default. Requires ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"QECTOR_ADMIN_ENABLED=1"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"confirm=true"})," for every administrative call."]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:m.map(s=>e.jsx("span",{className:"font-mono text-xs px-2.5 py-1 rounded-full bg-slate-900 border border-slate-700 text-gold-300",children:s},s))})]})]}),e.jsxs("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h2",{className:"text-3xl font-extrabold text-slate-100 tracking-tight",children:"Installation & Setup"}),e.jsx("p",{className:"text-slate-400 text-sm mt-2",children:"Configure QECTOR Claude Plugin v1.0.6 for Claude Code or Claude Desktop in seconds."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"1"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Claude Code Marketplace"})]}),e.jsx("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:"Install directly via Claude Code marketplace registration:"}),e.jsx(t,{code:`# 1. Add marketplace repository -claude plugin marketplace add GuillaumeLessard/qector-claude-plugin - -# 2. Install plugin -claude plugin install qector@qector-tools`,language:"bash"})]})}),e.jsx("div",{className:"card-surface p-6 rounded-2xl border border-slate-800 flex flex-col justify-between",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-cyan-400 text-slate-950 font-bold text-xs flex items-center justify-center",children:"2"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100",children:"Local Plugin Directory"})]}),e.jsxs("p",{className:"text-sm text-slate-400 mb-4 leading-relaxed",children:["Clone the source repository and launch with the ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"--plugin-dir"})," flag:"]}),e.jsx(t,{code:`git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git -cd qector-claude-plugin -pip install -r requirements.txt -claude --plugin-dir .`,language:"bash"})]})})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 rounded-2xl border border-slate-800",children:[e.jsxs("h3",{className:"text-lg font-bold text-slate-100 mb-2 flex items-center gap-2",children:[e.jsx(i,{className:"w-5 h-5 text-cyan-400"}),e.jsx("span",{children:"Mathematical Validation Gate"})]}),e.jsx("p",{className:"text-sm text-slate-400 leading-relaxed mb-4",children:"Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:"}),e.jsx(t,{code:`# Run the complete public reference manual mathematical gate -python scripts/run_manual_math_validation.py - -# Or run full pytest integration suite -python -m pytest tests/test_reference_manual_math.py -v`,language:"bash"})]})]}),e.jsx("section",{className:"py-16 md:py-20 max-w-6xl mx-auto px-4 sm:px-6 mb-12",children:e.jsx("div",{className:"card-surface p-8 border border-cyan-900/50 relative overflow-hidden bg-gradient-to-br from-slate-950 via-surface/60 to-slate-950",children:e.jsxs("div",{className:"relative z-10 flex flex-col md:flex-row items-center justify-between gap-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-extrabold text-slate-100 mb-2",children:"Download Distribution Packages"}),e.jsx("p",{className:"text-sm text-slate-400 max-w-xl leading-relaxed",children:"Pre-packaged standalone ZIP archives formatted specifically for the Claude.ai custom-skill uploader (forward-slash path normalized) and Claude Code multi-skill plugin distributions."})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v1.0.6",target:"_blank",rel:"noopener noreferrer",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2 shadow-lg shadow-cyan-400/20",children:[e.jsx(L,{className:"w-4 h-4"}),e.jsx("span",{children:"v1.0.6 Release & Checksums"})]}),e.jsxs(c,{to:"/docs",className:"px-5 py-2.5 rounded-xl bg-slate-900 hover:bg-slate-800 border border-slate-700 text-slate-200 font-semibold text-xs font-mono transition-all inline-flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4 text-cyan-400"}),e.jsx("span",{children:"Docs Hub"})]})]})]})})})]})}export{B as default}; diff --git a/assets/Commercial-9F8cl06-.js b/assets/Commercial-9F8cl06-.js deleted file mode 100644 index 54ee569e..00000000 --- a/assets/Commercial-9F8cl06-.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,c as r,L as s,P as a}from"./index-DayaklK-.js";import{N as i}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{title:"Hosted, SaaS and API",body:"Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only."},{title:"OEM and hardware bundling",body:"Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers."},{title:"Named support engineer",body:"A direct line to the developer, response targets written into the agreement, and help with integration and upgrades."},{title:"Custom terms",body:"Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding."}],d=["E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.","Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.","We send a written proposal and agreement; Enterprise starts from "+r(a.enterpriseFrom)+" a year.","Sign, pay by invoice or card, and receive offline licence tokens the same day."];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise & OEM Licensing · QECTOR",description:`Enterprise and OEM licences for QECTOR Decoder v3: hosted and SaaS rights, OEM and hardware bundling, named support and a signed agreement, from ${r(a.enterpriseFrom)} a year. Air-gapped licensing.`}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] my-6",children:e.jsx(i,{text:"Enterprise & OEM Licensing",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-8",children:["For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From ",r(a.enterpriseFrom)," a year, with licences that verify offline."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/contact",className:"btn-gold",children:"Talk to us"}),e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"Compare all plans"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-10",children:[e.jsx("div",{className:"grid sm:grid-cols-2 gap-6",children:o.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How it works"}),e.jsx("ol",{className:"list-decimal pl-5 space-y-2 text-secondary text-sm leading-relaxed",children:d.map(t=>e.jsx("li",{children:t},t))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Not sure you need Enterprise?"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Internal research and production use, including GPU decoding, is covered by Pro (",r(a.proMonthly),"/month) or Lab (",r(a.lab),"/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," and the"," ",e.jsx(s,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security & Trust"})," pack for procurement."]})]})]})})]})}export{h as default}; diff --git a/assets/Commercial-B6zsxQh9.js b/assets/Commercial-B6zsxQh9.js deleted file mode 100644 index 27b6e2e4..00000000 --- a/assets/Commercial-B6zsxQh9.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-DlmjLVYe.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-B8PtG5cG.js b/assets/Commercial-B8PtG5cG.js deleted file mode 100644 index 1af4fbe1..00000000 --- a/assets/Commercial-B8PtG5cG.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,c as r,L as s,P as a}from"./index-PdoH5kLF.js";import{N as i}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{title:"Hosted, SaaS and API",body:"Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only."},{title:"OEM and hardware bundling",body:"Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers."},{title:"Named support engineer",body:"A direct line to the developer, response targets written into the agreement, and help with integration and upgrades."},{title:"Custom terms",body:"Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding."}],d=["E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.","Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.","We send a written proposal and agreement; Enterprise starts from "+r(a.enterpriseFrom)+" a year.","Sign, pay by invoice or card, and receive offline licence tokens the same day."];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise & OEM Licensing · QECTOR",description:`Enterprise and OEM licences for QECTOR Decoder v3: hosted and SaaS rights, OEM and hardware bundling, named support and a signed agreement, from ${r(a.enterpriseFrom)} a year. Air-gapped licensing.`}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] my-6",children:e.jsx(i,{text:"Enterprise & OEM Licensing",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-8",children:["For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From ",r(a.enterpriseFrom)," a year, with licences that verify offline."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/contact",className:"btn-gold",children:"Talk to us"}),e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"Compare all plans"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-10",children:[e.jsx("div",{className:"grid sm:grid-cols-2 gap-6",children:o.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How it works"}),e.jsx("ol",{className:"list-decimal pl-5 space-y-2 text-secondary text-sm leading-relaxed",children:d.map(t=>e.jsx("li",{children:t},t))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Not sure you need Enterprise?"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Internal research and production use, including GPU decoding, is covered by Pro (",r(a.proMonthly),"/month) or Lab (",r(a.lab),"/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," and the"," ",e.jsx(s,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security & Trust"})," pack for procurement."]})]})]})})]})}export{h as default}; diff --git a/assets/Commercial-BBdipo-u.js b/assets/Commercial-BBdipo-u.js deleted file mode 100644 index ca2f51aa..00000000 --- a/assets/Commercial-BBdipo-u.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-_BpMZhV3.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-BPs2_LwV.js b/assets/Commercial-BPs2_LwV.js deleted file mode 100644 index 23d95439..00000000 --- a/assets/Commercial-BPs2_LwV.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,b as r,P as a}from"./index-Bh9DBCb3.js";import{N as i}from"./NeuralReveal-D-EQoOl2.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const o=[{title:"Hosted, SaaS and API",body:"Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only."},{title:"OEM and hardware bundling",body:"Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers."},{title:"Named support engineer",body:"A direct line to the developer, response targets written into the agreement, and help with integration and upgrades."},{title:"Custom terms",body:"Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding."}],d=["E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.","Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.","We send a written proposal and agreement; Enterprise starts from "+r(a.enterpriseFrom)+" a year.","Sign, pay by invoice or card, and receive offline licence tokens the same day."];function g(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise & OEM Licensing · QECTOR",description:`Enterprise and OEM licences for QECTOR Decoder v3: hosted and SaaS rights, OEM and hardware bundling, named support and a signed agreement, from ${r(a.enterpriseFrom)} a year. Air-gapped licensing.`}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] my-6",children:e.jsx(i,{text:"Enterprise & OEM Licensing",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-8",children:["For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From ",r(a.enterpriseFrom)," a year, with licences that verify offline."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/contact",className:"btn-gold",children:"Talk to us"}),e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"Compare all plans"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-10",children:[e.jsx("div",{className:"grid sm:grid-cols-2 gap-6",children:o.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How it works"}),e.jsx("ol",{className:"list-decimal pl-5 space-y-2 text-secondary text-sm leading-relaxed",children:d.map(t=>e.jsx("li",{children:t},t))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Not sure you need Enterprise?"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Internal research and production use, including GPU decoding, is covered by Pro (",r(a.proMonthly),"/month) or Lab (",r(a.lab),"/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," and the"," ",e.jsx(s,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security & Trust"})," pack for procurement."]})]})]})})]})}export{g as default}; diff --git a/assets/Commercial-BqJzIf-W.js b/assets/Commercial-BqJzIf-W.js deleted file mode 100644 index 803f5e2c..00000000 --- a/assets/Commercial-BqJzIf-W.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-CxWP17m6.js";import{N as n}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(n,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information, including plans, the Pilot and FAQs, is on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-Bs186zL3.js b/assets/Commercial-Bs186zL3.js deleted file mode 100644 index ee2cbecb..00000000 --- a/assets/Commercial-Bs186zL3.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-CpdATiEY.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-C-t75vTg.js b/assets/Commercial-C-t75vTg.js deleted file mode 100644 index 79cb5b55..00000000 --- a/assets/Commercial-C-t75vTg.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-iVST85F-.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-C0AKNYqz.js b/assets/Commercial-C0AKNYqz.js deleted file mode 100644 index d8d5d354..00000000 --- a/assets/Commercial-C0AKNYqz.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-BN-vOeL2.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-CCyjMCrg.js b/assets/Commercial-CCyjMCrg.js deleted file mode 100644 index 86bee8b5..00000000 --- a/assets/Commercial-CCyjMCrg.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-CqAA-ZXu.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-CHRl50uZ.js b/assets/Commercial-CHRl50uZ.js deleted file mode 100644 index 226c6511..00000000 --- a/assets/Commercial-CHRl50uZ.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-B9kEGiWi.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-CK9aK7Ti.js b/assets/Commercial-CK9aK7Ti.js deleted file mode 100644 index f6a01b6d..00000000 --- a/assets/Commercial-CK9aK7Ti.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-DkYdPRY7.js";import{N as n}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(n,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information, including plans, the Pilot and FAQs, is on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-CbwZveQB.js b/assets/Commercial-CbwZveQB.js deleted file mode 100644 index fdd28ab3..00000000 --- a/assets/Commercial-CbwZveQB.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,b as r,P as a}from"./index-abfjMTlQ.js";import{N as i}from"./NeuralReveal-D-EQoOl2.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const o=[{title:"Hosted, SaaS and API",body:"Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only."},{title:"OEM and hardware bundling",body:"Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers."},{title:"Named support engineer",body:"A direct line to the developer, response targets written into the agreement, and help with integration and upgrades."},{title:"Custom terms",body:"Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding."}],d=["E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.","Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.","We send a written proposal and agreement; Enterprise starts from "+r(a.enterpriseFrom)+" a year.","Sign, pay by invoice or card, and receive offline licence tokens the same day."];function g(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise & OEM Licensing · QECTOR",description:`Enterprise and OEM licences for QECTOR Decoder v3: hosted and SaaS rights, OEM and hardware bundling, named support and a signed agreement, from ${r(a.enterpriseFrom)} a year. Air-gapped licensing.`}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] my-6",children:e.jsx(i,{text:"Enterprise & OEM Licensing",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-8",children:["For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From ",r(a.enterpriseFrom)," a year, with licences that verify offline."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/contact",className:"btn-gold",children:"Talk to us"}),e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"Compare all plans"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-10",children:[e.jsx("div",{className:"grid sm:grid-cols-2 gap-6",children:o.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How it works"}),e.jsx("ol",{className:"list-decimal pl-5 space-y-2 text-secondary text-sm leading-relaxed",children:d.map(t=>e.jsx("li",{children:t},t))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Not sure you need Enterprise?"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Internal research and production use, including GPU decoding, is covered by Pro (",r(a.proMonthly),"/month) or Lab (",r(a.lab),"/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," and the"," ",e.jsx(s,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security & Trust"})," pack for procurement."]})]})]})})]})}export{g as default}; diff --git a/assets/Commercial-CgBsPCVr.js b/assets/Commercial-CgBsPCVr.js deleted file mode 100644 index 46e310b2..00000000 --- a/assets/Commercial-CgBsPCVr.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-BcbVjARk.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-CxpVn0T0.js b/assets/Commercial-CxpVn0T0.js deleted file mode 100644 index b4b5e478..00000000 --- a/assets/Commercial-CxpVn0T0.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,c as r,L as s,P as a}from"./index-CcwlvHYJ.js";import{N as i}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{title:"Hosted, SaaS and API",body:"Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only."},{title:"OEM and hardware bundling",body:"Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers."},{title:"Named support engineer",body:"A direct line to the developer, response targets written into the agreement, and help with integration and upgrades."},{title:"Custom terms",body:"Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding."}],d=["E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.","Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.","We send a written proposal and agreement; Enterprise starts from "+r(a.enterpriseFrom)+" a year.","Sign, pay by invoice or card, and receive offline licence tokens the same day."];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise & OEM Licensing · QECTOR",description:`Enterprise and OEM licences for QECTOR Decoder v3: hosted and SaaS rights, OEM and hardware bundling, named support and a signed agreement, from ${r(a.enterpriseFrom)} a year. Air-gapped licensing.`}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] my-6",children:e.jsx(i,{text:"Enterprise & OEM Licensing",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-8",children:["For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From ",r(a.enterpriseFrom)," a year, with licences that verify offline."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/contact",className:"btn-gold",children:"Talk to us"}),e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"Compare all plans"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-10",children:[e.jsx("div",{className:"grid sm:grid-cols-2 gap-6",children:o.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How it works"}),e.jsx("ol",{className:"list-decimal pl-5 space-y-2 text-secondary text-sm leading-relaxed",children:d.map(t=>e.jsx("li",{children:t},t))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Not sure you need Enterprise?"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Internal research and production use, including GPU decoding, is covered by Pro (",r(a.proMonthly),"/month) or Lab (",r(a.lab),"/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," and the"," ",e.jsx(s,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security & Trust"})," pack for procurement."]})]})]})})]})}export{h as default}; diff --git a/assets/Commercial-DQA7Mxss.js b/assets/Commercial-DQA7Mxss.js deleted file mode 100644 index 2e519614..00000000 --- a/assets/Commercial-DQA7Mxss.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,c as r,L as s,P as a}from"./index-CCmwjNGU.js";import{N as i}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{title:"Hosted, SaaS and API",body:"Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only."},{title:"OEM and hardware bundling",body:"Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers."},{title:"Named support engineer",body:"A direct line to the developer, response targets written into the agreement, and help with integration and upgrades."},{title:"Custom terms",body:"Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding."}],d=["E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.","Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.","We send a written proposal and agreement; Enterprise starts from "+r(a.enterpriseFrom)+" a year.","Sign, pay by invoice or card, and receive offline licence tokens the same day."];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise & OEM Licensing · QECTOR",description:`Enterprise and OEM licences for QECTOR Decoder v3: hosted and SaaS rights, OEM and hardware bundling, named support and a signed agreement, from ${r(a.enterpriseFrom)} a year. Air-gapped licensing.`}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] my-6",children:e.jsx(i,{text:"Enterprise & OEM Licensing",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-8",children:["For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From ",r(a.enterpriseFrom)," a year, with licences that verify offline."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/contact",className:"btn-gold",children:"Talk to us"}),e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"Compare all plans"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-10",children:[e.jsx("div",{className:"grid sm:grid-cols-2 gap-6",children:o.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How it works"}),e.jsx("ol",{className:"list-decimal pl-5 space-y-2 text-secondary text-sm leading-relaxed",children:d.map(t=>e.jsx("li",{children:t},t))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Not sure you need Enterprise?"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Internal research and production use, including GPU decoding, is covered by Pro (",r(a.proMonthly),"/month) or Lab (",r(a.lab),"/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," and the"," ",e.jsx(s,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security & Trust"})," pack for procurement."]})]})]})})]})}export{h as default}; diff --git a/assets/Commercial-MVsMi_JH.js b/assets/Commercial-MVsMi_JH.js deleted file mode 100644 index 1fc07b43..00000000 --- a/assets/Commercial-MVsMi_JH.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,c as r,L as s,P as a}from"./index-c1PDYu0j.js";import{N as i}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{title:"Hosted, SaaS and API",body:"Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only."},{title:"OEM and hardware bundling",body:"Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers."},{title:"Named support engineer",body:"A direct line to the developer, response targets written into the agreement, and help with integration and upgrades."},{title:"Custom terms",body:"Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding."}],d=["E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.","Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.","We send a written proposal and agreement; Enterprise starts from "+r(a.enterpriseFrom)+" a year.","Sign, pay by invoice or card, and receive offline licence tokens the same day."];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise & OEM Licensing · QECTOR",description:`Enterprise and OEM licences for QECTOR Decoder v3: hosted and SaaS rights, OEM and hardware bundling, named support and a signed agreement, from ${r(a.enterpriseFrom)} a year. Air-gapped licensing.`}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] my-6",children:e.jsx(i,{text:"Enterprise & OEM Licensing",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-8",children:["For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From ",r(a.enterpriseFrom)," a year, with licences that verify offline."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/contact",className:"btn-gold",children:"Talk to us"}),e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"Compare all plans"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-10",children:[e.jsx("div",{className:"grid sm:grid-cols-2 gap-6",children:o.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How it works"}),e.jsx("ol",{className:"list-decimal pl-5 space-y-2 text-secondary text-sm leading-relaxed",children:d.map(t=>e.jsx("li",{children:t},t))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Not sure you need Enterprise?"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Internal research and production use, including GPU decoding, is covered by Pro (",r(a.proMonthly),"/month) or Lab (",r(a.lab),"/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," and the"," ",e.jsx(s,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security & Trust"})," pack for procurement."]})]})]})})]})}export{h as default}; diff --git a/assets/Commercial-_regRqgo.js b/assets/Commercial-_regRqgo.js deleted file mode 100644 index c5f1a432..00000000 --- a/assets/Commercial-_regRqgo.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-DRAXObZB.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-cPXJAPQT.js b/assets/Commercial-cPXJAPQT.js deleted file mode 100644 index ab01a230..00000000 --- a/assets/Commercial-cPXJAPQT.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-WV1aysjN.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(r,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information including evaluation, annual tiers, and FAQs has moved to the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Commercial-e3jcuxYP.js b/assets/Commercial-e3jcuxYP.js deleted file mode 100644 index bfadd587..00000000 --- a/assets/Commercial-e3jcuxYP.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t,j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-BUYYSLdX.js";import{N as n}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return t.useEffect(()=>{window.scrollTo(0,0)},[]),e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Enterprise Licensing · QECTOR",description:"Enterprise and OEM licenses for QECTOR Decoder v3. Custom agreements for redistribution, SaaS hosting, and hardware bundling."}),e.jsx("section",{className:"py-24 md:py-32 section-padding text-center",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill",children:"Enterprise & OEM"}),e.jsx("h1",{className:"text-3xl md:text-5xl font-bold mb-6",children:e.jsx(n,{text:"Enterprise & OEM Licensing",className:"text-3xl md:text-5xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg mb-8",children:"Custom licensing for redistribution, SaaS hosting, hardware bundling, and strategic partnerships."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View All Pricing & Tiers →"}),e.jsx(s,{to:"/contact",className:"btn-gold",children:"Contact Enterprise Sales"})]}),e.jsxs("p",{className:"text-muted-foreground text-sm mt-6",children:["All standard licensing information, including plans, the Pilot and FAQs, is on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing page"}),"."]})]})})]})}export{x as default}; diff --git a/assets/Compare-5L3DLJJs.js b/assets/Compare-5L3DLJJs.js deleted file mode 100644 index ac463c15..00000000 --- a/assets/Compare-5L3DLJJs.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as n}from"./index-CCmwjNGU.js";import{N as r}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const i=[{label:"Main decoders",qector:"Union-Find, exact MWPM (Blossom, Sparse Blossom), BP-OSD, Relay-BP",pymatching:"MWPM (Sparse Blossom), correlated matching",ldpc:"BP+OSD, BP+LSD, BeliefFind (BP + Union-Find)",fusion:"Parallel MWPM"},{label:"Graph-like codes (surface, repetition)",qector:"Yes",pymatching:"Yes, its specialty",ldpc:"Yes",fusion:"Yes"},{label:"qLDPC and non-graph-like codes",qector:"Yes (BP-OSD, Relay-BP)",pymatching:"No: needs graph-like error models",ldpc:"Yes, its specialty",fusion:"No"},{label:"Several families on one check matrix",qector:"Yes, one API",pymatching:"Matching only",ldpc:"BP-based family",fusion:"Matching only"},{label:"GPU batch decoding",qector:"Yes (CUDA, OpenCL; paid plans)",pymatching:"No",ldpc:"No",fusion:"No"},{label:"Stim and Sinter",qector:"Yes",pymatching:"Yes",ldpc:"Via Sinter decoder classes",fusion:"Via Sinter"},{label:"Core language",qector:"Rust, Python API",pymatching:"C++, Python API",ldpc:"C++, Python API",fusion:"Rust, Python API"},{label:"Licence",qector:"PolyForm Noncommercial; commercial plans",pymatching:"Apache 2.0",ldpc:"MIT",fusion:"MIT"},{label:"Commercial support",qector:"Yes, with offline-verified licences",pymatching:"Community",ldpc:"Community",fusion:"Community"}],a=[["PyMatching","https://pypi.org/project/pymatching/"],["ldpc","https://pypi.org/project/ldpc/"],["fusion-blossom","https://pypi.org/project/fusion-blossom/"],["QECTOR Decoder v3","https://pypi.org/project/qector-decoder-v3/"]];function x(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"QECTOR vs PyMatching, ldpc and fusion-blossom · Feature Comparison",description:"An honest feature comparison of QECTOR Decoder v3 with PyMatching, ldpc and fusion-blossom: decoder families, qLDPC support, GPU, Stim and Sinter, licences and support. No speed claims."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Features, not speed claims · Checked November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"How QECTOR Compares",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"PyMatching, ldpc and fusion-blossom are excellent open-source decoders. QECTOR's case is breadth: many decoder families, qLDPC and GPU batch decoding behind one API, with every correction checked."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto space-y-8",children:[e.jsx("div",{className:"card-surface overflow-x-auto",tabIndex:0,role:"region","aria-label":"Feature comparison",children:e.jsxs("table",{className:"w-full min-w-[760px] text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{scope:"col",className:"py-3 pr-4 text-muted-foreground font-semibold w-[20%]",children:"Feature"}),e.jsx("th",{scope:"col",className:"py-3 pr-4 text-cyan-300 font-bold",children:"QECTOR Decoder v3"}),e.jsx("th",{scope:"col",className:"py-3 pr-4 text-primary font-semibold",children:"PyMatching"}),e.jsx("th",{scope:"col",className:"py-3 pr-4 text-primary font-semibold",children:"ldpc"}),e.jsx("th",{scope:"col",className:"py-3 text-primary font-semibold",children:"fusion-blossom"})]})}),e.jsx("tbody",{children:i.map(s=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("th",{scope:"row",className:"py-3 pr-4 text-primary font-medium",children:s.label}),e.jsx("td",{className:"py-3 pr-4 text-primary bg-cyan-300/[0.04]",children:s.qector}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.pymatching}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.ldpc}),e.jsx("td",{className:"py-3 text-secondary",children:s.fusion})]},s.label))})]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose another tool when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference."}),e.jsx("li",{children:"You need a permissive open-source licence to redistribute the decoder inside your own product for free."}),e.jsx("li",{children:"You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose QECTOR when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You compare several decoder families on the same codes and want one API and one output format."}),e.jsx("li",{children:"You work on qLDPC codes and want GPU batch decoding."}),e.jsx("li",{children:"You need every correction checked against its syndrome, and commercial support with licences that work air-gapped."}),e.jsxs("li",{children:["You use Claude: the ",e.jsx(n,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"QECTOR Claude plugin"})," brings verified decoding into Claude Code and Claude Desktop."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"About this comparison"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (",e.jsx("code",{className:"font-mono text-cyan-200",children:"from qector_decoder_v3.pymatching import Matching"}),") so you can switch and compare in place. Spotted something out of date? Write to"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," and we will correct it."]}),e.jsxs("p",{className:"text-secondary text-sm",children:["Sources:"," ",a.map(([s,o],t)=>e.jsxs("span",{children:[e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:s}),te.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("th",{scope:"row",className:"py-3 pr-4 text-primary font-medium",children:s.label}),e.jsx("td",{className:"py-3 pr-4 text-primary bg-cyan-300/[0.04]",children:s.qector}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.pymatching}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.ldpc}),e.jsx("td",{className:"py-3 text-secondary",children:s.fusion})]},s.label))})]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose another tool when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference."}),e.jsx("li",{children:"You need a permissive open-source licence to redistribute the decoder inside your own product for free."}),e.jsx("li",{children:"You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose QECTOR when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You compare several decoder families on the same codes and want one API and one output format."}),e.jsx("li",{children:"You work on qLDPC codes and want GPU batch decoding."}),e.jsx("li",{children:"You need every correction checked against its syndrome, and commercial support with licences that work air-gapped."}),e.jsxs("li",{children:["You use Claude: the ",e.jsx(n,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"QECTOR Claude plugin"})," brings verified decoding into Claude Code and Claude Desktop."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"About this comparison"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (",e.jsx("code",{className:"font-mono text-cyan-200",children:"from qector_decoder_v3.pymatching import Matching"}),") so you can switch and compare in place. Spotted something out of date? Write to"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," and we will correct it."]}),e.jsxs("p",{className:"text-secondary text-sm",children:["Sources:"," ",a.map(([s,o],t)=>e.jsxs("span",{children:[e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:s}),te.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("th",{scope:"row",className:"py-3 pr-4 text-primary font-medium",children:s.label}),e.jsx("td",{className:"py-3 pr-4 text-primary bg-cyan-300/[0.04]",children:s.qector}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.pymatching}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.ldpc}),e.jsx("td",{className:"py-3 text-secondary",children:s.fusion})]},s.label))})]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose another tool when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference."}),e.jsx("li",{children:"You need a permissive open-source licence to redistribute the decoder inside your own product for free."}),e.jsx("li",{children:"You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose QECTOR when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You compare several decoder families on the same codes and want one API and one output format."}),e.jsx("li",{children:"You work on qLDPC codes and want GPU batch decoding."}),e.jsx("li",{children:"You need every correction checked against its syndrome, and commercial support with licences that work air-gapped."}),e.jsxs("li",{children:["You use Claude: the ",e.jsx(n,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"QECTOR Claude plugin"})," brings verified decoding into Claude Code and Claude Desktop."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"About this comparison"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (",e.jsx("code",{className:"font-mono text-cyan-200",children:"from qector_decoder_v3.pymatching import Matching"}),") so you can switch and compare in place. Spotted something out of date? Write to"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," and we will correct it."]}),e.jsxs("p",{className:"text-secondary text-sm",children:["Sources:"," ",a.map(([s,o],t)=>e.jsxs("span",{children:[e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:s}),te.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("th",{scope:"row",className:"py-3 pr-4 text-primary font-medium",children:s.label}),e.jsx("td",{className:"py-3 pr-4 text-primary bg-cyan-300/[0.04]",children:s.qector}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.pymatching}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.ldpc}),e.jsx("td",{className:"py-3 text-secondary",children:s.fusion})]},s.label))})]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose another tool when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference."}),e.jsx("li",{children:"You need a permissive open-source licence to redistribute the decoder inside your own product for free."}),e.jsx("li",{children:"You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose QECTOR when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You compare several decoder families on the same codes and want one API and one output format."}),e.jsx("li",{children:"You work on qLDPC codes and want GPU batch decoding."}),e.jsx("li",{children:"You need every correction checked against its syndrome, and commercial support with licences that work air-gapped."}),e.jsxs("li",{children:["You use Claude: the ",e.jsx(n,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"QECTOR Claude plugin"})," brings verified decoding into Claude Code and Claude Desktop."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"About this comparison"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (",e.jsx("code",{className:"font-mono text-cyan-200",children:"from qector_decoder_v3.pymatching import Matching"}),") so you can switch and compare in place. Spotted something out of date? Write to"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," and we will correct it."]}),e.jsxs("p",{className:"text-secondary text-sm",children:["Sources:"," ",a.map(([s,o],t)=>e.jsxs("span",{children:[e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:s}),te.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("th",{scope:"row",className:"py-3 pr-4 text-primary font-medium",children:s.label}),e.jsx("td",{className:"py-3 pr-4 text-primary bg-cyan-300/[0.04]",children:s.qector}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.pymatching}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.ldpc}),e.jsx("td",{className:"py-3 text-secondary",children:s.fusion})]},s.label))})]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose another tool when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference."}),e.jsx("li",{children:"You need a permissive open-source licence to redistribute the decoder inside your own product for free."}),e.jsx("li",{children:"You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose QECTOR when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You compare several decoder families on the same codes and want one API and one output format."}),e.jsx("li",{children:"You work on qLDPC codes and want GPU batch decoding."}),e.jsx("li",{children:"You need every correction checked against its syndrome, and commercial support with licences that work air-gapped."}),e.jsxs("li",{children:["You use Claude: the ",e.jsx(i,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"QECTOR Claude plugin"})," brings verified decoding into Claude Code and Claude Desktop."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"About this comparison"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (",e.jsx("code",{className:"font-mono text-cyan-200",children:"from qector_decoder_v3.pymatching import Matching"}),") so you can switch and compare in place. Spotted something out of date? Write to"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," and we will correct it."]}),e.jsxs("p",{className:"text-secondary text-sm",children:["Sources:"," ",a.map(([s,o],t)=>e.jsxs("span",{children:[e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:s}),te.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("th",{scope:"row",className:"py-3 pr-4 text-primary font-medium",children:s.label}),e.jsx("td",{className:"py-3 pr-4 text-primary bg-cyan-300/[0.04]",children:s.qector}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.pymatching}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.ldpc}),e.jsx("td",{className:"py-3 text-secondary",children:s.fusion})]},s.label))})]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose another tool when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference."}),e.jsx("li",{children:"You need a permissive open-source licence to redistribute the decoder inside your own product for free."}),e.jsx("li",{children:"You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose QECTOR when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You compare several decoder families on the same codes and want one API and one output format."}),e.jsx("li",{children:"You work on qLDPC codes and want GPU batch decoding."}),e.jsx("li",{children:"You need every correction checked against its syndrome, and commercial support with licences that work air-gapped."}),e.jsxs("li",{children:["You use Claude: the ",e.jsx(i,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"QECTOR Claude plugin"})," brings verified decoding into Claude Code and Claude Desktop."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"About this comparison"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (",e.jsx("code",{className:"font-mono text-cyan-200",children:"from qector_decoder_v3.pymatching import Matching"}),") so you can switch and compare in place. Spotted something out of date? Write to"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," and we will correct it."]}),e.jsxs("p",{className:"text-secondary text-sm",children:["Sources:"," ",a.map(([s,o],t)=>e.jsxs("span",{children:[e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:s}),te.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("th",{scope:"row",className:"py-3 pr-4 text-primary font-medium",children:s.label}),e.jsx("td",{className:"py-3 pr-4 text-primary bg-cyan-300/[0.04]",children:s.qector}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.pymatching}),e.jsx("td",{className:"py-3 pr-4 text-secondary",children:s.ldpc}),e.jsx("td",{className:"py-3 text-secondary",children:s.fusion})]},s.label))})]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose another tool when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference."}),e.jsx("li",{children:"You need a permissive open-source licence to redistribute the decoder inside your own product for free."}),e.jsx("li",{children:"You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Choose QECTOR when"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsx("li",{children:"You compare several decoder families on the same codes and want one API and one output format."}),e.jsx("li",{children:"You work on qLDPC codes and want GPU batch decoding."}),e.jsx("li",{children:"You need every correction checked against its syndrome, and commercial support with licences that work air-gapped."}),e.jsxs("li",{children:["You use Claude: the ",e.jsx(n,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"QECTOR Claude plugin"})," brings verified decoding into Claude Code and Claude Desktop."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"About this comparison"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (",e.jsx("code",{className:"font-mono text-cyan-200",children:"from qector_decoder_v3.pymatching import Matching"}),") so you can switch and compare in place. Spotted something out of date? Write to"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," and we will correct it."]}),e.jsxs("p",{className:"text-secondary text-sm",children:["Sources:"," ",a.map(([s,o],t)=>e.jsxs("span",{children:[e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:s}),t{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact--nZcFW5q.js b/assets/Contact--nZcFW5q.js deleted file mode 100644 index b8bcb039..00000000 --- a/assets/Contact--nZcFW5q.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-DkYdPRY7.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-5DsWRxiq.js b/assets/Contact-5DsWRxiq.js deleted file mode 100644 index 3c9fec6f..00000000 --- a/assets/Contact-5DsWRxiq.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-abfjMTlQ.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-5d9KNtoD.js b/assets/Contact-5d9KNtoD.js deleted file mode 100644 index e501af5b..00000000 --- a/assets/Contact-5d9KNtoD.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as b,J as g,L as n,f as y}from"./index-PdoH5kLF.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{g as o,S as j}from"./vendor-gsap-a3sj5zmn.js";import{Z as v}from"./vendor-ui-B8TlNU4J.js";o.registerPlugin(j);function S(){const l=a.useRef([]),[i,c]=a.useState(!1),[d,x]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=o.context(()=>{l.current.filter(Boolean).forEach(r=>{o.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const m=(s,r)=>{s&&(l.current[r]=s)},u=async s=>{s.preventDefault(),x("");const r=s.currentTarget,t=new FormData(r);if(String(t.get("website")||"").trim()!==""){c("sent");return}{const h=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,p=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:h,body:p})}`,c("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>m(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Business address"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>m(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:u,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),e.jsxs("div",{"aria-hidden":"true",className:"absolute -left-[9999px] w-px h-px overflow-hidden",children:[e.jsx("label",{htmlFor:"contact-website",children:"Leave this field empty"}),e.jsx("input",{id:"contact-website",name:"website",type:"text",tabIndex:-1,autoComplete:"off"})]}),d&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:d}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["We use what you send only to answer your inquiry and keep it for 3 years after our last exchange. It is never sold or shared for marketing. See the"," ",e.jsx(n,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"})," (",e.jsx(n,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"français"}),") for your rights under Québec law."]})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(f,{url:y})]})]})})]})}export{S as default}; diff --git a/assets/Contact-BMa0iMCR.js b/assets/Contact-BMa0iMCR.js deleted file mode 100644 index 6c33138f..00000000 --- a/assets/Contact-BMa0iMCR.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-CqAA-ZXu.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-BcMJNVGG.js b/assets/Contact-BcMJNVGG.js deleted file mode 100644 index 6670a228..00000000 --- a/assets/Contact-BcMJNVGG.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as b,J as g,L as n,f as y}from"./index-CCmwjNGU.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{g as o,S as j}from"./vendor-gsap-a3sj5zmn.js";import{Z as v}from"./vendor-ui-B8TlNU4J.js";o.registerPlugin(j);function S(){const l=a.useRef([]),[i,c]=a.useState(!1),[d,x]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=o.context(()=>{l.current.filter(Boolean).forEach(r=>{o.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const m=(s,r)=>{s&&(l.current[r]=s)},u=async s=>{s.preventDefault(),x("");const r=s.currentTarget,t=new FormData(r);if(String(t.get("website")||"").trim()!==""){c("sent");return}{const h=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,p=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:h,body:p})}`,c("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>m(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Mailing address"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"288 boul. des Ormeaux, Longueuil, Québec, Canada J4L 1J4",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>m(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:u,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),e.jsxs("div",{"aria-hidden":"true",className:"absolute -left-[9999px] w-px h-px overflow-hidden",children:[e.jsx("label",{htmlFor:"contact-website",children:"Leave this field empty"}),e.jsx("input",{id:"contact-website",name:"website",type:"text",tabIndex:-1,autoComplete:"off"})]}),d&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:d}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["We use what you send only to answer your inquiry and keep it for 3 years after our last exchange. It is never sold or shared for marketing. See the"," ",e.jsx(n,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"})," (",e.jsx(n,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"français"}),") for your rights under Québec law."]})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(f,{url:y})]})]})})]})}export{S as default}; diff --git a/assets/Contact-Bqa2Snjs.js b/assets/Contact-Bqa2Snjs.js deleted file mode 100644 index c3d35bcb..00000000 --- a/assets/Contact-Bqa2Snjs.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-DlmjLVYe.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-C9JTwA3Q.js b/assets/Contact-C9JTwA3Q.js deleted file mode 100644 index 07737e37..00000000 --- a/assets/Contact-C9JTwA3Q.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-CpdATiEY.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-CNyl61eI.js b/assets/Contact-CNyl61eI.js deleted file mode 100644 index c7a2267a..00000000 --- a/assets/Contact-CNyl61eI.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-BN-vOeL2.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-CcHAROXi.js b/assets/Contact-CcHAROXi.js deleted file mode 100644 index 52cd897e..00000000 --- a/assets/Contact-CcHAROXi.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as b,J as g,L as n,f as y}from"./index-CcwlvHYJ.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{g as o,S as j}from"./vendor-gsap-a3sj5zmn.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";o.registerPlugin(j);function S(){const l=a.useRef([]),[i,c]=a.useState(!1),[d,x]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=o.context(()=>{l.current.filter(Boolean).forEach(r=>{o.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const m=(s,r)=>{s&&(l.current[r]=s)},u=async s=>{s.preventDefault(),x("");const r=s.currentTarget,t=new FormData(r);if(String(t.get("website")||"").trim()!==""){c("sent");return}{const h=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,p=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:h,body:p})}`,c("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>m(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Business address"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>m(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:u,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),e.jsxs("div",{"aria-hidden":"true",className:"absolute -left-[9999px] w-px h-px overflow-hidden",children:[e.jsx("label",{htmlFor:"contact-website",children:"Leave this field empty"}),e.jsx("input",{id:"contact-website",name:"website",type:"text",tabIndex:-1,autoComplete:"off"})]}),d&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:d}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["We use what you send only to answer your inquiry and keep it for 3 years after our last exchange. It is never sold or shared for marketing. See the"," ",e.jsx(n,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"})," (",e.jsx(n,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"français"}),") for your rights under Québec law."]})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(f,{url:y})]})]})})]})}export{S as default}; diff --git a/assets/Contact-CppRxmmN.js b/assets/Contact-CppRxmmN.js deleted file mode 100644 index 94ede3f2..00000000 --- a/assets/Contact-CppRxmmN.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-WV1aysjN.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-D1OwXUzJ.js b/assets/Contact-D1OwXUzJ.js deleted file mode 100644 index fd289259..00000000 --- a/assets/Contact-D1OwXUzJ.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as b,J as g,L as n,f as y}from"./index-c1PDYu0j.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{g as o,S as j}from"./vendor-gsap-a3sj5zmn.js";import{Z as v}from"./vendor-ui-B8TlNU4J.js";o.registerPlugin(j);function S(){const l=a.useRef([]),[i,c]=a.useState(!1),[d,x]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=o.context(()=>{l.current.filter(Boolean).forEach(r=>{o.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const m=(s,r)=>{s&&(l.current[r]=s)},u=async s=>{s.preventDefault(),x("");const r=s.currentTarget,t=new FormData(r);if(String(t.get("website")||"").trim()!==""){c("sent");return}{const h=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,p=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:h,body:p})}`,c("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>m(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Business address"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>m(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:u,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),e.jsxs("div",{"aria-hidden":"true",className:"absolute -left-[9999px] w-px h-px overflow-hidden",children:[e.jsx("label",{htmlFor:"contact-website",children:"Leave this field empty"}),e.jsx("input",{id:"contact-website",name:"website",type:"text",tabIndex:-1,autoComplete:"off"})]}),d&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:d}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["We use what you send only to answer your inquiry and keep it for 3 years after our last exchange. It is never sold or shared for marketing. See the"," ",e.jsx(n,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"})," (",e.jsx(n,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"français"}),") for your rights under Québec law."]})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(f,{url:y})]})]})})]})}export{S as default}; diff --git a/assets/Contact-D61L1Z0b.js b/assets/Contact-D61L1Z0b.js deleted file mode 100644 index 94fe1713..00000000 --- a/assets/Contact-D61L1Z0b.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-BUYYSLdX.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-Dg86Xaug.js b/assets/Contact-Dg86Xaug.js deleted file mode 100644 index cb8a2110..00000000 --- a/assets/Contact-Dg86Xaug.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,b}from"./index-_BpMZhV3.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-Dlj_E6zg.js b/assets/Contact-Dlj_E6zg.js deleted file mode 100644 index 59dfbc72..00000000 --- a/assets/Contact-Dlj_E6zg.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-CxWP17m6.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-DuHdX58e.js b/assets/Contact-DuHdX58e.js deleted file mode 100644 index 25cacd09..00000000 --- a/assets/Contact-DuHdX58e.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,d as b}from"./index-Bh9DBCb3.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-DxkfRI_A.js b/assets/Contact-DxkfRI_A.js deleted file mode 100644 index 1218dcce..00000000 --- a/assets/Contact-DxkfRI_A.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,b}from"./index-B9kEGiWi.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-HqNNvrNi.js b/assets/Contact-HqNNvrNi.js deleted file mode 100644 index e3e12fce..00000000 --- a/assets/Contact-HqNNvrNi.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,b}from"./index-iVST85F-.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Contact-Qiq6QgKt.js b/assets/Contact-Qiq6QgKt.js deleted file mode 100644 index 72208f12..00000000 --- a/assets/Contact-Qiq6QgKt.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as b,J as g,L as n,f as y}from"./index-DayaklK-.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{g as o,S as j}from"./vendor-gsap-a3sj5zmn.js";import{Z as v}from"./vendor-ui-B8TlNU4J.js";o.registerPlugin(j);function S(){const l=a.useRef([]),[i,c]=a.useState(!1),[d,x]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=o.context(()=>{l.current.filter(Boolean).forEach(r=>{o.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const m=(s,r)=>{s&&(l.current[r]=s)},u=async s=>{s.preventDefault(),x("");const r=s.currentTarget,t=new FormData(r);if(String(t.get("website")||"").trim()!==""){c("sent");return}{const h=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,p=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:h,body:p})}`,c("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>m(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Business address"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>m(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:u,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),e.jsxs("div",{"aria-hidden":"true",className:"absolute -left-[9999px] w-px h-px overflow-hidden",children:[e.jsx("label",{htmlFor:"contact-website",children:"Leave this field empty"}),e.jsx("input",{id:"contact-website",name:"website",type:"text",tabIndex:-1,autoComplete:"off"})]}),d&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:d}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["We use what you send only to answer your inquiry and keep it for 3 years after our last exchange. It is never sold or shared for marketing. See the"," ",e.jsx(n,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"})," (",e.jsx(n,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"français"}),") for your rights under Québec law."]})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(f,{url:y})]})]})})]})}export{S as default}; diff --git a/assets/Contact-ZN3l_2_v.js b/assets/Contact-ZN3l_2_v.js deleted file mode 100644 index 6a1f958f..00000000 --- a/assets/Contact-ZN3l_2_v.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as a,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,J as g,b}from"./index-BcbVjARk.js";import{C as y}from"./CalendlyWidget-BuhQfp2_.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{L as j}from"./vendor-PiU4YGcH.js";import{Z as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);function T(){const o=a.useRef([]),[i,d]=a.useState(!1),[l,m]=a.useState("");a.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(r=>{n.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const c=(s,r)=>{s&&(o.current[r]=s)},x=async s=>{s.preventDefault(),m("");const r=s.currentTarget,t=new FormData(r);{const u=`QECTOR inquiry from ${t.get("name")||"anonymous"}`,h=[`Name: ${t.get("name")||""}`,`Email: ${t.get("email")||""}`,`Organization: ${t.get("organization")||""}`,`Referral: ${t.get("referral")||""}`,`Timeline: ${t.get("timeline")||""}`,"",String(t.get("message")||"")].join(` -`);window.location.href=`mailto:admin@qector.store?${new URLSearchParams({subject:u,body:h})}`,d("draft")}};return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Contact · QECTOR",description:"Contact QECTOR · commercial inquiries, technical support questions, and evaluation requests."}),e.jsx(g,{data:{"@context":"https://schema.org","@type":"ContactPage",name:"Contact QECTOR",description:"Commercial inquiries, technical support, and evaluation requests for QECTOR.",url:"https://qector.store/contact",mainEntity:{"@type":"Organization",name:"QECTOR",url:"https://qector.store",email:"mailto:admin@qector.store",sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-decoder"]}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"admin@qector.store - Mon-Fri EST/EDT"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Contact Us"}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-8",children:[e.jsxs("div",{ref:s=>c(s,0),className:"lg:col-span-2 space-y-4",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Office"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR is developed by iD01t Productions.",e.jsx("br",{}),"Primary contact: Guillaume Lessard.",e.jsx("br",{}),"Email: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Working Hours"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Monday - Friday: 09:00-17:00 EST/EDT",e.jsx("br",{}),"Saturday - Sunday: Closed"]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-primary font-semibold mb-2",children:"Links"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(j,{to:"/guillaume-lessard",className:"text-cyan-300 text-sm hover:underline",children:"About Guillaume Lessard"}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://www.linkedin.com/in/qector/",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["LinkedIn",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm hover:underline",children:["QEC Book",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsx("div",{className:"p-4 bg-green-400/5 border border-green-400/20 rounded-xl",children:e.jsxs("p",{className:"text-green-400 text-sm font-semibold flex items-center gap-2",children:[e.jsx(v,{size:14,className:"shrink-0","aria-hidden":"true"})," Response time: 1 business day for commercial inquiries."]})})]}),e.jsx("div",{ref:s=>c(s,1),className:"lg:col-span-3",children:e.jsx("div",{className:"card-surface",children:i?e.jsxs("div",{className:"text-center py-12",role:"status","aria-live":"polite",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-400/10 border border-green-400/20 flex items-center justify-center mx-auto mb-4",children:e.jsx("span",{className:"text-green-400 text-2xl","aria-hidden":"true",children:"✓"})}),e.jsx("h2",{className:"text-primary font-bold text-xl mb-2",children:i==="sent"?"Message Sent":"Email Draft Opened"}),e.jsx("p",{className:"text-secondary",children:i==="sent"?"We will get back to you within one business day.":"Your email client should contain the completed inquiry. If it did not open, email admin@qector.store directly."})]}):e.jsxs("form",{onSubmit:x,method:"POST",className:"space-y-5",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-name",className:"block text-secondary text-sm mb-2",children:["Full Name ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-name",name:"name",type:"text",required:!0,autoComplete:"name",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Your name"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-email",className:"block text-secondary text-sm mb-2",children:["Email Address ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("input",{id:"contact-email",name:"email",type:"email",required:!0,autoComplete:"email",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"you@company.com"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-org",className:"block text-secondary text-sm mb-2",children:"Organization / Affiliation"}),e.jsx("input",{id:"contact-org",name:"organization",type:"text",autoComplete:"organization",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",placeholder:"Company or Institution"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-referral",className:"block text-secondary text-sm mb-2",children:"Referral Source"}),e.jsxs("select",{id:"contact-referral",name:"referral",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"Web search"}),e.jsx("option",{children:"Social media"}),e.jsx("option",{children:"Conference / event"}),e.jsx("option",{children:"Publication / DOI"}),e.jsx("option",{children:"Recommendation"}),e.jsx("option",{children:"Other"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"contact-timeline",className:"block text-secondary text-sm mb-2",children:"Evaluation Timeline"}),e.jsxs("select",{id:"contact-timeline",name:"timeline",className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors",children:[e.jsx("option",{value:"",children:"- Select -"}),e.jsx("option",{children:"0-30 days"}),e.jsx("option",{children:"30-90 days"}),e.jsx("option",{children:"90+ days"}),e.jsx("option",{children:"Undecided"})]})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"contact-message",className:"block text-secondary text-sm mb-2",children:["Message ",e.jsx("span",{className:"text-cyan-300",children:"*"})]}),e.jsx("textarea",{id:"contact-message",name:"message",required:!0,rows:6,className:"w-full px-4 py-3 bg-void border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors resize-y",placeholder:"Tell us about your interest in QECTOR and evaluation needs..."})]}),l&&e.jsx("p",{className:"text-red-400 text-sm",role:"alert",children:l}),e.jsx("button",{type:"submit",className:"btn-gold w-full py-3",children:"Send Message"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"By submitting this form, you agree to the processing of your contact data to respond to your inquiry. We do not share submission contents with third parties."})]})})})]}),e.jsxs("div",{className:"max-w-4xl mx-auto mt-16",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2 text-center",children:"Book a 30-minute call"}),e.jsx("p",{className:"text-secondary text-sm mb-6 text-center",children:"Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard."}),e.jsx(y,{url:b})]})]})})]})}export{T as default}; diff --git a/assets/Decoder-4z-vTL16.js b/assets/Decoder-4z-vTL16.js deleted file mode 100644 index 6f4e6e14..00000000 --- a/assets/Decoder-4z-vTL16.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-BcbVjARk.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-8BkZ7FyC.js b/assets/Decoder-8BkZ7FyC.js deleted file mode 100644 index 9da05728..00000000 --- a/assets/Decoder-8BkZ7FyC.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-abfjMTlQ.js";import{N as v}from"./NeuralReveal-D-EQoOl2.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-B0aQK11-.js b/assets/Decoder-B0aQK11-.js deleted file mode 100644 index 2b95a75c..00000000 --- a/assets/Decoder-B0aQK11-.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-Bh9DBCb3.js";import{N as v}from"./NeuralReveal-D-EQoOl2.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-BP_OA76u.js b/assets/Decoder-BP_OA76u.js deleted file mode 100644 index aed7627b..00000000 --- a/assets/Decoder-BP_OA76u.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,L as i,a as f,A as l,E as y}from"./index-PdoH5kLF.js";import{N as v}from"./NeuralReveal-Bsl9IGCr.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-ui-B8TlNU4J.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function D(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{D as default}; diff --git a/assets/Decoder-BsiAkz2C.js b/assets/Decoder-BsiAkz2C.js deleted file mode 100644 index 0cacc238..00000000 --- a/assets/Decoder-BsiAkz2C.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-iVST85F-.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-CD04ckwI.js b/assets/Decoder-CD04ckwI.js deleted file mode 100644 index a52480f4..00000000 --- a/assets/Decoder-CD04ckwI.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-BN-vOeL2.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-CDV4Wz9P.js b/assets/Decoder-CDV4Wz9P.js deleted file mode 100644 index 15d9190d..00000000 --- a/assets/Decoder-CDV4Wz9P.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-WV1aysjN.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-Cp5PA7-h.js b/assets/Decoder-Cp5PA7-h.js deleted file mode 100644 index d0ffca08..00000000 --- a/assets/Decoder-Cp5PA7-h.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-_BpMZhV3.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-DH3zReVC.js b/assets/Decoder-DH3zReVC.js deleted file mode 100644 index 4d0b444f..00000000 --- a/assets/Decoder-DH3zReVC.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-CxWP17m6.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-DKEd4jAQ.js b/assets/Decoder-DKEd4jAQ.js deleted file mode 100644 index a78fa03a..00000000 --- a/assets/Decoder-DKEd4jAQ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-B9kEGiWi.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-DPFHpNvT.js b/assets/Decoder-DPFHpNvT.js deleted file mode 100644 index bc804cfe..00000000 --- a/assets/Decoder-DPFHpNvT.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,L as i,a as f,A as l,E as y}from"./index-DayaklK-.js";import{N as v}from"./NeuralReveal-uYarhiMA.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-ui-B8TlNU4J.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function D(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{D as default}; diff --git a/assets/Decoder-Daf_S4dz.js b/assets/Decoder-Daf_S4dz.js deleted file mode 100644 index 1c647b09..00000000 --- a/assets/Decoder-Daf_S4dz.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-DkYdPRY7.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-Esh1GsiS.js b/assets/Decoder-Esh1GsiS.js deleted file mode 100644 index 4fa9d3f6..00000000 --- a/assets/Decoder-Esh1GsiS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-BUYYSLdX.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-GMF7NEIt.js b/assets/Decoder-GMF7NEIt.js deleted file mode 100644 index b6f99747..00000000 --- a/assets/Decoder-GMF7NEIt.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-CpdATiEY.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-HV90mkf5.js b/assets/Decoder-HV90mkf5.js deleted file mode 100644 index 2da797e1..00000000 --- a/assets/Decoder-HV90mkf5.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-CqAA-ZXu.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-LpFGwXBi.js b/assets/Decoder-LpFGwXBi.js deleted file mode 100644 index 8c8d3369..00000000 --- a/assets/Decoder-LpFGwXBi.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,L as i,a as f,A as l,E as y}from"./index-CcwlvHYJ.js";import{N as v}from"./NeuralReveal-Bsl9IGCr.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-ui-B0ssGG4c.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function D(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{D as default}; diff --git a/assets/Decoder-biNq2b_R.js b/assets/Decoder-biNq2b_R.js deleted file mode 100644 index a3a8cbc9..00000000 --- a/assets/Decoder-biNq2b_R.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as e}from"./vendor-react-BiHfrq0e.js";import{u as l,S as m,J as h,L as s,a as p,A as d,E as u}from"./index-CCmwjNGU.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{M as x}from"./MetricCard-BJ0ePioZ.js";import{g as o,S as b}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-ui-B8TlNU4J.js";o.registerPlugin(b);function N(){const i=n.useRef([]),{version:c}=l();n.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=o.context(()=>{i.current.filter(Boolean).forEach(a=>{o.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(i.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware.",alternates:[{lang:"en",href:"https://qector.store/decoder/"},{lang:"fr",href:"https://qector.store/fr/decoder/"}]}),e.jsx(h,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:c,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",c," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(g,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(s,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(x,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(p,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(d,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(d,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(u,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(s,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(s,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{N as default}; diff --git a/assets/Decoder-c0PrhrVs.js b/assets/Decoder-c0PrhrVs.js deleted file mode 100644 index 98ea8188..00000000 --- a/assets/Decoder-c0PrhrVs.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,L as i,a as f,A as l,E as y}from"./index-c1PDYu0j.js";import{N as v}from"./NeuralReveal-uYarhiMA.js";import{g as n,S as w}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-ui-B8TlNU4J.js";function j({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:c=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${c}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${c}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}n.registerPlugin(w);function D(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{s.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.1 current stable release (18 wheels, Python 3.9-3.14) with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"18",desc:"Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.1",desc:"Stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(j,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.14 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{D as default}; diff --git a/assets/Decoder-s2E7Qqrc.js b/assets/Decoder-s2E7Qqrc.js deleted file mode 100644 index 518a7e5f..00000000 --- a/assets/Decoder-s2E7Qqrc.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-DRAXObZB.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/Decoder-tKogflLK.js b/assets/Decoder-tKogflLK.js deleted file mode 100644 index 8ce3c3f6..00000000 --- a/assets/Decoder-tKogflLK.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as d}from"./vendor-react-BiHfrq0e.js";import{u as g,S as x,J as b,a as f,A as l,E as y}from"./index-DlmjLVYe.js";import{N as v}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as j}from"./vendor-gsap-a3sj5zmn.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";function w({label:s,value:o,desc:t,icon:r,variant:a="default",centered:m=!1,className:n=""}){const p=a==="compact",h=a==="gold"?"text-gold-400":"text-green-400",u=m?"text-center":"";return o?e.jsxs("div",{className:`card-surface ${u} ${n}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:s}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:o}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:t})]}):e.jsxs("div",{className:`${p?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${n}`,children:[e.jsxs("div",{className:`${h} font-bold text-sm mb-2 flex items-center gap-2`,children:[r&&e.jsx("span",{"aria-hidden":"true",children:r}),e.jsx("span",{children:s})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t})]})}c.registerPlugin(j);function R(){const s=d.useRef([]),{version:o}=g();d.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=c.context(()=>{s.current.filter(Boolean).forEach(a=>{c.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{r.revert()}},[]);const t=(r,a)=>{r&&(s.current[a]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"QECTOR Decoder v3 · QEC Decoding for Python",description:"QECTOR Decoder v3 - 17 decoder configurations in a single Python library. v1.0.0 first stable release with API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points. A reproducible benchmark harness (qector bench) ships with the package for measuring on your own hardware."}),e.jsx(b,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"Poly-algorithmic quantum error correction decoder for Python with exact MWPM and Belief-Matching capabilities.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/decoder",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:o,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",o," (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(v,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.0 is the first stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/workbench",className:"btn-outline",children:"Free Workbench GUI"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Decoder Configs",value:"17",desc:"From exact MWPM to GPU batch, across documented stability tiers"},{label:"Binary Wheels",value:"15",desc:"Python 3.9-3.13 on Windows amd64, Linux x86_64, macOS arm64"},{label:"Stable API",value:"v1.0.0",desc:"First stable release with documented API stability tiers"},{label:"CI Test Suite",value:"Automated",desc:"Continuous validation and Stim comparison test suite on GitHub"}].map(r=>e.jsx(w,{label:r.label,value:r.value,desc:r.desc,centered:!0},r.label))}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsx(f,{align:"left",maxWidth:"max-w-none",heading:"Decoding Algorithms",description:"Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. v1.0.0 freezes the public API under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",className:"mb-6"}),e.jsx("h3",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Stable Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[{name:"Union-Find",tag:"Near-Linear",color:"green",desc:"Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed."},{name:"Fast Union-Find",tag:"Hot Path",color:"green",desc:"Optimized Union-Find hot path for low-latency offline simulation pipelines."},{name:"Blossom MWPM",tag:"Exact Reference",color:"gold",desc:"Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes."},{name:"CPU & GPU Batch Decoder",tag:"Parallel",color:"gold",desc:'Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.'}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:r.color},desc:r.desc},r.name))}),e.jsx("h3",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Experimental & Research Decoders"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"BP-OSD",tag:"qLDPC Research",color:"purple",desc:"Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping."},{name:"Belief-Matching",tag:"Correlated Noise",color:"cyan",desc:"BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios."},{name:"Sparse Blossom",tag:"Near-Optimal",color:"gold",desc:"Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0."},{name:"Hybrid & AutoDecoder",tag:"Adaptive Routing",color:"cyan",desc:"AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties."},{name:"Lookup-Table Decoder",tag:"Small Codes",color:"gold",desc:"Precomputed correction table for small codes or syndrome subspaces."},{name:"Colour Code / Two-Stage / Ambiguity-Cluster",tag:"Research",color:"purple",desc:"New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder."}].map(r=>e.jsx(l,{title:r.name,badge:{label:r.tag,color:"gold"},desc:r.desc,muted:!0},r.name))})]}),e.jsxs("div",{ref:r=>t(r,2),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Technical Specifications"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[["Languages","Rust core (PyO3) / Python 3.9-3.13 API"],["Platforms","Linux x86_64, macOS arm64, Windows amd64"],["GPU","CUDA / OpenCL batch paths (supported configurations per package docs)"],["QEC Library","Stim (quantum-circuit noise simulation)"],["Packaging","PyPI binary wheels (manylinux, macOS, Windows)"],["License","PolyForm Noncommercial 1.0.0 (community) / Commercial"],["Validation","GitHub: github.com/GuillaumeLessard/qector-decoder"]].map(([r,a])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:r}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:a})]},r))})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx(y,{title:"Validation Status",statement:"v1.0.0 (2026-08-06) is the first stable release. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts and Harness →"}),e.jsx("div",{className:"flex flex-wrap gap-4 mt-3 px-1",children:e.jsx(i,{to:"/evidence",className:"text-cyan-300 text-sm hover:underline",children:"Evidence and Reports →"})})]}),e.jsx("div",{ref:r=>t(r,4),className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(i,{to:"/commercial",className:"btn-gold",children:"Start Commercial Evaluation"})]})})]})})]})}export{R as default}; diff --git a/assets/DecoderFR-DlRe5BDF.js b/assets/DecoderFR-DlRe5BDF.js deleted file mode 100644 index 43b75b20..00000000 --- a/assets/DecoderFR-DlRe5BDF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as o,S as c,J as n,L as a,a as l,A as r,E as d}from"./index-CCmwjNGU.js";import{N as u}from"./NeuralReveal-uYarhiMA.js";import{M as m}from"./MetricCard-BJ0ePioZ.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const p=[{name:"Union-Find",tag:"Quasi linéaire",color:"green",desc:"Décodeur approché en temps quasi linéaire. L’option à haut débit pour les codes de type graphe : un peu moins précis, beaucoup plus rapide."},{name:"Fast Union-Find",tag:"Chemin rapide",color:"green",desc:"Chemin Union-Find optimisé pour les pipelines de simulation hors ligne à faible latence."},{name:"Blossom MWPM",tag:"Référence exacte",color:"gold",desc:"Couplage parfait de poids minimal exact pour les codes de type graphe. Le décodeur de référence des codes de surface."},{name:"Décodage par lots CPU et GPU",tag:"Parallèle",color:"gold",desc:'Décodage par lots natif CUDA / OpenCL pour les charges prises en charge. Le débit dépend du matériel et de la taille des lots; CUDA accepte edge_weights et precision="f64" depuis la v1.0.0.'}],g=[{name:"BP-OSD",tag:"Recherche qLDPC",desc:"Propagation de croyance + décodage par statistiques ordonnées. La v1.0.0 ajoute les ordonnancements Relay-BP, CS-OSD(lambda, w) et l’amortissement des LLR."},{name:"Belief-Matching",tag:"Bruit corrélé",desc:"Prétraitement BP + MWPM exact repondéré. Voie de recherche pour le bruit corrélé."},{name:"Sparse Blossom",tag:"Quasi optimal",desc:"Variante blossom par croissance de régions pour les graphes de détecteurs. Chemin sans allocation depuis la v1.0.0."},{name:"Hybrid et AutoDecoder",tag:"Routage adaptatif",desc:"AutoDecoder et HybridDecoder choisissent entre Union-Find et Blossom selon les propriétés du code."},{name:"Décodeur à table",tag:"Petits codes",desc:"Table de corrections précalculée pour les petits codes ou des sous-espaces de syndromes."},{name:"Code couleur / Deux étapes / Grappes d’ambiguïté",tag:"Recherche",desc:"Familles ajoutées en v1.0.0 : ColourCodeDecoder (cluster_bposd optionnel), TwoStageDecoder, AmbiguityClusterDecoder."}],h=[["Langages","Noyau Rust (PyO3) / API Python 3.9 à 3.14"],["Plateformes","Linux x86_64, macOS arm64, Windows amd64"],["GPU","Chemins par lots CUDA / OpenCL (configurations prises en charge selon la documentation)"],["Bibliothèque QEC","Stim (simulation de bruit sur circuits quantiques)"],["Distribution","Roues binaires PyPI (manylinux, macOS, Windows)"],["Licence","PolyForm Noncommercial 1.0.0 (communauté) / commerciale"],["Validation","GitHub : github.com/GuillaumeLessard/qector-decoder"]];function P(){const{version:t}=o();return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"QECTOR Decoder v3 · Décodage QEC pour Python",description:"QECTOR Decoder v3 : 17 configurations de décodeurs dans une seule bibliothèque Python. Version stable 1.0.1 (18 roues, Python 3.9 à 3.14), paliers de stabilité d’API, Relay-BP, CS-OSD, Sinter et qiskit, et le banc d’essai qector bench.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/decoder/"},{lang:"fr",href:"https://qector.store/fr/decoder/"}]}),e.jsx(n,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Decoder v3",inLanguage:"fr",description:"Décodeur polyalgorithmique de correction d’erreurs quantiques pour Python, avec MWPM exact et Belief-Matching.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/fr/decoder/",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:t,offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"eyebrow-pill mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300 animate-pulse-dot"}),"v",t," (code source disponible) · Workbench gratuit"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(u,{text:"QECTOR Decoder v3",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["Bibliothèque Python à noyau Rust offrant 17 configurations de décodeurs, du MWPM exact au décodage GPU par lots. La v1.0.1 est la version stable actuelle : paliers de stabilité d’API, Relay-BP et CS-OSD, points d’entrée Sinter et qiskit, et l’outil en ligne de commande qector, avec une provenance de compilation pour chaque roue. Le banc d’essai reproductible qector bench est inclus pour mesurer sur votre propre matériel. Compatible Stim, roues binaires sur PyPI, artefacts publiés sur"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"GitHub"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(a,{to:"/fr/pricing",className:"btn-outline",children:"Voir les forfaits"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[{label:"Configurations",value:"17",desc:"Du MWPM exact au GPU par lots, selon des paliers de stabilité documentés"},{label:"Roues binaires",value:"18",desc:"Python 3.9 à 3.14 sur Windows amd64, Linux x86_64 et macOS arm64"},{label:"API stable",value:"v1.0.1",desc:"Version stable avec paliers de stabilité d’API documentés"},{label:"Tests CI",value:"Automatisés",desc:"Validation continue et comparaison avec Stim sur GitHub"}].map(s=>e.jsx(m,{label:s.label,value:s.value,desc:s.desc,centered:!0},s.label))}),e.jsxs("div",{children:[e.jsx(l,{align:"left",maxWidth:"max-w-none",heading:"Algorithmes de décodage",description:"Décodeurs stables avec artefacts de validation sur GitHub; les décodeurs expérimentaux sont au stade de la recherche. Depuis la v1.0.0, l’API publique est figée selon des paliers de stabilité documentés. Aucun chiffre de performance universel n’est publié : mesurez sur votre matériel avec qector bench.",className:"mb-6"}),e.jsx("h2",{className:"text-xs font-semibold text-cyan-300 uppercase tracking-widest mb-3",children:"Décodeurs stables"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:p.map(s=>e.jsx(r,{title:s.name,badge:{label:s.tag,color:s.color},desc:s.desc},s.name))}),e.jsx("h2",{className:"text-xs font-semibold text-gold-400 uppercase tracking-widest mb-3",children:"Décodeurs expérimentaux et de recherche"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:g.map(s=>e.jsx(r,{title:s.name,badge:{label:s.tag,color:"gold"},desc:s.desc,muted:!0},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4",children:"Caractéristiques techniques"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:h.map(([s,i])=>e.jsxs("div",{className:"flex gap-3",children:[e.jsx("span",{className:"text-muted-foreground text-sm min-w-[140px] shrink-0",children:s}),e.jsx("span",{className:"text-secondary text-sm min-w-0 break-words",children:i})]},s))})]}),e.jsxs("div",{children:[e.jsx(d,{title:"État de la validation",statement:"La v1.0.0 (2026-08-06) a été la première version stable; la v1.0.1 (2026-11-06) est la version actuelle. Chaque décodage est vérifié contre son syndrome (H·c = s) et les manifestes d’artefacts sont scellés par SHA-256 sur GitHub. Aucun chiffre de performance universel n’est publié; qector bench est inclus pour mesurer sur votre matériel.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"Artefacts et banc d’essai sur GitHub →"}),e.jsxs("p",{className:"text-sm mt-3 px-1",children:[e.jsx(a,{to:"/decoder",hrefLang:"en",lang:"en",className:"text-cyan-300 hover:underline",children:"Detailed English page"}),e.jsx("span",{className:"text-muted-foreground",children:" · "}),e.jsx(a,{to:"/getting-started",hrefLang:"en",className:"text-cyan-300 hover:underline",children:"Tutoriel (en anglais)"})]})]}),e.jsx("div",{className:"text-center py-8",children:e.jsxs("div",{className:"inline-flex flex-wrap gap-4 justify-center",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"pip install qector-decoder-v3"}),e.jsx(a,{to:"/fr/license",className:"btn-gold",children:"Licences commerciales"})]})})]})})]})}export{P as default}; diff --git a/assets/Docs-B3K5DZpI.js b/assets/Docs-B3K5DZpI.js deleted file mode 100644 index 3957ec1f..00000000 --- a/assets/Docs-B3K5DZpI.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-CpdATiEY.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-BF06L5iZ.js b/assets/Docs-BF06L5iZ.js deleted file mode 100644 index aef60a08..00000000 --- a/assets/Docs-BF06L5iZ.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-WV1aysjN.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-BVov2Mkr.js b/assets/Docs-BVov2Mkr.js deleted file mode 100644 index 1d145317..00000000 --- a/assets/Docs-BVov2Mkr.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-DRAXObZB.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-Bm6ILkhb.js b/assets/Docs-Bm6ILkhb.js deleted file mode 100644 index 259768e7..00000000 --- a/assets/Docs-Bm6ILkhb.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-CxWP17m6.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-C271TpRb.js b/assets/Docs-C271TpRb.js deleted file mode 100644 index 3ecab1da..00000000 --- a/assets/Docs-C271TpRb.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as a}from"./index-PdoH5kLF.js";import{N as d}from"./NeuralReveal-Bsl9IGCr.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{F as m,P as h,t as u}from"./vendor-ui-B8TlNU4J.js";i.registerPlugin(x);function j(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{j as default}; diff --git a/assets/Docs-CEW0_2Sk.js b/assets/Docs-CEW0_2Sk.js deleted file mode 100644 index 500fc2de..00000000 --- a/assets/Docs-CEW0_2Sk.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-_BpMZhV3.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-CEpRVtVA.js b/assets/Docs-CEpRVtVA.js deleted file mode 100644 index b9dbabe6..00000000 --- a/assets/Docs-CEpRVtVA.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-abfjMTlQ.js";import{N as d}from"./NeuralReveal-D-EQoOl2.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-CGoJVEyR.js b/assets/Docs-CGoJVEyR.js deleted file mode 100644 index 509e2a62..00000000 --- a/assets/Docs-CGoJVEyR.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as a}from"./index-c1PDYu0j.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{F as m,P as h,t as u}from"./vendor-ui-B8TlNU4J.js";i.registerPlugin(x);function j(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{j as default}; diff --git a/assets/Docs-CVIyARKv.js b/assets/Docs-CVIyARKv.js deleted file mode 100644 index b903d31a..00000000 --- a/assets/Docs-CVIyARKv.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-CqAA-ZXu.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-CXj_11_o.js b/assets/Docs-CXj_11_o.js deleted file mode 100644 index 28929667..00000000 --- a/assets/Docs-CXj_11_o.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as a}from"./index-CcwlvHYJ.js";import{N as d}from"./NeuralReveal-Bsl9IGCr.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";i.registerPlugin(x);function j(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{j as default}; diff --git a/assets/Docs-CbxYbU8R.js b/assets/Docs-CbxYbU8R.js deleted file mode 100644 index d9cbf49e..00000000 --- a/assets/Docs-CbxYbU8R.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-BcbVjARk.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-ChCtVg9x.js b/assets/Docs-ChCtVg9x.js deleted file mode 100644 index 5f24cefb..00000000 --- a/assets/Docs-ChCtVg9x.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as a}from"./index-DayaklK-.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{F as m,P as h,t as u}from"./vendor-ui-B8TlNU4J.js";i.registerPlugin(x);function j(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{j as default}; diff --git a/assets/Docs-CxH1-v5C.js b/assets/Docs-CxH1-v5C.js deleted file mode 100644 index cf9a5b11..00000000 --- a/assets/Docs-CxH1-v5C.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-DlmjLVYe.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-D2qi4UVs.js b/assets/Docs-D2qi4UVs.js deleted file mode 100644 index d76d6758..00000000 --- a/assets/Docs-D2qi4UVs.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-B9kEGiWi.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-DA36t10x.js b/assets/Docs-DA36t10x.js deleted file mode 100644 index 384d6293..00000000 --- a/assets/Docs-DA36t10x.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-BUYYSLdX.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-D_KRdt5F.js b/assets/Docs-D_KRdt5F.js deleted file mode 100644 index df4d9033..00000000 --- a/assets/Docs-D_KRdt5F.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-BN-vOeL2.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-Di4dBc5W.js b/assets/Docs-Di4dBc5W.js deleted file mode 100644 index 4d7cd341..00000000 --- a/assets/Docs-Di4dBc5W.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-iVST85F-.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v1.0.6: 28 skills, 5 agents, four MCP servers, and explicit local tool profiles",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.0)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.13 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-Do1RRZu3.js b/assets/Docs-Do1RRZu3.js deleted file mode 100644 index 7ff61401..00000000 --- a/assets/Docs-Do1RRZu3.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as a}from"./index-CCmwjNGU.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{F as m,P as h,t as u}from"./vendor-ui-B8TlNU4J.js";i.registerPlugin(x);function j(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{j as default}; diff --git a/assets/Docs-KUXBA0rX.js b/assets/Docs-KUXBA0rX.js deleted file mode 100644 index 1177ef8b..00000000 --- a/assets/Docs-KUXBA0rX.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-Bh9DBCb3.js";import{N as d}from"./NeuralReveal-D-EQoOl2.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Docs-j61tlEUv.js b/assets/Docs-j61tlEUv.js deleted file mode 100644 index 06e0b598..00000000 --- a/assets/Docs-j61tlEUv.js +++ /dev/null @@ -1 +0,0 @@ -import{r as l,j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-DkYdPRY7.js";import{N as d}from"./NeuralReveal-BflyZYSb.js";import{g as i,S as x}from"./vendor-gsap-a3sj5zmn.js";import{L as a}from"./vendor-PiU4YGcH.js";import{F as m,P as h,t as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";i.registerPlugin(x);function y(){const n=l.useRef([]);l.useEffect(()=>{const t=i.context(()=>{n.current.filter(Boolean).forEach(r=>{i.fromTo(r,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:r,start:"top 85%",once:!0}})})});return()=>{t.revert()}},[]);const s=(t,r)=>{t&&(n.current[r]=t)},o=[{title:"Claude Code Plugin",desc:"v2.0.1: 28 skills, 5 agents, air-gapped qector-secure server with 12 schema-validated tools",href:"/claude-plugin"},{title:"Workbench (Win / Linux)",desc:"Free desktop GUI with an 85-tool MCP server, v1.0.7 on Windows/Linux",href:"/workbench"},{title:"MCP Server",desc:"App-free local library MCP server exposing 8 local tools",href:"/mcp-server"},{title:"Technical Reference",desc:"API documentation, decoder parameters, code examples",href:"/technical-reference"},{title:"User Manual",desc:"Installation, configuration, workflow guides",href:"/manual"},{title:"Package Reference (v1.0.1)",desc:"Extended reference manual for qector-decoder-v3 Python package",href:"/docs/reference.md"},{title:"Installation Guide",desc:"Platform-specific setup instructions",href:"/installer"},{title:"Evidence & Reports",desc:"Six-record Zenodo registry, validation artifacts and reproducibility data",href:"/evidence"},{title:"Changelog",desc:"Version history and release notes",href:"/changelog"}];return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Documentation · QECTOR",description:"Documentation hub for QECTOR quantum error correction decoder. API reference, user manual, installation guides, and validation reports."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Python 3.9-3.14 · Linux · macOS · Windows"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Documentation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:"Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible."}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8",children:[e.jsxs("div",{ref:t=>s(t,0),className:"card-surface text-center",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Quick Install"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground inline-block text-left",children:"pip install qector-decoder-v3"}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-3 justify-center",children:[e.jsx(a,{to:"/installer",className:"btn-outline text-sm",children:"Full Installation Guide"}),e.jsx(a,{to:"/manual",className:"btn-outline text-sm",children:"User Manual"})]})]}),e.jsx("div",{ref:t=>s(t,1),className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:o.map(t=>t.href.startsWith("/docs/")?e.jsxs("a",{href:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title):e.jsxs(a,{to:t.href,className:"card-surface group hover:border-cyan-300/30 transition-all",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold group-hover:text-cyan-200 transition-colors mb-1",children:t.title}),e.jsx("p",{className:"text-secondary text-sm",children:t.desc})]},t.title))}),e.jsxs("div",{ref:t=>s(t,2),className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"External Resources"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(m,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Repository"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Source code, issues, and contributions"})]})]}),e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(h,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"PyPI Package"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"Latest release and installation"})]})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 p-3 bg-void rounded-xl hover:bg-surface transition-colors",children:[e.jsx("span",{className:"shrink-0",children:e.jsx(u,{className:"h-5 w-5 text-cyan-300","aria-hidden":"true"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-primary font-medium text-sm",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-xs",children:"github.com/GuillaumeLessard/qector-decoder"})]})]})]})]})]})})]})}export{y as default}; diff --git a/assets/Evidence-0j0vQPZW.js b/assets/Evidence-0j0vQPZW.js deleted file mode 100644 index 66a2265a..00000000 --- a/assets/Evidence-0j0vQPZW.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,L as o,A as x,C as h,E as u}from"./index-DayaklK-.js";import{N as p}from"./NeuralReveal-uYarhiMA.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases--9GgxpSb.js";import{o as b,p as v,E as y,L as j}from"./vendor-ui-B8TlNU4J.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function O(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{O as default}; diff --git a/assets/Evidence-B1mKE-cg.js b/assets/Evidence-B1mKE-cg.js deleted file mode 100644 index ad35133d..00000000 --- a/assets/Evidence-B1mKE-cg.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-DkYdPRY7.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-1-HBloZv.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-B6pxWHub.js b/assets/Evidence-B6pxWHub.js deleted file mode 100644 index 5338c7e7..00000000 --- a/assets/Evidence-B6pxWHub.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-CxWP17m6.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-1-HBloZv.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-BF-nkrsP.js b/assets/Evidence-BF-nkrsP.js deleted file mode 100644 index a88b2df3..00000000 --- a/assets/Evidence-BF-nkrsP.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-DlmjLVYe.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-Bj6L0ipY.js b/assets/Evidence-Bj6L0ipY.js deleted file mode 100644 index bf4ef708..00000000 --- a/assets/Evidence-Bj6L0ipY.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-BN-vOeL2.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-BtzcgP8e.js b/assets/Evidence-BtzcgP8e.js deleted file mode 100644 index fb1243ff..00000000 --- a/assets/Evidence-BtzcgP8e.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,L as o,A as x,C as h,E as u}from"./index-PdoH5kLF.js";import{N as p}from"./NeuralReveal-Bsl9IGCr.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-1-HBloZv.js";import{o as b,p as v,E as y,L as j}from"./vendor-ui-B8TlNU4J.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function O(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{O as default}; diff --git a/assets/Evidence-BwlSEt0X.js b/assets/Evidence-BwlSEt0X.js deleted file mode 100644 index 7a1ecfb0..00000000 --- a/assets/Evidence-BwlSEt0X.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-Bh9DBCb3.js";import{N as p}from"./NeuralReveal-D-EQoOl2.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-1-HBloZv.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-C-hSXMLq.js b/assets/Evidence-C-hSXMLq.js deleted file mode 100644 index 1773a576..00000000 --- a/assets/Evidence-C-hSXMLq.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,L as o,A as x,C as h,E as u}from"./index-CCmwjNGU.js";import{N as p}from"./NeuralReveal-uYarhiMA.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases--9GgxpSb.js";import{o as b,p as v,E as y,L as j}from"./vendor-ui-B8TlNU4J.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function O(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{O as default}; diff --git a/assets/Evidence-C7IJaw71.js b/assets/Evidence-C7IJaw71.js deleted file mode 100644 index 58c6004b..00000000 --- a/assets/Evidence-C7IJaw71.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-BcbVjARk.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as d}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),o=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(o.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(d,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(d,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install qector-decoder-v3==1.0.0 -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-C8yUP9My.js b/assets/Evidence-C8yUP9My.js deleted file mode 100644 index a780cda1..00000000 --- a/assets/Evidence-C8yUP9My.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-_BpMZhV3.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as d}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),o=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(o.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(d,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(d,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install qector-decoder-v3==1.0.0 -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-CiRnbh9a.js b/assets/Evidence-CiRnbh9a.js deleted file mode 100644 index 41d9b2a0..00000000 --- a/assets/Evidence-CiRnbh9a.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-BUYYSLdX.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-1-HBloZv.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-Cjd1QxOO.js b/assets/Evidence-Cjd1QxOO.js deleted file mode 100644 index 592a7270..00000000 --- a/assets/Evidence-Cjd1QxOO.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-B9kEGiWi.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as d}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),o=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(o.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(d,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(d,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install qector-decoder-v3==1.0.0 -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-CvTRADgN.js b/assets/Evidence-CvTRADgN.js deleted file mode 100644 index 2e009939..00000000 --- a/assets/Evidence-CvTRADgN.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,L as o,A as x,C as h,E as u}from"./index-c1PDYu0j.js";import{N as p}from"./NeuralReveal-uYarhiMA.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases--9GgxpSb.js";import{o as b,p as v,E as y,L as j}from"./vendor-ui-B8TlNU4J.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function O(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{O as default}; diff --git a/assets/Evidence-Cxt9JaAV.js b/assets/Evidence-Cxt9JaAV.js deleted file mode 100644 index d2bba82f..00000000 --- a/assets/Evidence-Cxt9JaAV.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-CqAA-ZXu.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-D6-z-CP3.js b/assets/Evidence-D6-z-CP3.js deleted file mode 100644 index 01423f31..00000000 --- a/assets/Evidence-D6-z-CP3.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-CpdATiEY.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-D6bfHitX.js b/assets/Evidence-D6bfHitX.js deleted file mode 100644 index 421816d0..00000000 --- a/assets/Evidence-D6bfHitX.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-DRAXObZB.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-DQH9lAmJ.js b/assets/Evidence-DQH9lAmJ.js deleted file mode 100644 index 3ee4d135..00000000 --- a/assets/Evidence-DQH9lAmJ.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,L as o,A as x,C as h,E as u}from"./index-CcwlvHYJ.js";import{N as p}from"./NeuralReveal-Bsl9IGCr.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-1-HBloZv.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function O(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{O as default}; diff --git a/assets/Evidence-DyzDVZBl.js b/assets/Evidence-DyzDVZBl.js deleted file mode 100644 index cac14b9c..00000000 --- a/assets/Evidence-DyzDVZBl.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-abfjMTlQ.js";import{N as p}from"./NeuralReveal-D-EQoOl2.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-1-HBloZv.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# environment diagnostic -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.1}, - url = {https://qector.store/}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-Ls2E646e.js b/assets/Evidence-Ls2E646e.js deleted file mode 100644 index 0d90500e..00000000 --- a/assets/Evidence-Ls2E646e.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-iVST85F-.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as d}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),o=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{o.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(o.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(d,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(d,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install qector-decoder-v3==1.0.0 -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Evidence-bSRMW5HI.js b/assets/Evidence-bSRMW5HI.js deleted file mode 100644 index f86a54c4..00000000 --- a/assets/Evidence-bSRMW5HI.js +++ /dev/null @@ -1,14 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,A as x,C as h,E as u}from"./index-WV1aysjN.js";import{N as p}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as f}from"./vendor-gsap-a3sj5zmn.js";import{Z as g}from"./releases-DiQz_IDu.js";import{L as o}from"./vendor-PiU4YGcH.js";import{p as b,q as v,E as y,L as j}from"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(f);const N=[{title:"Official User Manual v1.0.0",desc:"QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.",status:"Verified"},{title:"SHA-256 Sealed Artifact Manifests",desc:"Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.",status:"Verified"},{title:"Syndromic Validation Harness",desc:"Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.",status:"Verified"},{title:"Scoped Methodology and Limitations",desc:"The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.",status:"Methodology"}];function C(){const[t,c]=i.useState("All"),d=i.useRef([]);i.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=n.context(()=>{d.current.filter(Boolean).forEach(a=>{n.fromTo(a,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:a,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const r=(s,a)=>{s&&(d.current[a]=s)},l=N.filter(s=>t==="All"||s.status===t);return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Evidence & Reports · QECTOR",description:"Validation reports, reproducible artifacts, and evidence bundles for QECTOR quantum error correction decoder. Available on GitHub."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-green-400/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-green-400/10 border border-green-400/20 rounded-full text-xs font-semibold text-green-400 uppercase tracking-wider mb-6",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse-dot"}),"Verified v1.0.0 Manual · SHA-256 Sealed Manifests"]}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(p,{text:"Evidence & Reports",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:"Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"GitHub Repository →"}),e.jsx(o,{to:"/technical-reference",className:"btn-outline",children:"Technical Reference"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-12",children:[e.jsxs("div",{ref:s=>r(s,0),className:"flex flex-wrap justify-center gap-4",children:[e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-3 px-8 py-4 bg-cyan-300/10 border border-cyan-300/20 rounded-2xl hover:bg-cyan-300/20 transition-all",children:[e.jsx(b,{className:"w-6 h-6 text-cyan-300","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold",children:"GitHub Artifacts & Validation"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"github.com/GuillaumeLessard/qector-decoder"})]})]}),e.jsxs("a",{href:"/docs/reference.md",className:"inline-flex items-center gap-3 px-8 py-4 bg-gold-400/10 border border-gold-400/20 rounded-2xl hover:bg-gold-400/20 transition-all",children:[e.jsx(v,{className:"w-6 h-6 text-gold-400","aria-hidden":"true"}),e.jsxs("div",{className:"text-left",children:[e.jsx("div",{className:"text-gold-400 font-semibold",children:"Official User Manual v1.0.0"}),e.jsx("div",{className:"text-muted-foreground text-sm",children:"qector.store/docs/reference.md"})]})]})]}),e.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-lg mx-auto",children:["All","Verified","Methodology"].map(s=>e.jsx("button",{"aria-pressed":t===s,onClick:()=>c(s),className:`px-4 py-2 text-xs font-semibold rounded-lg border transition-all duration-300 ${t===s?"bg-cyan-300 text-void border-cyan-300 shadow-[0_0_12px_rgba(103,232,249,0.35)]":"bg-[#0b1329]/40 text-secondary border-gridline hover:text-primary hover:border-cyan-300/40"}`,children:s},s))}),e.jsxs("div",{ref:s=>r(s,1),className:"space-y-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Evidence Reports"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:l.map(s=>e.jsx(x,{title:s.title,badge:{label:s.status,color:s.status==="Verified"?"green":"gold"},desc:s.desc},s.title))})]}),e.jsxs("div",{ref:s=>r(s,2),className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Zenodo Evidence Registry"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below."})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"DOI"}),e.jsx("th",{className:"py-3 px-3",children:"Scope"}),e.jsx("th",{className:"py-3 px-3 hidden md:table-cell",children:"Title"}),e.jsx("th",{className:"py-3 px-3",children:"Date"}),e.jsx("th",{className:"py-3 px-3",children:"Access"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:g.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3",children:e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-cyan-300 hover:underline inline-flex items-center gap-1",children:["10.5281/zenodo.",s.id,e.jsx(y,{className:"w-3 h-3","aria-hidden":"true"})]})}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.kindLabel}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs hidden md:table-cell",children:s.title}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs font-mono whitespace-nowrap",children:s.date}),e.jsx("td",{className:"py-3 px-3 text-xs whitespace-nowrap",children:s.access==="open"?e.jsx("span",{className:"text-green-400",children:"open"}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-gold-400",children:[e.jsx(j,{className:"w-3 h-3","aria-hidden":"true"})," embargoed"]})})]},s.id))})]})}),e.jsxs("p",{className:"text-muted-foreground text-xs leading-relaxed",children:["Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the"," ",e.jsx(o,{to:"/license",className:"text-cyan-300 hover:underline",children:"license page"}),". The embargoed record is restricted source custody and is not part of the public evidence set."]})]}),e.jsxs("div",{ref:s=>r(s,3),className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"Verify on Your Own Machine"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:"}),e.jsx(h,{language:"bash",code:`# Quick validation -pip install --upgrade "qector-decoder-v3>=1.0,<2" -python -c "import qector_decoder_v3 as qd; print(qd.__version__)" -# 15-check environment diagnostic (v1.0.0) -qector-doctor -# Throughput benchmark on a generated surface-code circuit -qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001`})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-3",children:"How to Cite QECTOR"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed mb-3",children:"If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:"}),e.jsx("pre",{className:"p-4 bg-void border border-gridline rounded-xl text-xs text-muted-foreground font-mono overflow-x-auto select-all",children:`@software{lessard2026qector, - author = {Guillaume Lessard}, - title = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform}, - year = {2026}, - version = {1.0.0}, - url = {https://www.qector.store}, - note = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.} -}`})]}),e.jsx(u,{title:"Our Transparency Commitment",statement:"We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics."})]})})]})}export{C as default}; diff --git a/assets/Founder-B-0BF051.js b/assets/Founder-B-0BF051.js deleted file mode 100644 index 21040b83..00000000 --- a/assets/Founder-B-0BF051.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as p,f as g,L as l}from"./index-c1PDYu0j.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{C as i,W as b,a}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const n="https://orcid.org/0009-0000-3465-3753",o="https://www.linkedin.com/in/qector/",h="https://github.com/GuillaumeLessard",r="https://pypi.org/project/qector-decoder-v3/",y=t=>new Date(`${t}T12:00:00Z`).toLocaleDateString("en-CA",{year:"numeric",month:"short",day:"numeric",timeZone:"UTC"}),c=a.find(t=>t.version==="1.0.1"),j=a.find(t=>t.version==="1.0.0"),m=a[a.length-1],s=b[0],v=[{title:"Decoders that prove their output",body:"A Rust core behind a Python API: Union-Find, exact MWPM, BP-OSD and Relay-BP for qLDPC codes, on CPU and GPU. Every correction is checked against its syndrome, H·c = s (mod 2)."},{title:"Releases you can verify",body:"Wheels built in public CI, tested on each operating system before publishing, with Sigstore provenance, PyPI attestations and Trusted Publishing."},{title:"Tools that stay offline",body:"Air-gapped licensing with Ed25519 tokens, a schema-validated MCP server for Claude, and a self-contained desktop Workbench."}],N=[{date:c.releaseDate,title:`QECTOR Decoder v3 ${c.version}`,detail:"18 wheels for CPython 3.9 to 3.14, tested per OS, Sigstore provenance on every file",href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1"},{date:i.releaseDate,title:`QECTOR Claude Plugin ${i.version}`,detail:"Air-gapped, schema-validated MCP server for Claude Code and Claude Desktop",href:i.releaseUrl},{date:s.releaseDate,title:`QECTOR Workbench ${s.version}`,detail:`Free desktop GUI for Windows and Linux, ${s.decoderKinds} decoder kinds, ${s.codeFamilies} code families`,href:s.releaseUrl},{date:j.releaseDate,title:"QECTOR Decoder v3 1.0.0",detail:"First stable release: API stability tiers, qector CLI, reference manual",href:r},{date:m.releaseDate,title:`First public release (${m.version})`,detail:`Published on PyPI; ${a.length} releases to date`,href:r}],P=[{title:"QECTOR Decoder v3 User Manual (v1.0.0)",doi:"10.5281/zenodo.21611214"},{title:"Normative Reference Manual (v1.0.0)",doi:"10.5281/zenodo.21941046"},{title:"Verification and Proof Bundle",doi:"10.5281/zenodo.22046403"}],k=[{area:"Quantum error correction",items:"MWPM and Blossom, Union-Find, BP-OSD and Relay-BP for qLDPC, detector error models, Stim and Sinter"},{area:"Systems",items:"Rust, PyO3, CUDA and OpenCL batch kernels, memory layout and throughput"},{area:"Python and release engineering",items:"Binary wheels for Linux, Windows and macOS, PyPI Trusted Publishing, Sigstore, supply-chain gates"},{area:"Tooling and product",items:"MCP servers, desktop apps, React and TypeScript, Stripe and licensing infrastructure"}],C=[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/GuillaumeLessard",h],["GitHub organisation","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3",r],["LinkedIn","linkedin.com/in/qector",o],["E-mail","admin@qector.store","mailto:admin@qector.store"]];function O(){return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Guillaume Lessard · Founder and Lead Engineer, QECTOR",description:"Guillaume Lessard, founder and lead engineer of QECTOR: Rust and Python quantum error correction decoders, verifiable releases and offline licensing. Longueuil, Québec. ORCID 0009-0000-3465-3753."}),e.jsx(p,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder and Lead Engineer, QECTOR",description:"Founder and lead engineer of QECTOR, a Rust and Python quantum error correction decoding platform. Founder of iD01t Productions.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard/",email:"admin@qector.store",address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2012",url:"https://qector.store/"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching","Belief propagation and OSD decoding","qLDPC codes","Rust","Python","GPU computing","Software supply-chain security"],sameAs:[n,h,"https://github.com/qectorlab",r,o,"https://id01t.itch.io/"]}}),e.jsxs("section",{className:"relative pt-32 pb-16 md:pt-36 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8 md:gap-10",children:[e.jsx("img",{src:"/assets/g.png",alt:"Guillaume Lessard",width:176,height:176,fetchPriority:"high",className:"w-44 h-44 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("p",{className:"text-cyan-300 text-sm font-semibold tracking-wide mb-2",children:"Founder and Lead Engineer, QECTOR"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.05] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-6 max-w-2xl",children:"I build quantum error correction decoders in Rust and Python, and the release and licensing infrastructure that lets teams trust them: corrections checked against their syndromes, wheels with verifiable provenance, and licences that work air-gapped. Based in Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-3",children:[e.jsx("a",{href:"#book",className:"btn-gold px-6 py-3 text-sm",children:"Book a call"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline px-6 py-3 text-sm",children:"admin@qector.store"}),e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"btn-outline px-6 py-3 text-sm",children:"LinkedIn"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-14",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"What I work on"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-5",children:v.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Track record"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Public releases, newest first. Each links to its release page."}),e.jsx("ol",{className:"relative border-l border-gridline ml-2 space-y-6",children:N.map(t=>e.jsxs("li",{className:"pl-6 relative",children:[e.jsx("span",{className:"absolute -left-[5px] top-1.5 w-2.5 h-2.5 rounded-full bg-cyan-300","aria-hidden":"true"}),e.jsx("time",{dateTime:t.date,className:"text-xs font-mono text-muted-foreground",children:y(t.date)}),e.jsx("h3",{className:"font-semibold text-primary",children:e.jsx("a",{href:t.href,target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300",children:t.title})}),e.jsx("p",{className:"text-secondary text-sm",children:t.detail})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Publications and records"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Manuals and verification material are archived with DOIs on Zenodo and linked to my"," ",e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"ORCID record"}),"."]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:P.map(t=>e.jsxs("a",{href:`https://doi.org/${t.doi}`,target:"_blank",rel:"noopener noreferrer",className:"card-surface block hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-primary font-semibold text-sm mb-2",children:t.title}),e.jsxs("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:["doi:",t.doi]})]},t.doi))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Expertise"}),e.jsx("dl",{className:"card-surface divide-y divide-gridline/60 !py-2",children:k.map(t=>e.jsxs("div",{className:"grid md:grid-cols-[14rem_1fr] gap-1 md:gap-6 py-4",children:[e.jsx("dt",{className:"text-primary font-semibold text-sm",children:t.area}),e.jsx("dd",{className:"text-secondary text-sm",children:t.items})]},t.area))})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"iD01t Productions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"I founded iD01t Productions in 2012 as an independent studio. It publishes technical books, desktop software and games, and electronic music. QECTOR is its quantum error correction line, built and supported by me directly, so you always deal with the person who wrote the code."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Verify my identity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"Several people share my name. For invoices, citations or due diligence, these are the identifiers I control:"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-2",children:C.map(([t,x,d])=>e.jsx("li",{children:e.jsxs("a",{href:d,...d?.startsWith("http")?{target:"_blank",rel:"noopener noreferrer"}:{},className:"block p-2.5 bg-void border border-gridline rounded-lg hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-[10px] uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:x})]})},t))})]})]}),e.jsxs("div",{id:"book",className:"card-surface scroll-mt-28",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["Decoder evaluation, integration, licensing or research collaboration: you will speak with me directly. Prefer e-mail?"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(f,{url:g})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(l,{to:"/decoder",className:"btn-cyan",children:"Explore the decoder"}),e.jsx(l,{to:"/pricing",className:"btn-outline",children:"Plans and licensing"})]})]})})]})}export{O as default}; diff --git a/assets/Founder-B-wRvSAc.js b/assets/Founder-B-wRvSAc.js deleted file mode 100644 index 2103f6da..00000000 --- a/assets/Founder-B-wRvSAc.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-DlmjLVYe.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-BJJh0MV8.js b/assets/Founder-BJJh0MV8.js deleted file mode 100644 index 153819a7..00000000 --- a/assets/Founder-BJJh0MV8.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-BN-vOeL2.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-BJk4p_3B.js b/assets/Founder-BJk4p_3B.js deleted file mode 100644 index 14145270..00000000 --- a/assets/Founder-BJk4p_3B.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,b as c}from"./index-_BpMZhV3.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3==1.0.0"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-BS0MLavi.js b/assets/Founder-BS0MLavi.js deleted file mode 100644 index 367e3535..00000000 --- a/assets/Founder-BS0MLavi.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-BUYYSLdX.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.14","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v2.0.1"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 (August 2026) as the first stable release and v1.0.1 as the current one (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v2.0.1 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v2.0.1",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-C0qDlV-3.js b/assets/Founder-C0qDlV-3.js deleted file mode 100644 index a799efd2..00000000 --- a/assets/Founder-C0qDlV-3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,b as c}from"./index-iVST85F-.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3==1.0.0"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-C30HSU2C.js b/assets/Founder-C30HSU2C.js deleted file mode 100644 index a43ea331..00000000 --- a/assets/Founder-C30HSU2C.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-Bh9DBCb3.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.14","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2012"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v2.0.1"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2012. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 (August 2026) as the first stable release and v1.0.1 as the current one (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v2.0.1 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v2.0.1",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-C5uaMuzf.js b/assets/Founder-C5uaMuzf.js deleted file mode 100644 index cf78dbc1..00000000 --- a/assets/Founder-C5uaMuzf.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as p,f as g,L as l}from"./index-PdoH5kLF.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{C as i,W as b,P as a}from"./releases-1-HBloZv.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const n="https://orcid.org/0009-0000-3465-3753",o="https://www.linkedin.com/in/qector/",h="https://github.com/GuillaumeLessard",r="https://pypi.org/project/qector-decoder-v3/",y=t=>new Date(`${t}T12:00:00Z`).toLocaleDateString("en-CA",{year:"numeric",month:"short",day:"numeric",timeZone:"UTC"}),c=a.find(t=>t.version==="1.0.1"),j=a.find(t=>t.version==="1.0.0"),m=a[a.length-1],s=b[0],v=[{title:"Decoders that prove their output",body:"A Rust core behind a Python API: Union-Find, exact MWPM, BP-OSD and Relay-BP for qLDPC codes, on CPU and GPU. Every correction is checked against its syndrome, H·c = s (mod 2)."},{title:"Releases you can verify",body:"Wheels built in public CI, tested on each operating system before publishing, with Sigstore provenance, PyPI attestations and Trusted Publishing."},{title:"Tools that stay offline",body:"Air-gapped licensing with Ed25519 tokens, a schema-validated MCP server for Claude, and a self-contained desktop Workbench."}],N=[{date:c.releaseDate,title:`QECTOR Decoder v3 ${c.version}`,detail:"18 wheels for CPython 3.9 to 3.14, tested per OS, Sigstore provenance on every file",href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1"},{date:i.releaseDate,title:`QECTOR Claude Plugin ${i.version}`,detail:"Air-gapped, schema-validated MCP server for Claude Code and Claude Desktop",href:i.releaseUrl},{date:s.releaseDate,title:`QECTOR Workbench ${s.version}`,detail:`Free desktop GUI for Windows and Linux, ${s.decoderKinds} decoder kinds, ${s.codeFamilies} code families`,href:s.releaseUrl},{date:j.releaseDate,title:"QECTOR Decoder v3 1.0.0",detail:"First stable release: API stability tiers, qector CLI, reference manual",href:r},{date:m.releaseDate,title:`First public release (${m.version})`,detail:`Published on PyPI; ${a.length} releases to date`,href:r}],P=[{title:"QECTOR Decoder v3 User Manual (v1.0.0)",doi:"10.5281/zenodo.21611214"},{title:"Normative Reference Manual (v1.0.0)",doi:"10.5281/zenodo.21941046"},{title:"Verification and Proof Bundle",doi:"10.5281/zenodo.22046403"}],k=[{area:"Quantum error correction",items:"MWPM and Blossom, Union-Find, BP-OSD and Relay-BP for qLDPC, detector error models, Stim and Sinter"},{area:"Systems",items:"Rust, PyO3, CUDA and OpenCL batch kernels, memory layout and throughput"},{area:"Python and release engineering",items:"Binary wheels for Linux, Windows and macOS, PyPI Trusted Publishing, Sigstore, supply-chain gates"},{area:"Tooling and product",items:"MCP servers, desktop apps, React and TypeScript, Stripe and licensing infrastructure"}],C=[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/GuillaumeLessard",h],["GitHub organisation","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3",r],["LinkedIn","linkedin.com/in/qector",o],["E-mail","admin@qector.store","mailto:admin@qector.store"]];function O(){return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Guillaume Lessard · Founder and Lead Engineer, QECTOR",description:"Guillaume Lessard, founder and lead engineer of QECTOR: Rust and Python quantum error correction decoders, verifiable releases and offline licensing. Longueuil, Québec. ORCID 0009-0000-3465-3753."}),e.jsx(p,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder and Lead Engineer, QECTOR",description:"Founder and lead engineer of QECTOR, a Rust and Python quantum error correction decoding platform. Founder of iD01t Productions.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard/",email:"admin@qector.store",address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2012",url:"https://qector.store/"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching","Belief propagation and OSD decoding","qLDPC codes","Rust","Python","GPU computing","Software supply-chain security"],sameAs:[n,h,"https://github.com/qectorlab",r,o,"https://id01t.itch.io/"]}}),e.jsxs("section",{className:"relative pt-32 pb-16 md:pt-36 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8 md:gap-10",children:[e.jsx("img",{src:"/assets/g.png",alt:"Guillaume Lessard",width:176,height:176,fetchPriority:"high",className:"w-44 h-44 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("p",{className:"text-cyan-300 text-sm font-semibold tracking-wide mb-2",children:"Founder and Lead Engineer, QECTOR"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.05] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-6 max-w-2xl",children:"I build quantum error correction decoders in Rust and Python, and the release and licensing infrastructure that lets teams trust them: corrections checked against their syndromes, wheels with verifiable provenance, and licences that work air-gapped. Based in Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-3",children:[e.jsx("a",{href:"#book",className:"btn-gold px-6 py-3 text-sm",children:"Book a call"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline px-6 py-3 text-sm",children:"admin@qector.store"}),e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"btn-outline px-6 py-3 text-sm",children:"LinkedIn"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-14",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"What I work on"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-5",children:v.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Track record"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Public releases, newest first. Each links to its release page."}),e.jsx("ol",{className:"relative border-l border-gridline ml-2 space-y-6",children:N.map(t=>e.jsxs("li",{className:"pl-6 relative",children:[e.jsx("span",{className:"absolute -left-[5px] top-1.5 w-2.5 h-2.5 rounded-full bg-cyan-300","aria-hidden":"true"}),e.jsx("time",{dateTime:t.date,className:"text-xs font-mono text-muted-foreground",children:y(t.date)}),e.jsx("h3",{className:"font-semibold text-primary",children:e.jsx("a",{href:t.href,target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300",children:t.title})}),e.jsx("p",{className:"text-secondary text-sm",children:t.detail})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Publications and records"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Manuals and verification material are archived with DOIs on Zenodo and linked to my"," ",e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"ORCID record"}),"."]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:P.map(t=>e.jsxs("a",{href:`https://doi.org/${t.doi}`,target:"_blank",rel:"noopener noreferrer",className:"card-surface block hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-primary font-semibold text-sm mb-2",children:t.title}),e.jsxs("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:["doi:",t.doi]})]},t.doi))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Expertise"}),e.jsx("dl",{className:"card-surface divide-y divide-gridline/60 !py-2",children:k.map(t=>e.jsxs("div",{className:"grid md:grid-cols-[14rem_1fr] gap-1 md:gap-6 py-4",children:[e.jsx("dt",{className:"text-primary font-semibold text-sm",children:t.area}),e.jsx("dd",{className:"text-secondary text-sm",children:t.items})]},t.area))})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"iD01t Productions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"I founded iD01t Productions in 2012 as an independent studio. It publishes technical books, desktop software and games, and electronic music. QECTOR is its quantum error correction line, built and supported by me directly, so you always deal with the person who wrote the code."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Verify my identity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"Several people share my name. For invoices, citations or due diligence, these are the identifiers I control:"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-2",children:C.map(([t,x,d])=>e.jsx("li",{children:e.jsxs("a",{href:d,...d?.startsWith("http")?{target:"_blank",rel:"noopener noreferrer"}:{},className:"block p-2.5 bg-void border border-gridline rounded-lg hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-[10px] uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:x})]})},t))})]})]}),e.jsxs("div",{id:"book",className:"card-surface scroll-mt-28",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["Decoder evaluation, integration, licensing or research collaboration: you will speak with me directly. Prefer e-mail?"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(f,{url:g})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(l,{to:"/decoder",className:"btn-cyan",children:"Explore the decoder"}),e.jsx(l,{to:"/pricing",className:"btn-outline",children:"Plans and licensing"})]})]})})]})}export{O as default}; diff --git a/assets/Founder-CuTYpFsD.js b/assets/Founder-CuTYpFsD.js deleted file mode 100644 index 40479b49..00000000 --- a/assets/Founder-CuTYpFsD.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,b as c}from"./index-BcbVjARk.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3==1.0.0"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-D-gWai07.js b/assets/Founder-D-gWai07.js deleted file mode 100644 index 13302aa6..00000000 --- a/assets/Founder-D-gWai07.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,L as t,f as c}from"./index-CcwlvHYJ.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.14","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2012"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v2.0.1"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2012. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 (August 2026) as the first stable release and v1.0.1 as the current one (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v2.0.1 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v2.0.1",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{y as default}; diff --git a/assets/Founder-D4bg94dW.js b/assets/Founder-D4bg94dW.js deleted file mode 100644 index bb212ad6..00000000 --- a/assets/Founder-D4bg94dW.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as p,f as g,L as l}from"./index-CCmwjNGU.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{C as i,W as b,a}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const n="https://orcid.org/0009-0000-3465-3753",o="https://www.linkedin.com/in/qector/",h="https://github.com/GuillaumeLessard",r="https://pypi.org/project/qector-decoder-v3/",y=t=>new Date(`${t}T12:00:00Z`).toLocaleDateString("en-CA",{year:"numeric",month:"short",day:"numeric",timeZone:"UTC"}),c=a.find(t=>t.version==="1.0.1"),j=a.find(t=>t.version==="1.0.0"),m=a[a.length-1],s=b[0],v=[{title:"Decoders that prove their output",body:"A Rust core behind a Python API: Union-Find, exact MWPM, BP-OSD and Relay-BP for qLDPC codes, on CPU and GPU. Every correction is checked against its syndrome, H·c = s (mod 2)."},{title:"Releases you can verify",body:"Wheels built in public CI, tested on each operating system before publishing, with Sigstore provenance, PyPI attestations and Trusted Publishing."},{title:"Tools that stay offline",body:"Air-gapped licensing with Ed25519 tokens, a schema-validated MCP server for Claude, and a self-contained desktop Workbench."}],N=[{date:c.releaseDate,title:`QECTOR Decoder v3 ${c.version}`,detail:"18 wheels for CPython 3.9 to 3.14, tested per OS, Sigstore provenance on every file",href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1"},{date:i.releaseDate,title:`QECTOR Claude Plugin ${i.version}`,detail:"Air-gapped, schema-validated MCP server for Claude Code and Claude Desktop",href:i.releaseUrl},{date:s.releaseDate,title:`QECTOR Workbench ${s.version}`,detail:`Free desktop GUI for Windows and Linux, ${s.decoderKinds} decoder kinds, ${s.codeFamilies} code families`,href:s.releaseUrl},{date:j.releaseDate,title:"QECTOR Decoder v3 1.0.0",detail:"First stable release: API stability tiers, qector CLI, reference manual",href:r},{date:m.releaseDate,title:`First public release (${m.version})`,detail:`Published on PyPI; ${a.length} releases to date`,href:r}],P=[{title:"QECTOR Decoder v3 User Manual (v1.0.0)",doi:"10.5281/zenodo.21611214"},{title:"Normative Reference Manual (v1.0.0)",doi:"10.5281/zenodo.21941046"},{title:"Verification and Proof Bundle",doi:"10.5281/zenodo.22046403"}],k=[{area:"Quantum error correction",items:"MWPM and Blossom, Union-Find, BP-OSD and Relay-BP for qLDPC, detector error models, Stim and Sinter"},{area:"Systems",items:"Rust, PyO3, CUDA and OpenCL batch kernels, memory layout and throughput"},{area:"Python and release engineering",items:"Binary wheels for Linux, Windows and macOS, PyPI Trusted Publishing, Sigstore, supply-chain gates"},{area:"Tooling and product",items:"MCP servers, desktop apps, React and TypeScript, Stripe and licensing infrastructure"}],C=[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/GuillaumeLessard",h],["GitHub organisation","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3",r],["LinkedIn","linkedin.com/in/qector",o],["E-mail","admin@qector.store","mailto:admin@qector.store"]];function O(){return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Guillaume Lessard · Founder and Lead Engineer, QECTOR",description:"Guillaume Lessard, founder and lead engineer of QECTOR: Rust and Python quantum error correction decoders, verifiable releases and offline licensing. Longueuil, Québec. ORCID 0009-0000-3465-3753."}),e.jsx(p,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder and Lead Engineer, QECTOR",description:"Founder and lead engineer of QECTOR, a Rust and Python quantum error correction decoding platform. Founder of iD01t Productions.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard/",email:"admin@qector.store",address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2012",url:"https://qector.store/"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching","Belief propagation and OSD decoding","qLDPC codes","Rust","Python","GPU computing","Software supply-chain security"],sameAs:[n,h,"https://github.com/qectorlab",r,o,"https://id01t.itch.io/"]}}),e.jsxs("section",{className:"relative pt-32 pb-16 md:pt-36 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8 md:gap-10",children:[e.jsx("img",{src:"/assets/g.png",alt:"Guillaume Lessard",width:176,height:176,fetchPriority:"high",className:"w-44 h-44 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("p",{className:"text-cyan-300 text-sm font-semibold tracking-wide mb-2",children:"Founder and Lead Engineer, QECTOR"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.05] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-6 max-w-2xl",children:"I build quantum error correction decoders in Rust and Python, and the release and licensing infrastructure that lets teams trust them: corrections checked against their syndromes, wheels with verifiable provenance, and licences that work air-gapped. Based in Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-3",children:[e.jsx("a",{href:"#book",className:"btn-gold px-6 py-3 text-sm",children:"Book a call"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline px-6 py-3 text-sm",children:"admin@qector.store"}),e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"btn-outline px-6 py-3 text-sm",children:"LinkedIn"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-14",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"What I work on"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-5",children:v.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Track record"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Public releases, newest first. Each links to its release page."}),e.jsx("ol",{className:"relative border-l border-gridline ml-2 space-y-6",children:N.map(t=>e.jsxs("li",{className:"pl-6 relative",children:[e.jsx("span",{className:"absolute -left-[5px] top-1.5 w-2.5 h-2.5 rounded-full bg-cyan-300","aria-hidden":"true"}),e.jsx("time",{dateTime:t.date,className:"text-xs font-mono text-muted-foreground",children:y(t.date)}),e.jsx("h3",{className:"font-semibold text-primary",children:e.jsx("a",{href:t.href,target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300",children:t.title})}),e.jsx("p",{className:"text-secondary text-sm",children:t.detail})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Publications and records"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Manuals and verification material are archived with DOIs on Zenodo and linked to my"," ",e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"ORCID record"}),"."]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:P.map(t=>e.jsxs("a",{href:`https://doi.org/${t.doi}`,target:"_blank",rel:"noopener noreferrer",className:"card-surface block hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-primary font-semibold text-sm mb-2",children:t.title}),e.jsxs("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:["doi:",t.doi]})]},t.doi))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Expertise"}),e.jsx("dl",{className:"card-surface divide-y divide-gridline/60 !py-2",children:k.map(t=>e.jsxs("div",{className:"grid md:grid-cols-[14rem_1fr] gap-1 md:gap-6 py-4",children:[e.jsx("dt",{className:"text-primary font-semibold text-sm",children:t.area}),e.jsx("dd",{className:"text-secondary text-sm",children:t.items})]},t.area))})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"iD01t Productions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"I founded iD01t Productions in 2012 as an independent studio. It publishes technical books, desktop software and games, and electronic music. QECTOR is its quantum error correction line, built and supported by me directly, so you always deal with the person who wrote the code."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Verify my identity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"Several people share my name. For invoices, citations or due diligence, these are the identifiers I control:"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-2",children:C.map(([t,x,d])=>e.jsx("li",{children:e.jsxs("a",{href:d,...d?.startsWith("http")?{target:"_blank",rel:"noopener noreferrer"}:{},className:"block p-2.5 bg-void border border-gridline rounded-lg hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-[10px] uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:x})]})},t))})]})]}),e.jsxs("div",{id:"book",className:"card-surface scroll-mt-28",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["Decoder evaluation, integration, licensing or research collaboration: you will speak with me directly. Prefer e-mail?"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(f,{url:g})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(l,{to:"/decoder",className:"btn-cyan",children:"Explore the decoder"}),e.jsx(l,{to:"/pricing",className:"btn-outline",children:"Plans and licensing"})]})]})})]})}export{O as default}; diff --git a/assets/Founder-D5LRTxeE.js b/assets/Founder-D5LRTxeE.js deleted file mode 100644 index ad9016d1..00000000 --- a/assets/Founder-D5LRTxeE.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,J as p,f as g,L as l}from"./index-DayaklK-.js";import{C as f}from"./CalendlyWidget-BuhQfp2_.js";import{C as i,W as b,a}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const n="https://orcid.org/0009-0000-3465-3753",o="https://www.linkedin.com/in/qector/",h="https://github.com/GuillaumeLessard",r="https://pypi.org/project/qector-decoder-v3/",y=t=>new Date(`${t}T12:00:00Z`).toLocaleDateString("en-CA",{year:"numeric",month:"short",day:"numeric",timeZone:"UTC"}),c=a.find(t=>t.version==="1.0.1"),j=a.find(t=>t.version==="1.0.0"),m=a[a.length-1],s=b[0],v=[{title:"Decoders that prove their output",body:"A Rust core behind a Python API: Union-Find, exact MWPM, BP-OSD and Relay-BP for qLDPC codes, on CPU and GPU. Every correction is checked against its syndrome, H·c = s (mod 2)."},{title:"Releases you can verify",body:"Wheels built in public CI, tested on each operating system before publishing, with Sigstore provenance, PyPI attestations and Trusted Publishing."},{title:"Tools that stay offline",body:"Air-gapped licensing with Ed25519 tokens, a schema-validated MCP server for Claude, and a self-contained desktop Workbench."}],N=[{date:c.releaseDate,title:`QECTOR Decoder v3 ${c.version}`,detail:"18 wheels for CPython 3.9 to 3.14, tested per OS, Sigstore provenance on every file",href:"https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1"},{date:i.releaseDate,title:`QECTOR Claude Plugin ${i.version}`,detail:"Air-gapped, schema-validated MCP server for Claude Code and Claude Desktop",href:i.releaseUrl},{date:s.releaseDate,title:`QECTOR Workbench ${s.version}`,detail:`Free desktop GUI for Windows and Linux, ${s.decoderKinds} decoder kinds, ${s.codeFamilies} code families`,href:s.releaseUrl},{date:j.releaseDate,title:"QECTOR Decoder v3 1.0.0",detail:"First stable release: API stability tiers, qector CLI, reference manual",href:r},{date:m.releaseDate,title:`First public release (${m.version})`,detail:`Published on PyPI; ${a.length} releases to date`,href:r}],P=[{title:"QECTOR Decoder v3 User Manual (v1.0.0)",doi:"10.5281/zenodo.21611214"},{title:"Normative Reference Manual (v1.0.0)",doi:"10.5281/zenodo.21941046"},{title:"Verification and Proof Bundle",doi:"10.5281/zenodo.22046403"}],k=[{area:"Quantum error correction",items:"MWPM and Blossom, Union-Find, BP-OSD and Relay-BP for qLDPC, detector error models, Stim and Sinter"},{area:"Systems",items:"Rust, PyO3, CUDA and OpenCL batch kernels, memory layout and throughput"},{area:"Python and release engineering",items:"Binary wheels for Linux, Windows and macOS, PyPI Trusted Publishing, Sigstore, supply-chain gates"},{area:"Tooling and product",items:"MCP servers, desktop apps, React and TypeScript, Stripe and licensing infrastructure"}],C=[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/GuillaumeLessard",h],["GitHub organisation","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3",r],["LinkedIn","linkedin.com/in/qector",o],["E-mail","admin@qector.store","mailto:admin@qector.store"]];function O(){return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Guillaume Lessard · Founder and Lead Engineer, QECTOR",description:"Guillaume Lessard, founder and lead engineer of QECTOR: Rust and Python quantum error correction decoders, verifiable releases and offline licensing. Longueuil, Québec. ORCID 0009-0000-3465-3753."}),e.jsx(p,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder and Lead Engineer, QECTOR",description:"Founder and lead engineer of QECTOR, a Rust and Python quantum error correction decoding platform. Founder of iD01t Productions.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard/",email:"admin@qector.store",address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2012",url:"https://qector.store/"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching","Belief propagation and OSD decoding","qLDPC codes","Rust","Python","GPU computing","Software supply-chain security"],sameAs:[n,h,"https://github.com/qectorlab",r,o,"https://id01t.itch.io/"]}}),e.jsxs("section",{className:"relative pt-32 pb-16 md:pt-36 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8 md:gap-10",children:[e.jsx("img",{src:"/assets/g.png",alt:"Guillaume Lessard",width:176,height:176,fetchPriority:"high",className:"w-44 h-44 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("p",{className:"text-cyan-300 text-sm font-semibold tracking-wide mb-2",children:"Founder and Lead Engineer, QECTOR"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.05] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-6 max-w-2xl",children:"I build quantum error correction decoders in Rust and Python, and the release and licensing infrastructure that lets teams trust them: corrections checked against their syndromes, wheels with verifiable provenance, and licences that work air-gapped. Based in Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-3",children:[e.jsx("a",{href:"#book",className:"btn-gold px-6 py-3 text-sm",children:"Book a call"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline px-6 py-3 text-sm",children:"admin@qector.store"}),e.jsx("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"btn-outline px-6 py-3 text-sm",children:"LinkedIn"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-14",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"What I work on"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-5",children:v.map(t=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.body})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Track record"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Public releases, newest first. Each links to its release page."}),e.jsx("ol",{className:"relative border-l border-gridline ml-2 space-y-6",children:N.map(t=>e.jsxs("li",{className:"pl-6 relative",children:[e.jsx("span",{className:"absolute -left-[5px] top-1.5 w-2.5 h-2.5 rounded-full bg-cyan-300","aria-hidden":"true"}),e.jsx("time",{dateTime:t.date,className:"text-xs font-mono text-muted-foreground",children:y(t.date)}),e.jsx("h3",{className:"font-semibold text-primary",children:e.jsx("a",{href:t.href,target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300",children:t.title})}),e.jsx("p",{className:"text-secondary text-sm",children:t.detail})]},t.title))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Publications and records"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Manuals and verification material are archived with DOIs on Zenodo and linked to my"," ",e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"ORCID record"}),"."]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:P.map(t=>e.jsxs("a",{href:`https://doi.org/${t.doi}`,target:"_blank",rel:"noopener noreferrer",className:"card-surface block hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-primary font-semibold text-sm mb-2",children:t.title}),e.jsxs("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:["doi:",t.doi]})]},t.doi))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Expertise"}),e.jsx("dl",{className:"card-surface divide-y divide-gridline/60 !py-2",children:k.map(t=>e.jsxs("div",{className:"grid md:grid-cols-[14rem_1fr] gap-1 md:gap-6 py-4",children:[e.jsx("dt",{className:"text-primary font-semibold text-sm",children:t.area}),e.jsx("dd",{className:"text-secondary text-sm",children:t.items})]},t.area))})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"iD01t Productions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"I founded iD01t Productions in 2012 as an independent studio. It publishes technical books, desktop software and games, and electronic music. QECTOR is its quantum error correction line, built and supported by me directly, so you always deal with the person who wrote the code."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Verify my identity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"Several people share my name. For invoices, citations or due diligence, these are the identifiers I control:"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-2",children:C.map(([t,x,d])=>e.jsx("li",{children:e.jsxs("a",{href:d,...d?.startsWith("http")?{target:"_blank",rel:"noopener noreferrer"}:{},className:"block p-2.5 bg-void border border-gridline rounded-lg hover:border-cyan-300/40",children:[e.jsx("span",{className:"block text-[10px] uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("span",{className:"block font-mono text-xs text-cyan-300 break-all",children:x})]})},t))})]})]}),e.jsxs("div",{id:"book",className:"card-surface scroll-mt-28",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["Decoder evaluation, integration, licensing or research collaboration: you will speak with me directly. Prefer e-mail?"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(f,{url:g})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(l,{to:"/decoder",className:"btn-cyan",children:"Explore the decoder"}),e.jsx(l,{to:"/pricing",className:"btn-outline",children:"Plans and licensing"})]})]})})]})}export{O as default}; diff --git a/assets/Founder-DOZO8QYR.js b/assets/Founder-DOZO8QYR.js deleted file mode 100644 index 3e3743dd..00000000 --- a/assets/Founder-DOZO8QYR.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-WV1aysjN.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-DhTV1Awk.js b/assets/Founder-DhTV1Awk.js deleted file mode 100644 index ad80d907..00000000 --- a/assets/Founder-DhTV1Awk.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-CxWP17m6.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.14","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v2.0.1"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 (August 2026) as the first stable release and v1.0.1 as the current one (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v2.0.1 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v2.0.1",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-Do9ecKUC.js b/assets/Founder-Do9ecKUC.js deleted file mode 100644 index b39fe4aa..00000000 --- a/assets/Founder-Do9ecKUC.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-DRAXObZB.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-DrgUXXtt.js b/assets/Founder-DrgUXXtt.js deleted file mode 100644 index 84ab1bf6..00000000 --- a/assets/Founder-DrgUXXtt.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-abfjMTlQ.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.14","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2012"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v2.0.1"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2012. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 (August 2026) as the first stable release and v1.0.1 as the current one (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v2.0.1 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v2.0.1",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-RJ-BJAag.js b/assets/Founder-RJ-BJAag.js deleted file mode 100644 index 7c521b22..00000000 --- a/assets/Founder-RJ-BJAag.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-CqAA-ZXu.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-Y62YqrcF.js b/assets/Founder-Y62YqrcF.js deleted file mode 100644 index 9445771e..00000000 --- a/assets/Founder-Y62YqrcF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-DkYdPRY7.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.14","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v2.0.1"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 (August 2026) as the first stable release and v1.0.1 as the current one (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v2.0.1 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v2.0.1",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-jWl4MVYA.js b/assets/Founder-jWl4MVYA.js deleted file mode 100644 index d73370aa..00000000 --- a/assets/Founder-jWl4MVYA.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,b as c}from"./index-B9kEGiWi.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3==1.0.0"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/Founder-yFhedN2-.js b/assets/Founder-yFhedN2-.js deleted file mode 100644 index 4288a1aa..00000000 --- a/assets/Founder-yFhedN2-.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as l,J as d,d as c}from"./index-CpdATiEY.js";import{C as m}from"./CalendlyWidget-BuhQfp2_.js";import{L as t}from"./vendor-PiU4YGcH.js";import{o as h}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n="https://orcid.org/0009-0000-3465-3753",x=[{title:"Systems & Performance",items:["Rust","PyO3 bindings","C-adjacent FFI","CUDA / OpenCL batch kernels","Memory-layout and throughput tuning"]},{title:"Python Engineering",items:["Python 3.9-3.13","NumPy / SciPy","Binary wheel packaging (manylinux, macOS, Windows)","PyPI release engineering"]},{title:"Quantum Error Correction",items:["MWPM / Blossom matching","Union-Find decoding","Belief propagation + OSD (qLDPC)","Stim / Sinter / PyMatching integration","Benchmark design and reproducibility"]},{title:"Applications & Desktop",items:["CustomTkinter GUI","Self-contained runtime bundling","PyInstaller / Inno Setup / .deb packaging","Model Context Protocol (MCP) servers","Offline-first architecture"]},{title:"Web & Product",items:["React + TypeScript","Vite","Tailwind","SEO and structured data","Stripe commerce integration"]},{title:"Writing & Publishing",items:["Technical documentation","Long-form instructional writing","Audiobook production","Electronic music production","Independent distribution"]}];function v(){return e.jsxs(e.Fragment,{children:[e.jsx(l,{title:"Guillaume Lessard · Founder of QECTOR and iD01t Productions",description:"Guillaume Lessard, software engineer, author, and independent researcher in Longueuil, Québec. Founder of iD01t Productions and creator of QECTOR Decoder v3. ORCID 0009-0000-3465-3753."}),e.jsx(d,{data:{"@context":"https://schema.org","@type":"Person","@id":"https://qector.store/guillaume-lessard#person",name:"Guillaume Lessard",givenName:"Guillaume",familyName:"Lessard",identifier:"0009-0000-3465-3753",jobTitle:"Founder, Software Engineer and Independent Researcher",description:"Software engineer, author and independent researcher. Founder of iD01t Productions and author of the QECTOR Decoder v3 quantum error correction library.",image:"https://qector.store/assets/g.png",url:"https://qector.store/guillaume-lessard",email:"admin@qector.store",address:{"@type":"PostalAddress",streetAddress:"2004 De Lorimier",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},worksFor:{"@type":"Organization",name:"iD01t Productions",foundingDate:"2023"},knowsAbout:["Quantum error correction","Minimum-weight perfect matching decoders","Belief propagation and OSD decoding","Rust","Python","GPU batch computing","Technical writing"],sameAs:[n,"https://github.com/GuillaumeLessard","https://github.com/qectorlab","https://pypi.org/project/qector-decoder-v3/","https://id01t.itch.io/","https://www.linkedin.com/in/qector/"]}}),e.jsxs("section",{className:"relative py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsx("div",{className:"relative z-10 section-padding",children:e.jsxs("div",{className:"max-w-4xl mx-auto flex flex-col md:flex-row items-center md:items-start gap-8",children:[e.jsx("img",{src:"/assets/g.png",alt:"Portrait of Guillaume Lessard, founder of QECTOR and iD01t Productions",width:160,height:160,loading:"lazy",className:"w-40 h-40 rounded-2xl object-cover border border-cyan-300/30 shadow-lg shrink-0"}),e.jsxs("div",{className:"text-center md:text-left",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-semibold text-cyan-300 uppercase tracking-wider mb-4",children:"Founder · Developer · Author · Independent Researcher"}),e.jsx("h1",{className:"text-4xl md:text-5xl font-extrabold tracking-tight leading-[1.1] mb-4",children:"Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-5",children:"I am Guillaume Lessard, the founder of iD01t Productions and the creator of QECTOR. I design Rust/Python quantum error-correction systems, local MCP tooling, and release workflows where correctness claims are tied to declared workloads, reproducible artifacts, and public records. I build and support the platform independently from Longueuil, Québec."}),e.jsxs("div",{className:"flex flex-wrap justify-center md:justify-start gap-2 text-xs",children:[e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"ORCID 0009-0000-3465-3753"}),e.jsx("a",{href:"https://github.com/qectorlab",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"GitHub"}),e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary hover:text-cyan-300 hover:border-cyan-300/30 transition-all",children:"PyPI"}),e.jsx("span",{className:"inline-flex items-center min-h-[44px] px-3 py-1.5 bg-surface border border-gridline rounded-full text-secondary",children:"iD01t Productions"})]})]})]})})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Making sure you have the right Guillaume Lessard"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"It is a common Québécois name, and several accomplished professionals share it, including a compiler engineer who works on Swift and a real estate executive. None of them are me, and I claim none of their work. If you are evaluating QECTOR, verifying an invoice, or checking a citation, these are the primary identifiers I control:"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm",children:[["ORCID","0009-0000-3465-3753",n],["GitHub","github.com/qectorlab","https://github.com/qectorlab"],["PyPI","qector-decoder-v3","https://pypi.org/project/qector-decoder-v3/"],["Studio","iD01t Productions, Longueuil QC"],["itch.io","id01t.itch.io","https://id01t.itch.io/"],["Email","admin@qector.store","mailto:admin@qector.store"]].map(([r,s,a])=>{const i=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-[11px] text-muted-foreground uppercase tracking-wider mb-0.5",children:r}),e.jsx("div",{className:"text-cyan-300 font-mono text-xs break-all",children:s})]}),o="p-3 bg-void border border-gridline rounded-xl";return a?e.jsx("a",{href:a,target:a.startsWith("mailto")?void 0:"_blank",rel:"noopener noreferrer",className:`${o} hover:border-cyan-300/40 transition-colors`,children:i},r):e.jsx("span",{className:o,children:i},r)})})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Professional Profile"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["My work combines more than two decades of software engineering with focused quantum error-correction research. QECTOR Decoder v3 is published as the stable ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3 1.0.x"}),"Rust/PyO3 package; its companion Claude Plugin is released at ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"v1.0.6"}),". I publish the user manual, normative reference manual, and certification/proof material so identity, software version, and evidence can be checked independently."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["v1.0.0 user manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Normative reference manual",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-void border border-gridline rounded-xl text-cyan-300 hover:border-cyan-300/40 transition-colors",children:["Verification and proof bundle",e.jsx("br",{}),e.jsx("span",{className:"font-mono",children:"10.5281/zenodo.22046403"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Background"}),e.jsxs("div",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsx("p",{children:"My engineering philosophy is rooted in practical execution. Over the course of my career, I learned to build robust systems because I wanted to make things that worked in the real world. That has been the method ever since: pick the problem, learn what the problem requires, ship the result, publish the evidence."}),e.jsxs("p",{children:["For most of the last twenty years that meant building high-performance applications and tools. I founded"," ",e.jsx("span",{className:"text-secondary",children:"iD01t Productions"})," ","in 2023. QECTOR serves as its dedicated QEC software division, delivering robust decoder pipelines for research and production environments."]}),e.jsx("p",{children:"Quantum error correction is where that method currently points. QECTOR Decoder v3 is a Rust core behind a Python API implementing 17+ decoder configurations, with v1.0.0 as the first stable release (2026-08-06). The public contract separates mathematical correctness from machine-specific performance: decodes can be checked against the declared syndrome relation, while local benchmark results carry their workload, environment, raw artifact, and hash. The qector Claude Plugin v1.0.6 extends the same evidence-first approach into local Claude Code and Claude Desktop workflows."}),e.jsx("p",{className:"text-primary italic border-l-2 border-cyan-300/40 pl-4",children:"We ship. Even tired. Even messy. Still shipping."})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"What I've shipped"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"17+",label:"Decoder Configurations"},{value:"10+",label:"Supported Topologies"},{value:"20+",label:"Years Writing Software"},{value:"v1.0.6",label:"Claude Plugin Release"}].map(r=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-2xl mb-1",children:r.value}),e.jsx("div",{className:"text-secondary text-xs",children:r.label})]},r.label))}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Quantum error correction"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/decoder",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Decoder v3"}),": Rust-core Python library, 17+ decoder configurations"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/workbench",className:"text-cyan-300 hover:underline font-semibold",children:"QECTOR Workbench"}),": free desktop GUI and comprehensive MCP server"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsxs("span",{children:[e.jsx(t,{to:"/evidence",className:"text-cyan-300 hover:underline font-semibold",children:"Evidence & Provenance"}),": validation reports and SHA-256 sealed manifests on GitHub"]})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Mastering QEC and the QEC Academy instructional series"})]})]})]}),e.jsxs("div",{className:"p-5 bg-surface border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold mb-2 text-sm",children:"Research & Engineering"}),e.jsxs("ul",{className:"text-secondary text-xs space-y-1.5",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Work signed and traceable through ORCID and Zenodo"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Custom decoder topologies for research workflows"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"High-performance batch simulation pipelines"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-cyan-300",children:"✓"}),e.jsx("span",{children:"Reproducible artifact workflows"})]})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-5",children:"Skills"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:x.map(r=>e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-3",children:r.title}),e.jsx("ul",{className:"space-y-1.5",children:r.items.map(s=>e.jsxs("li",{className:"text-secondary text-xs flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-cyan-300 mt-0.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:s})]},s))})]},r.title))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"Book a 30-minute call"}),e.jsxs("p",{className:"text-secondary text-sm mb-5",children:["For a decoder audit, licensing questions, or an integration walkthrough, you will speak directly with me. Prefer email? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]}),e.jsx(m,{url:c})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(t,{to:"/pricing",className:"btn-cyan",children:"View Pricing & Licensing"})})]})})]})}export{v as default}; diff --git a/assets/GettingStarted-B53GBAZh.js b/assets/GettingStarted-B53GBAZh.js deleted file mode 100644 index 953b880a..00000000 --- a/assets/GettingStarted-B53GBAZh.js +++ /dev/null @@ -1,83 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i,C as s,L as r}from"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const c=`import qector_decoder_v3 as q -print(q.__version__) -print(q.get_license_info()["tier"]) # "Community" until you activate a licence -`,d=`import numpy as np -from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder, generate_parity_check_matrix - -# Distance-5 repetition code: 5 data qubits, 4 parity checks. -check_to_qubits = [[0, 1], [1, 2], [2, 3], [3, 4]] -H = generate_parity_check_matrix(check_to_qubits, 5) - -error = np.array([0, 0, 1, 0, 0], dtype=np.uint8) -syndrome = (H @ error) % 2 # which checks fire - -for decoder in (UnionFindDecoder(check_to_qubits, 5), BlossomDecoder(check_to_qubits, 5)): - correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8) - assert np.array_equal((H @ correction) % 2, syndrome) # H·c = s (mod 2) - print(type(decoder).__name__, correction) -`,a=`import stim -from qector_decoder_v3 import dem - -circuit = stim.Circuit.generated( - "surface_code:rotated_memory_z", distance=5, rounds=5, - after_clifford_depolarization=0.005, -) -graph = dem.from_stim(circuit.detector_error_model(decompose_errors=True)).collapse_to_graph() -decoder = graph.make_decoder("blossom") # uses the DEM's edge weights - -shots = 2_000 -dets, obs = circuit.compile_detector_sampler(seed=7).sample(shots, separate_observables=True) -fails = 0 -for d, o in zip(dets, obs): - correction = decoder.decode(d.astype("uint8")) - predicted = graph.predicted_observables(correction) - fails += int(predicted[0] != o[0]) -print(f"logical errors: {fails} / {shots}") -`,l=`import numpy as np -from qector_decoder_v3 import codes -from qector_decoder_v3.bposd import BpOsdDecoder - -# [[144,12,12]] bivariate bicycle code: A = x^3 + y + y^2, B = y^3 + x + x^2 -cx, cz = codes.bivariate_bicycle_code( - 12, 6, [("x", 3), ("y", 1), ("y", 2)], [("y", 3), ("x", 1), ("x", 2)] -) -H = cx.parity_check_matrix() -decoder = BpOsdDecoder(H, error_rate=0.01, osd_order=0) - -rng = np.random.default_rng(1) -error = (rng.random(H.shape[1]) < 0.01).astype(np.uint8) -syndrome = (H @ error) % 2 -correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8) -assert np.array_equal((H @ correction) % 2, syndrome) -print(H.shape, "syndrome reproduced") -`,m=`import sinter -import stim -from qector_decoder_v3.sinter_compat import qector_sinter_decoders - - -def main(): - tasks = [ - sinter.Task( - circuit=stim.Circuit.generated( - "surface_code:rotated_memory_z", distance=d, rounds=d, - after_clifford_depolarization=p, - ), - json_metadata={"d": d, "p": p}, - ) - for d in (3, 5) - for p in (0.002, 0.004) - ] - - stats = sinter.collect( - num_workers=2, tasks=tasks, - decoders=["qector_blossom"], - custom_decoders=qector_sinter_decoders(), - max_shots=2_000, max_errors=50, - ) - for s in sorted(stats, key=lambda s: (s.json_metadata["d"], s.json_metadata["p"])): - print(s.json_metadata, s.errors, "/", s.shots) - - -if __name__ == "__main__": # Sinter uses worker processes - main() -`,o=[{id:"install",title:"Install and check",text:'Install from PyPI. Wheels exist for CPython 3.9 to 3.14 on Linux x86_64, Windows x64 and macOS on Apple silicon, so there is nothing to compile. The tier stays "Community" until you activate a licence, and every decoder works on the CPU in that tier.',shell:'python -m pip install --upgrade "qector-decoder-v3>=1.0.1,<2" stim sinter',code:c,file:"step1_check.py"},{id:"first-decode",title:"Your first decode, checked",text:"Build a distance-5 repetition code, inject one error, and decode its syndrome with Union-Find and exact matching. The assert is the contract every QECTOR decoder keeps: the correction reproduces the syndrome, H·c = s (mod 2).",code:d,file:"step2_first_decode.py"},{id:"stim",title:"Decode a Stim circuit",text:"Generate a rotated surface-code memory experiment with Stim, turn its detector error model into a weighted matching graph, and count logical errors over sampled shots. The decoder uses the error model’s weights, so rare and common faults are treated differently.",code:a,file:"step3_stim.py"},{id:"qldpc",title:"qLDPC with BP-OSD",text:"Matching needs graph-like errors; qLDPC codes do not have them. Build the [[144,12,12]] bivariate bicycle code and decode a random error with belief propagation plus ordered statistics, again checking the syndrome.",code:l,file:"step4_qldpc.py"},{id:"sinter",title:"Scale up with Sinter",text:"Sinter runs many circuits across worker processes and collects statistics. QECTOR registers its decoders as Sinter custom decoders. Keep the main guard: Sinter starts worker processes.",code:m,file:"step5_sinter.py"}];function _(){return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Getting Started · QECTOR Decoder v3",description:"A 15-minute tutorial for QECTOR Decoder v3: install, a first checked decode, a Stim surface-code circuit, qLDPC decoding with BP-OSD, and Sinter. Every snippet is tested against version 1.0.1."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"About 15 minutes · Tested on 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Getting Started"}),e.jsxs("p",{className:"text-secondary text-lg leading-relaxed",children:["From ",e.jsx("code",{className:"font-mono text-cyan-200",children:"pip install"})," to decoding a surface-code circuit and a qLDPC code. Each step is a complete script you can copy and run."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto grid lg:grid-cols-[13rem_1fr] gap-10",children:[e.jsx("nav",{"aria-label":"Steps",className:"hidden lg:block",children:e.jsx("ol",{className:"sticky top-28 space-y-2 text-sm",children:o.map((t,n)=>e.jsx("li",{children:e.jsxs("a",{href:`#${t.id}`,className:"text-secondary hover:text-cyan-300",children:[n+1,". ",t.title]})},t.id))})}),e.jsxs("div",{className:"space-y-14 min-w-0",children:[o.map((t,n)=>e.jsxs("article",{id:t.id,className:"scroll-mt-28",children:[e.jsxs("p",{className:"text-cyan-300 text-xs font-semibold uppercase tracking-wider mb-1",children:["Step ",n+1]}),e.jsx("h2",{className:"text-2xl font-bold mb-3",children:t.title}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:t.text}),t.shell&&e.jsx("div",{className:"mb-4",children:e.jsx(s,{language:"bash",filename:"terminal",code:t.shell})}),e.jsx(s,{language:"python",filename:t.file,code:t.code.trimEnd()})]},t.id)),e.jsxs("div",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Where to go next"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:["Every class and function, with signatures: the ",e.jsx(r,{to:"/technical-reference",className:"text-cyan-300 hover:underline",children:"API index"}),"."]}),e.jsxs("li",{children:["Choosing a decoder and the full feature set: ",e.jsx(r,{to:"/decoder",className:"text-cyan-300 hover:underline",children:"Decoder"})," and the ",e.jsx(r,{to:"/manual",className:"text-cyan-300 hover:underline",children:"user manual"}),"."]}),e.jsxs("li",{children:["Using QECTOR from Claude: the ",e.jsx(r,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"Claude plugin"}),"."]}),e.jsxs("li",{children:["GPU batch decoding and commercial use: ",e.jsx(r,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"plans"}),", from $79/month."]})]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-4",children:"Verified: each script above was run against the published qector-decoder-v3 1.0.1 wheel on Linux (CPython 3.13) on 6 November 2026. Logical-error counts depend on the random seed and noise settings; measure on your own workloads."})]})]})]})})]})}export{_ as default}; diff --git a/assets/GettingStarted-D3810rrk.js b/assets/GettingStarted-D3810rrk.js deleted file mode 100644 index 9500778b..00000000 --- a/assets/GettingStarted-D3810rrk.js +++ /dev/null @@ -1,83 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i,C as s,L as r}from"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const c=`import qector_decoder_v3 as q -print(q.__version__) -print(q.get_license_info()["tier"]) # "Community" until you activate a licence -`,d=`import numpy as np -from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder, generate_parity_check_matrix - -# Distance-5 repetition code: 5 data qubits, 4 parity checks. -check_to_qubits = [[0, 1], [1, 2], [2, 3], [3, 4]] -H = generate_parity_check_matrix(check_to_qubits, 5) - -error = np.array([0, 0, 1, 0, 0], dtype=np.uint8) -syndrome = (H @ error) % 2 # which checks fire - -for decoder in (UnionFindDecoder(check_to_qubits, 5), BlossomDecoder(check_to_qubits, 5)): - correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8) - assert np.array_equal((H @ correction) % 2, syndrome) # H·c = s (mod 2) - print(type(decoder).__name__, correction) -`,a=`import stim -from qector_decoder_v3 import dem - -circuit = stim.Circuit.generated( - "surface_code:rotated_memory_z", distance=5, rounds=5, - after_clifford_depolarization=0.005, -) -graph = dem.from_stim(circuit.detector_error_model(decompose_errors=True)).collapse_to_graph() -decoder = graph.make_decoder("blossom") # uses the DEM's edge weights - -shots = 2_000 -dets, obs = circuit.compile_detector_sampler(seed=7).sample(shots, separate_observables=True) -fails = 0 -for d, o in zip(dets, obs): - correction = decoder.decode(d.astype("uint8")) - predicted = graph.predicted_observables(correction) - fails += int(predicted[0] != o[0]) -print(f"logical errors: {fails} / {shots}") -`,l=`import numpy as np -from qector_decoder_v3 import codes -from qector_decoder_v3.bposd import BpOsdDecoder - -# [[144,12,12]] bivariate bicycle code: A = x^3 + y + y^2, B = y^3 + x + x^2 -cx, cz = codes.bivariate_bicycle_code( - 12, 6, [("x", 3), ("y", 1), ("y", 2)], [("y", 3), ("x", 1), ("x", 2)] -) -H = cx.parity_check_matrix() -decoder = BpOsdDecoder(H, error_rate=0.01, osd_order=0) - -rng = np.random.default_rng(1) -error = (rng.random(H.shape[1]) < 0.01).astype(np.uint8) -syndrome = (H @ error) % 2 -correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8) -assert np.array_equal((H @ correction) % 2, syndrome) -print(H.shape, "syndrome reproduced") -`,m=`import sinter -import stim -from qector_decoder_v3.sinter_compat import qector_sinter_decoders - - -def main(): - tasks = [ - sinter.Task( - circuit=stim.Circuit.generated( - "surface_code:rotated_memory_z", distance=d, rounds=d, - after_clifford_depolarization=p, - ), - json_metadata={"d": d, "p": p}, - ) - for d in (3, 5) - for p in (0.002, 0.004) - ] - - stats = sinter.collect( - num_workers=2, tasks=tasks, - decoders=["qector_blossom"], - custom_decoders=qector_sinter_decoders(), - max_shots=2_000, max_errors=50, - ) - for s in sorted(stats, key=lambda s: (s.json_metadata["d"], s.json_metadata["p"])): - print(s.json_metadata, s.errors, "/", s.shots) - - -if __name__ == "__main__": # Sinter uses worker processes - main() -`,o=[{id:"install",title:"Install and check",text:'Install from PyPI. Wheels exist for CPython 3.9 to 3.14 on Linux x86_64, Windows x64 and macOS on Apple silicon, so there is nothing to compile. The tier stays "Community" until you activate a licence, and every decoder works on the CPU in that tier.',shell:'python -m pip install --upgrade "qector-decoder-v3>=1.0.1,<2" stim sinter',code:c,file:"step1_check.py"},{id:"first-decode",title:"Your first decode, checked",text:"Build a distance-5 repetition code, inject one error, and decode its syndrome with Union-Find and exact matching. The assert is the contract every QECTOR decoder keeps: the correction reproduces the syndrome, H·c = s (mod 2).",code:d,file:"step2_first_decode.py"},{id:"stim",title:"Decode a Stim circuit",text:"Generate a rotated surface-code memory experiment with Stim, turn its detector error model into a weighted matching graph, and count logical errors over sampled shots. The decoder uses the error model’s weights, so rare and common faults are treated differently.",code:a,file:"step3_stim.py"},{id:"qldpc",title:"qLDPC with BP-OSD",text:"Matching needs graph-like errors; qLDPC codes do not have them. Build the [[144,12,12]] bivariate bicycle code and decode a random error with belief propagation plus ordered statistics, again checking the syndrome.",code:l,file:"step4_qldpc.py"},{id:"sinter",title:"Scale up with Sinter",text:"Sinter runs many circuits across worker processes and collects statistics. QECTOR registers its decoders as Sinter custom decoders. Keep the main guard: Sinter starts worker processes.",code:m,file:"step5_sinter.py"}];function _(){return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Getting Started · QECTOR Decoder v3",description:"A 15-minute tutorial for QECTOR Decoder v3: install, a first checked decode, a Stim surface-code circuit, qLDPC decoding with BP-OSD, and Sinter. Every snippet is tested against version 1.0.1."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"About 15 minutes · Tested on 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Getting Started"}),e.jsxs("p",{className:"text-secondary text-lg leading-relaxed",children:["From ",e.jsx("code",{className:"font-mono text-cyan-200",children:"pip install"})," to decoding a surface-code circuit and a qLDPC code. Each step is a complete script you can copy and run."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto grid lg:grid-cols-[13rem_1fr] gap-10",children:[e.jsx("nav",{"aria-label":"Steps",className:"hidden lg:block",children:e.jsx("ol",{className:"sticky top-28 space-y-2 text-sm",children:o.map((t,n)=>e.jsx("li",{children:e.jsxs("a",{href:`#${t.id}`,className:"text-secondary hover:text-cyan-300",children:[n+1,". ",t.title]})},t.id))})}),e.jsxs("div",{className:"space-y-14 min-w-0",children:[o.map((t,n)=>e.jsxs("article",{id:t.id,className:"scroll-mt-28",children:[e.jsxs("p",{className:"text-cyan-300 text-xs font-semibold uppercase tracking-wider mb-1",children:["Step ",n+1]}),e.jsx("h2",{className:"text-2xl font-bold mb-3",children:t.title}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:t.text}),t.shell&&e.jsx("div",{className:"mb-4",children:e.jsx(s,{language:"bash",filename:"terminal",code:t.shell})}),e.jsx(s,{language:"python",filename:t.file,code:t.code.trimEnd()})]},t.id)),e.jsxs("div",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Where to go next"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:["Every class and function, with signatures: the ",e.jsx(r,{to:"/technical-reference",className:"text-cyan-300 hover:underline",children:"API index"}),"."]}),e.jsxs("li",{children:["Choosing a decoder and the full feature set: ",e.jsx(r,{to:"/decoder",className:"text-cyan-300 hover:underline",children:"Decoder"})," and the ",e.jsx(r,{to:"/manual",className:"text-cyan-300 hover:underline",children:"user manual"}),"."]}),e.jsxs("li",{children:["Using QECTOR from Claude: the ",e.jsx(r,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"Claude plugin"}),"."]}),e.jsxs("li",{children:["GPU batch decoding and commercial use: ",e.jsx(r,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"plans"}),", from $79/month."]})]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-4",children:"Verified: each script above was run against the published qector-decoder-v3 1.0.1 wheel on Linux (CPython 3.13) on 6 November 2026. Logical-error counts depend on the random seed and noise settings; measure on your own workloads."})]})]})]})})]})}export{_ as default}; diff --git a/assets/GettingStarted-DsueGorx.js b/assets/GettingStarted-DsueGorx.js deleted file mode 100644 index e7bebaad..00000000 --- a/assets/GettingStarted-DsueGorx.js +++ /dev/null @@ -1,83 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i,C as s,L as r}from"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const c=`import qector_decoder_v3 as q -print(q.__version__) -print(q.get_license_info()["tier"]) # "Community" until you activate a licence -`,d=`import numpy as np -from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder, generate_parity_check_matrix - -# Distance-5 repetition code: 5 data qubits, 4 parity checks. -check_to_qubits = [[0, 1], [1, 2], [2, 3], [3, 4]] -H = generate_parity_check_matrix(check_to_qubits, 5) - -error = np.array([0, 0, 1, 0, 0], dtype=np.uint8) -syndrome = (H @ error) % 2 # which checks fire - -for decoder in (UnionFindDecoder(check_to_qubits, 5), BlossomDecoder(check_to_qubits, 5)): - correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8) - assert np.array_equal((H @ correction) % 2, syndrome) # H·c = s (mod 2) - print(type(decoder).__name__, correction) -`,a=`import stim -from qector_decoder_v3 import dem - -circuit = stim.Circuit.generated( - "surface_code:rotated_memory_z", distance=5, rounds=5, - after_clifford_depolarization=0.005, -) -graph = dem.from_stim(circuit.detector_error_model(decompose_errors=True)).collapse_to_graph() -decoder = graph.make_decoder("blossom") # uses the DEM's edge weights - -shots = 2_000 -dets, obs = circuit.compile_detector_sampler(seed=7).sample(shots, separate_observables=True) -fails = 0 -for d, o in zip(dets, obs): - correction = decoder.decode(d.astype("uint8")) - predicted = graph.predicted_observables(correction) - fails += int(predicted[0] != o[0]) -print(f"logical errors: {fails} / {shots}") -`,l=`import numpy as np -from qector_decoder_v3 import codes -from qector_decoder_v3.bposd import BpOsdDecoder - -# [[144,12,12]] bivariate bicycle code: A = x^3 + y + y^2, B = y^3 + x + x^2 -cx, cz = codes.bivariate_bicycle_code( - 12, 6, [("x", 3), ("y", 1), ("y", 2)], [("y", 3), ("x", 1), ("x", 2)] -) -H = cx.parity_check_matrix() -decoder = BpOsdDecoder(H, error_rate=0.01, osd_order=0) - -rng = np.random.default_rng(1) -error = (rng.random(H.shape[1]) < 0.01).astype(np.uint8) -syndrome = (H @ error) % 2 -correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8) -assert np.array_equal((H @ correction) % 2, syndrome) -print(H.shape, "syndrome reproduced") -`,m=`import sinter -import stim -from qector_decoder_v3.sinter_compat import qector_sinter_decoders - - -def main(): - tasks = [ - sinter.Task( - circuit=stim.Circuit.generated( - "surface_code:rotated_memory_z", distance=d, rounds=d, - after_clifford_depolarization=p, - ), - json_metadata={"d": d, "p": p}, - ) - for d in (3, 5) - for p in (0.002, 0.004) - ] - - stats = sinter.collect( - num_workers=2, tasks=tasks, - decoders=["qector_blossom"], - custom_decoders=qector_sinter_decoders(), - max_shots=2_000, max_errors=50, - ) - for s in sorted(stats, key=lambda s: (s.json_metadata["d"], s.json_metadata["p"])): - print(s.json_metadata, s.errors, "/", s.shots) - - -if __name__ == "__main__": # Sinter uses worker processes - main() -`,o=[{id:"install",title:"Install and check",text:'Install from PyPI. Wheels exist for CPython 3.9 to 3.14 on Linux x86_64, Windows x64 and macOS on Apple silicon, so there is nothing to compile. The tier stays "Community" until you activate a licence, and every decoder works on the CPU in that tier.',shell:'python -m pip install --upgrade "qector-decoder-v3>=1.0.1,<2" stim sinter',code:c,file:"step1_check.py"},{id:"first-decode",title:"Your first decode, checked",text:"Build a distance-5 repetition code, inject one error, and decode its syndrome with Union-Find and exact matching. The assert is the contract every QECTOR decoder keeps: the correction reproduces the syndrome, H·c = s (mod 2).",code:d,file:"step2_first_decode.py"},{id:"stim",title:"Decode a Stim circuit",text:"Generate a rotated surface-code memory experiment with Stim, turn its detector error model into a weighted matching graph, and count logical errors over sampled shots. The decoder uses the error model’s weights, so rare and common faults are treated differently.",code:a,file:"step3_stim.py"},{id:"qldpc",title:"qLDPC with BP-OSD",text:"Matching needs graph-like errors; qLDPC codes do not have them. Build the [[144,12,12]] bivariate bicycle code and decode a random error with belief propagation plus ordered statistics, again checking the syndrome.",code:l,file:"step4_qldpc.py"},{id:"sinter",title:"Scale up with Sinter",text:"Sinter runs many circuits across worker processes and collects statistics. QECTOR registers its decoders as Sinter custom decoders. Keep the main guard: Sinter starts worker processes.",code:m,file:"step5_sinter.py"}];function _(){return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Getting Started · QECTOR Decoder v3",description:"A 15-minute tutorial for QECTOR Decoder v3: install, a first checked decode, a Stim surface-code circuit, qLDPC decoding with BP-OSD, and Sinter. Every snippet is tested against version 1.0.1."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"About 15 minutes · Tested on 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Getting Started"}),e.jsxs("p",{className:"text-secondary text-lg leading-relaxed",children:["From ",e.jsx("code",{className:"font-mono text-cyan-200",children:"pip install"})," to decoding a surface-code circuit and a qLDPC code. Each step is a complete script you can copy and run."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto grid lg:grid-cols-[13rem_1fr] gap-10",children:[e.jsx("nav",{"aria-label":"Steps",className:"hidden lg:block",children:e.jsx("ol",{className:"sticky top-28 space-y-2 text-sm",children:o.map((t,n)=>e.jsx("li",{children:e.jsxs("a",{href:`#${t.id}`,className:"text-secondary hover:text-cyan-300",children:[n+1,". ",t.title]})},t.id))})}),e.jsxs("div",{className:"space-y-14 min-w-0",children:[o.map((t,n)=>e.jsxs("article",{id:t.id,className:"scroll-mt-28",children:[e.jsxs("p",{className:"text-cyan-300 text-xs font-semibold uppercase tracking-wider mb-1",children:["Step ",n+1]}),e.jsx("h2",{className:"text-2xl font-bold mb-3",children:t.title}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:t.text}),t.shell&&e.jsx("div",{className:"mb-4",children:e.jsx(s,{language:"bash",filename:"terminal",code:t.shell})}),e.jsx(s,{language:"python",filename:t.file,code:t.code.trimEnd()})]},t.id)),e.jsxs("div",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Where to go next"}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:["Every class and function, with signatures: the ",e.jsx(r,{to:"/technical-reference",className:"text-cyan-300 hover:underline",children:"API index"}),"."]}),e.jsxs("li",{children:["Choosing a decoder and the full feature set: ",e.jsx(r,{to:"/decoder",className:"text-cyan-300 hover:underline",children:"Decoder"})," and the ",e.jsx(r,{to:"/manual",className:"text-cyan-300 hover:underline",children:"user manual"}),"."]}),e.jsxs("li",{children:["Using QECTOR from Claude: the ",e.jsx(r,{to:"/claude-plugin",className:"text-cyan-300 hover:underline",children:"Claude plugin"}),"."]}),e.jsxs("li",{children:["GPU batch decoding and commercial use: ",e.jsx(r,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"plans"}),", from $79/month."]})]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-4",children:"Verified: each script above was run against the published qector-decoder-v3 1.0.1 wheel on Linux (CPython 3.13) on 6 November 2026. Logical-error counts depend on the random seed and noise settings; measure on your own workloads."})]})]})]})})]})}export{_ as default}; diff --git a/assets/HomeFR-DAGdU1jQ.js b/assets/HomeFR-DAGdU1jQ.js deleted file mode 100644 index f68112db..00000000 --- a/assets/HomeFR-DAGdU1jQ.js +++ /dev/null @@ -1,2 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,e as i,P as r,L as s,C as l}from"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const c=[{titre:"QECTOR Decoder v3",texte:"La bibliothèque Python à noyau Rust : Union-Find, MWPM exact (Blossom), BP-OSD et Relay-BP pour les codes qLDPC, décodage par lots CPU et GPU, intégration Stim et Sinter.",lien:"/fr/decoder",libelle:"Le décodeur"},{titre:"Plugiciel Claude",texte:"Un serveur MCP isolé du réseau (air-gapped) qui apporte le décodage vérifié dans Claude Code et Claude Desktop, avec schémas validés et versions signées.",lien:"/claude-plugin",libelle:"Le plugiciel (anglais)"},{titre:"Workbench",texte:"L’application de bureau gratuite pour Windows et Linux : constructeur de circuits, familles de codes et décodeurs, sans installation de Python.",lien:"/workbench",libelle:"Le Workbench (anglais)"}],o=[["Chaque correction est vérifiée","Chaque résultat satisfait H·c = s (mod 2) : la correction reproduit le syndrome."],["Licences hors ligne","Jetons Ed25519 vérifiés localement. Aucun serveur de licence, aucune télémétrie : fonctionne sur des machines isolées."],["Versions vérifiables","18 wheels construites dans GitHub Actions, avec provenance Sigstore et attestations PyPI, testées sur chaque système avant publication."],["Aucun nombre de postes","Une licence couvre l’usage interne de votre organisation, sur autant de machines et par autant de personnes que nécessaire."]];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"QECTOR · Décodage de correction d’erreurs quantiques pour Python",description:`QECTOR Decoder v3 : décodeurs QEC à noyau Rust pour Python (Union-Find, MWPM, BP-OSD, Relay-BP, GPU). Gratuit pour la recherche non commerciale; licences commerciales dès ${i(r.proMonthly)}/mois, vérifiées hors ligne.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/"},{lang:"fr",href:"https://qector.store/fr/"},{lang:"x-default",href:"https://qector.store/"}]}),e.jsxs("section",{className:"relative pt-36 pb-20 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-4xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"v1.0.1 · 18 wheels vérifiées"}),e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"Décodage QEC"})," pour Python"]}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-4",children:["Une seule bibliothèque pour plusieurs familles de décodeurs sur la même matrice de contrôle : Union-Find, MWPM exact, BP-OSD et Relay-BP pour les codes qLDPC, sur CPU et GPU, avec Stim et Sinter."," ",e.jsx("span",{className:"text-primary font-semibold",children:"Chaque correction est vérifiée contre son syndrome"}),", et les licences commerciales se vérifient hors ligne."]}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-10",children:["Gratuit pour la recherche universitaire et non commerciale. Forfaits commerciaux dès ",i(r.proMonthly),"/mois, avec garantie de remboursement de ",r.refundDays," jours."]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center mb-10",children:[e.jsx(s,{to:"/fr/pricing",className:"btn-gold px-8 py-4",children:"Voir les forfaits →"}),e.jsx(s,{to:"/fr/decoder",className:"btn-cyan px-8 py-4",children:"Découvrir le décodeur"})]}),e.jsx("div",{className:"max-w-2xl mx-auto text-left",children:e.jsx(l,{language:"bash",filename:"Démarrage rapide",code:`pip install qector-decoder-v3==1.0.1 -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})})]})]}),e.jsx("section",{className:"section-padding pb-16",children:e.jsx("div",{className:"max-w-6xl mx-auto grid sm:grid-cols-2 gap-6",children:o.map(([t,a])=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:a})]},t))})}),e.jsx("section",{className:"section-padding pb-16",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Les produits"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:c.map(t=>e.jsxs("div",{className:"card-surface flex flex-col",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:t.titre}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed flex-1",children:t.texte}),e.jsxs(s,{to:t.lien,hrefLang:t.lien.startsWith("/fr")?void 0:"en",className:"text-cyan-300 text-sm mt-4 hover:underline",children:[t.libelle," →"]})]},t.titre))})]})}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"En français"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx(s,{to:"/fr/decoder",className:"text-cyan-300 hover:underline",children:"Le décodeur"})," et sa ",e.jsx(s,{to:"/fr/license",className:"text-cyan-300 hover:underline",children:"licence"})," (usage gratuit, usage commercial, activation)."]}),e.jsxs("li",{children:[e.jsx(s,{to:"/fr/pricing",className:"text-cyan-300 hover:underline",children:"Tarifs et forfaits"})," : Pro, Labo, Pilote et Entreprise."]}),e.jsxs("li",{children:[e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),", version 2026-11."]}),e.jsxs("li",{children:[e.jsx(s,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"Politique de confidentialité"})," (Loi 25)."]}),e.jsxs("li",{children:[e.jsx(s,{to:"/fr/terms",className:"text-cyan-300 hover:underline",children:"Conditions d’utilisation"})," et ",e.jsx(s,{to:"/fr/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("p",{className:"text-secondary text-sm mt-4",children:["La documentation technique est en anglais. Pour toute question, écrivez-nous en français à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})}export{h as default}; diff --git a/assets/HomeFR-DzS_y1NC.js b/assets/HomeFR-DzS_y1NC.js deleted file mode 100644 index f4c64a1c..00000000 --- a/assets/HomeFR-DzS_y1NC.js +++ /dev/null @@ -1,2 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,e as a,P as r,L as t,C as l}from"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const c=[{titre:"QECTOR Decoder v3",texte:"La bibliothèque Python à noyau Rust : Union-Find, MWPM exact (Blossom), BP-OSD et Relay-BP pour les codes qLDPC, décodage par lots CPU et GPU, intégration Stim et Sinter.",lien:"/decoder",libelle:"Le décodeur (anglais)"},{titre:"Plugiciel Claude",texte:"Un serveur MCP isolé du réseau (air-gapped) qui apporte le décodage vérifié dans Claude Code et Claude Desktop, avec schémas validés et versions signées.",lien:"/claude-plugin",libelle:"Le plugiciel (anglais)"},{titre:"Workbench",texte:"L’application de bureau gratuite pour Windows et Linux : constructeur de circuits, familles de codes et décodeurs, sans installation de Python.",lien:"/workbench",libelle:"Le Workbench (anglais)"}],o=[["Chaque correction est vérifiée","Chaque résultat satisfait H·c = s (mod 2) : la correction reproduit le syndrome."],["Licences hors ligne","Jetons Ed25519 vérifiés localement. Aucun serveur de licence, aucune télémétrie : fonctionne sur des machines isolées."],["Versions vérifiables","18 wheels construites dans GitHub Actions, avec provenance Sigstore et attestations PyPI, testées sur chaque système avant publication."],["Aucun nombre de postes","Une licence couvre l’usage interne de votre organisation, sur autant de machines et par autant de personnes que nécessaire."]];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"QECTOR · Décodage de correction d’erreurs quantiques pour Python",description:`QECTOR Decoder v3 : décodeurs QEC à noyau Rust pour Python (Union-Find, MWPM, BP-OSD, Relay-BP, GPU). Gratuit pour la recherche non commerciale; licences commerciales dès ${a(r.proMonthly)}/mois, vérifiées hors ligne.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/"},{lang:"fr",href:"https://qector.store/fr/"},{lang:"x-default",href:"https://qector.store/"}]}),e.jsxs("section",{className:"relative pt-36 pb-20 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-4xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"v1.0.1 · 18 wheels vérifiées"}),e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"Décodage QEC"})," pour Python"]}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-4",children:["Une seule bibliothèque pour plusieurs familles de décodeurs sur la même matrice de contrôle : Union-Find, MWPM exact, BP-OSD et Relay-BP pour les codes qLDPC, sur CPU et GPU, avec Stim et Sinter."," ",e.jsx("span",{className:"text-primary font-semibold",children:"Chaque correction est vérifiée contre son syndrome"}),", et les licences commerciales se vérifient hors ligne."]}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-10",children:["Gratuit pour la recherche universitaire et non commerciale. Forfaits commerciaux dès ",a(r.proMonthly),"/mois, avec garantie de remboursement de ",r.refundDays," jours."]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center mb-10",children:[e.jsx(t,{to:"/fr/pricing",className:"btn-gold px-8 py-4",children:"Voir les forfaits →"}),e.jsx(t,{to:"/decoder",className:"btn-cyan px-8 py-4",hrefLang:"en",children:"Découvrir le décodeur"})]}),e.jsx("div",{className:"max-w-2xl mx-auto text-left",children:e.jsx(l,{language:"bash",filename:"Démarrage rapide",code:`pip install qector-decoder-v3==1.0.1 -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})})]})]}),e.jsx("section",{className:"section-padding pb-16",children:e.jsx("div",{className:"max-w-6xl mx-auto grid sm:grid-cols-2 gap-6",children:o.map(([s,i])=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:s}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:i})]},s))})}),e.jsx("section",{className:"section-padding pb-16",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Les produits"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:c.map(s=>e.jsxs("div",{className:"card-surface flex flex-col",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:s.titre}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed flex-1",children:s.texte}),e.jsxs(t,{to:s.lien,hrefLang:"en",className:"text-cyan-300 text-sm mt-4 hover:underline",children:[s.libelle," →"]})]},s.titre))})]})}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"En français"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx(t,{to:"/fr/pricing",className:"text-cyan-300 hover:underline",children:"Tarifs et forfaits"})," : Pro, Labo, Pilote et Entreprise."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),", version 2026-11."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"Politique de confidentialité"})," (Loi 25)."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/terms",className:"text-cyan-300 hover:underline",children:"Conditions d’utilisation"})," et ",e.jsx(t,{to:"/fr/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("p",{className:"text-secondary text-sm mt-4",children:["La documentation technique est en anglais. Pour toute question, écrivez-nous en français à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})}export{h as default}; diff --git a/assets/HomeFR-Jl_zglsD.js b/assets/HomeFR-Jl_zglsD.js deleted file mode 100644 index 11fe8ec6..00000000 --- a/assets/HomeFR-Jl_zglsD.js +++ /dev/null @@ -1,2 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,e as a,P as r,L as t,C as l}from"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const c=[{titre:"QECTOR Decoder v3",texte:"La bibliothèque Python à noyau Rust : Union-Find, MWPM exact (Blossom), BP-OSD et Relay-BP pour les codes qLDPC, décodage par lots CPU et GPU, intégration Stim et Sinter.",lien:"/decoder",libelle:"Le décodeur (anglais)"},{titre:"Plugiciel Claude",texte:"Un serveur MCP isolé du réseau (air-gapped) qui apporte le décodage vérifié dans Claude Code et Claude Desktop, avec schémas validés et versions signées.",lien:"/claude-plugin",libelle:"Le plugiciel (anglais)"},{titre:"Workbench",texte:"L’application de bureau gratuite pour Windows et Linux : constructeur de circuits, familles de codes et décodeurs, sans installation de Python.",lien:"/workbench",libelle:"Le Workbench (anglais)"}],o=[["Chaque correction est vérifiée","Chaque résultat satisfait H·c = s (mod 2) : la correction reproduit le syndrome."],["Licences hors ligne","Jetons Ed25519 vérifiés localement. Aucun serveur de licence, aucune télémétrie : fonctionne sur des machines isolées."],["Versions vérifiables","18 wheels construites dans GitHub Actions, avec provenance Sigstore et attestations PyPI, testées sur chaque système avant publication."],["Aucun nombre de postes","Une licence couvre l’usage interne de votre organisation, sur autant de machines et par autant de personnes que nécessaire."]];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"QECTOR · Décodage de correction d’erreurs quantiques pour Python",description:`QECTOR Decoder v3 : décodeurs QEC à noyau Rust pour Python (Union-Find, MWPM, BP-OSD, Relay-BP, GPU). Gratuit pour la recherche non commerciale; licences commerciales dès ${a(r.proMonthly)}/mois, vérifiées hors ligne.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/"},{lang:"fr",href:"https://qector.store/fr/"},{lang:"x-default",href:"https://qector.store/"}]}),e.jsxs("section",{className:"relative pt-36 pb-20 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-4xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"v1.0.1 · 18 wheels vérifiées"}),e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"Décodage QEC"})," pour Python"]}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-4",children:["Une seule bibliothèque pour plusieurs familles de décodeurs sur la même matrice de contrôle : Union-Find, MWPM exact, BP-OSD et Relay-BP pour les codes qLDPC, sur CPU et GPU, avec Stim et Sinter."," ",e.jsx("span",{className:"text-primary font-semibold",children:"Chaque correction est vérifiée contre son syndrome"}),", et les licences commerciales se vérifient hors ligne."]}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-10",children:["Gratuit pour la recherche universitaire et non commerciale. Forfaits commerciaux dès ",a(r.proMonthly),"/mois, avec garantie de remboursement de ",r.refundDays," jours."]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center mb-10",children:[e.jsx(t,{to:"/fr/pricing",className:"btn-gold px-8 py-4",children:"Voir les forfaits →"}),e.jsx(t,{to:"/decoder",className:"btn-cyan px-8 py-4",hrefLang:"en",children:"Découvrir le décodeur"})]}),e.jsx("div",{className:"max-w-2xl mx-auto text-left",children:e.jsx(l,{language:"bash",filename:"Démarrage rapide",code:`pip install qector-decoder-v3==1.0.1 -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})})]})]}),e.jsx("section",{className:"section-padding pb-16",children:e.jsx("div",{className:"max-w-6xl mx-auto grid sm:grid-cols-2 gap-6",children:o.map(([s,i])=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:s}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:i})]},s))})}),e.jsx("section",{className:"section-padding pb-16",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Les produits"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:c.map(s=>e.jsxs("div",{className:"card-surface flex flex-col",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:s.titre}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed flex-1",children:s.texte}),e.jsxs(t,{to:s.lien,hrefLang:"en",className:"text-cyan-300 text-sm mt-4 hover:underline",children:[s.libelle," →"]})]},s.titre))})]})}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"En français"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx(t,{to:"/fr/pricing",className:"text-cyan-300 hover:underline",children:"Tarifs et forfaits"})," : Pro, Labo, Pilote et Entreprise."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),", version 2026-11."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"Politique de confidentialité"})," (Loi 25)."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/terms",className:"text-cyan-300 hover:underline",children:"Conditions d’utilisation"})," et ",e.jsx(t,{to:"/fr/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("p",{className:"text-secondary text-sm mt-4",children:["La documentation technique est en anglais. Pour toute question, écrivez-nous en français à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})}export{h as default}; diff --git a/assets/HomeFR-hCJiffE8.js b/assets/HomeFR-hCJiffE8.js deleted file mode 100644 index 0586b83c..00000000 --- a/assets/HomeFR-hCJiffE8.js +++ /dev/null @@ -1,2 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,e as a,P as r,L as t,C as l}from"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const c=[{titre:"QECTOR Decoder v3",texte:"La bibliothèque Python à noyau Rust : Union-Find, MWPM exact (Blossom), BP-OSD et Relay-BP pour les codes qLDPC, décodage par lots CPU et GPU, intégration Stim et Sinter.",lien:"/decoder",libelle:"Le décodeur (anglais)"},{titre:"Plugiciel Claude",texte:"Un serveur MCP isolé du réseau (air-gapped) qui apporte le décodage vérifié dans Claude Code et Claude Desktop, avec schémas validés et versions signées.",lien:"/claude-plugin",libelle:"Le plugiciel (anglais)"},{titre:"Workbench",texte:"L’application de bureau gratuite pour Windows et Linux : constructeur de circuits, familles de codes et décodeurs, sans installation de Python.",lien:"/workbench",libelle:"Le Workbench (anglais)"}],o=[["Chaque correction est vérifiée","Chaque résultat satisfait H·c = s (mod 2) : la correction reproduit le syndrome."],["Licences hors ligne","Jetons Ed25519 vérifiés localement. Aucun serveur de licence, aucune télémétrie : fonctionne sur des machines isolées."],["Versions vérifiables","18 wheels construites dans GitHub Actions, avec provenance Sigstore et attestations PyPI, testées sur chaque système avant publication."],["Aucun nombre de postes","Une licence couvre l’usage interne de votre organisation, sur autant de machines et par autant de personnes que nécessaire."]];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"QECTOR · Décodage de correction d’erreurs quantiques pour Python",description:`QECTOR Decoder v3 : décodeurs QEC à noyau Rust pour Python (Union-Find, MWPM, BP-OSD, Relay-BP, GPU). Gratuit pour la recherche non commerciale; licences commerciales dès ${a(r.proMonthly)}/mois, vérifiées hors ligne.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/"},{lang:"fr",href:"https://qector.store/fr/"},{lang:"x-default",href:"https://qector.store/"}]}),e.jsxs("section",{className:"relative pt-36 pb-20 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-4xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"v1.0.1 · 18 wheels vérifiées"}),e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"Décodage QEC"})," pour Python"]}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-4",children:["Une seule bibliothèque pour plusieurs familles de décodeurs sur la même matrice de contrôle : Union-Find, MWPM exact, BP-OSD et Relay-BP pour les codes qLDPC, sur CPU et GPU, avec Stim et Sinter."," ",e.jsx("span",{className:"text-primary font-semibold",children:"Chaque correction est vérifiée contre son syndrome"}),", et les licences commerciales se vérifient hors ligne."]}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-10",children:["Gratuit pour la recherche universitaire et non commerciale. Forfaits commerciaux dès ",a(r.proMonthly),"/mois, avec garantie de remboursement de ",r.refundDays," jours."]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center mb-10",children:[e.jsx(t,{to:"/fr/pricing",className:"btn-gold px-8 py-4",children:"Voir les forfaits →"}),e.jsx(t,{to:"/decoder",className:"btn-cyan px-8 py-4",hrefLang:"en",children:"Découvrir le décodeur"})]}),e.jsx("div",{className:"max-w-2xl mx-auto text-left",children:e.jsx(l,{language:"bash",filename:"Démarrage rapide",code:`pip install qector-decoder-v3==1.0.1 -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})})]})]}),e.jsx("section",{className:"section-padding pb-16",children:e.jsx("div",{className:"max-w-6xl mx-auto grid sm:grid-cols-2 gap-6",children:o.map(([s,i])=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:s}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:i})]},s))})}),e.jsx("section",{className:"section-padding pb-16",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Les produits"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:c.map(s=>e.jsxs("div",{className:"card-surface flex flex-col",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:s.titre}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed flex-1",children:s.texte}),e.jsxs(t,{to:s.lien,hrefLang:"en",className:"text-cyan-300 text-sm mt-4 hover:underline",children:[s.libelle," →"]})]},s.titre))})]})}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"En français"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx(t,{to:"/fr/pricing",className:"text-cyan-300 hover:underline",children:"Tarifs et forfaits"})," : Pro, Labo, Pilote et Entreprise."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),", version 2026-11."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"Politique de confidentialité"})," (Loi 25)."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/terms",className:"text-cyan-300 hover:underline",children:"Conditions d’utilisation"})," et ",e.jsx(t,{to:"/fr/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("p",{className:"text-secondary text-sm mt-4",children:["La documentation technique est en anglais. Pour toute question, écrivez-nous en français à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})}export{h as default}; diff --git a/assets/HomeFR-hP6O4Cqx.js b/assets/HomeFR-hP6O4Cqx.js deleted file mode 100644 index 67f119b1..00000000 --- a/assets/HomeFR-hP6O4Cqx.js +++ /dev/null @@ -1,2 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n,e as a,P as r,L as t,C as l}from"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";const c=[{titre:"QECTOR Decoder v3",texte:"La bibliothèque Python à noyau Rust : Union-Find, MWPM exact (Blossom), BP-OSD et Relay-BP pour les codes qLDPC, décodage par lots CPU et GPU, intégration Stim et Sinter.",lien:"/decoder",libelle:"Le décodeur (anglais)"},{titre:"Plugiciel Claude",texte:"Un serveur MCP isolé du réseau (air-gapped) qui apporte le décodage vérifié dans Claude Code et Claude Desktop, avec schémas validés et versions signées.",lien:"/claude-plugin",libelle:"Le plugiciel (anglais)"},{titre:"Workbench",texte:"L’application de bureau gratuite pour Windows et Linux : constructeur de circuits, familles de codes et décodeurs, sans installation de Python.",lien:"/workbench",libelle:"Le Workbench (anglais)"}],o=[["Chaque correction est vérifiée","Chaque résultat satisfait H·c = s (mod 2) : la correction reproduit le syndrome."],["Licences hors ligne","Jetons Ed25519 vérifiés localement. Aucun serveur de licence, aucune télémétrie : fonctionne sur des machines isolées."],["Versions vérifiables","18 wheels construites dans GitHub Actions, avec provenance Sigstore et attestations PyPI, testées sur chaque système avant publication."],["Aucun nombre de postes","Une licence couvre l’usage interne de votre organisation, sur autant de machines et par autant de personnes que nécessaire."]];function h(){return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"QECTOR · Décodage de correction d’erreurs quantiques pour Python",description:`QECTOR Decoder v3 : décodeurs QEC à noyau Rust pour Python (Union-Find, MWPM, BP-OSD, Relay-BP, GPU). Gratuit pour la recherche non commerciale; licences commerciales dès ${a(r.proMonthly)}/mois, vérifiées hors ligne.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/"},{lang:"fr",href:"https://qector.store/fr/"},{lang:"x-default",href:"https://qector.store/"}]}),e.jsxs("section",{className:"relative pt-36 pb-20 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-4xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"v1.0.1 · 18 wheels vérifiées"}),e.jsxs("h1",{className:"text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"Décodage QEC"})," pour Python"]}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-4",children:["Une seule bibliothèque pour plusieurs familles de décodeurs sur la même matrice de contrôle : Union-Find, MWPM exact, BP-OSD et Relay-BP pour les codes qLDPC, sur CPU et GPU, avec Stim et Sinter."," ",e.jsx("span",{className:"text-primary font-semibold",children:"Chaque correction est vérifiée contre son syndrome"}),", et les licences commerciales se vérifient hors ligne."]}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-10",children:["Gratuit pour la recherche universitaire et non commerciale. Forfaits commerciaux dès ",a(r.proMonthly),"/mois, avec garantie de remboursement de ",r.refundDays," jours."]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center mb-10",children:[e.jsx(t,{to:"/fr/pricing",className:"btn-gold px-8 py-4",children:"Voir les forfaits →"}),e.jsx(t,{to:"/decoder",className:"btn-cyan px-8 py-4",hrefLang:"en",children:"Découvrir le décodeur"})]}),e.jsx("div",{className:"max-w-2xl mx-auto text-left",children:e.jsx(l,{language:"bash",filename:"Démarrage rapide",code:`pip install qector-decoder-v3==1.0.1 -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})})]})]}),e.jsx("section",{className:"section-padding pb-16",children:e.jsx("div",{className:"max-w-6xl mx-auto grid sm:grid-cols-2 gap-6",children:o.map(([s,i])=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-lg font-bold mb-2",children:s}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:i})]},s))})}),e.jsx("section",{className:"section-padding pb-16",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Les produits"}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:c.map(s=>e.jsxs("div",{className:"card-surface flex flex-col",children:[e.jsx("h3",{className:"text-lg font-bold mb-2",children:s.titre}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed flex-1",children:s.texte}),e.jsxs(t,{to:s.lien,hrefLang:"en",className:"text-cyan-300 text-sm mt-4 hover:underline",children:[s.libelle," →"]})]},s.titre))})]})}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"En français"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx(t,{to:"/fr/pricing",className:"text-cyan-300 hover:underline",children:"Tarifs et forfaits"})," : Pro, Labo, Pilote et Entreprise."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),", version 2026-11."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/privacy",className:"text-cyan-300 hover:underline",children:"Politique de confidentialité"})," (Loi 25)."]}),e.jsxs("li",{children:[e.jsx(t,{to:"/fr/terms",className:"text-cyan-300 hover:underline",children:"Conditions d’utilisation"})," et ",e.jsx(t,{to:"/fr/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("p",{className:"text-secondary text-sm mt-4",children:["La documentation technique est en anglais. Pour toute question, écrivez-nous en français à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})}export{h as default}; diff --git a/assets/Installer-AK92G1y0.js b/assets/Installer-AK92G1y0.js deleted file mode 100644 index 123516ad..00000000 --- a/assets/Installer-AK92G1y0.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-BN-vOeL2.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-B56SNEpM.js b/assets/Installer-B56SNEpM.js deleted file mode 100644 index ae36a9c3..00000000 --- a/assets/Installer-B56SNEpM.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-BcbVjARk.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-BPMW9xjA.js b/assets/Installer-BPMW9xjA.js deleted file mode 100644 index f95fec6f..00000000 --- a/assets/Installer-BPMW9xjA.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-Bh9DBCb3.js";import{N as a}from"./NeuralReveal-D-EQoOl2.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-C7vdQ6zA.js b/assets/Installer-C7vdQ6zA.js deleted file mode 100644 index ca8b52b4..00000000 --- a/assets/Installer-C7vdQ6zA.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-PdoH5kLF.js";import{N as a}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function c(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{c as default}; diff --git a/assets/Installer-C9MdHg8C.js b/assets/Installer-C9MdHg8C.js deleted file mode 100644 index f17a03b9..00000000 --- a/assets/Installer-C9MdHg8C.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-CcwlvHYJ.js";import{N as a}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function c(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{c as default}; diff --git a/assets/Installer-CCQImbh1.js b/assets/Installer-CCQImbh1.js deleted file mode 100644 index a09e1ac4..00000000 --- a/assets/Installer-CCQImbh1.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-DlmjLVYe.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-CHLZGdf0.js b/assets/Installer-CHLZGdf0.js deleted file mode 100644 index 3880a081..00000000 --- a/assets/Installer-CHLZGdf0.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-DRAXObZB.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-CeDfnoyS.js b/assets/Installer-CeDfnoyS.js deleted file mode 100644 index 107396f3..00000000 --- a/assets/Installer-CeDfnoyS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-BUYYSLdX.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-ClnL4KhH.js b/assets/Installer-ClnL4KhH.js deleted file mode 100644 index bdab08ed..00000000 --- a/assets/Installer-ClnL4KhH.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-abfjMTlQ.js";import{N as a}from"./NeuralReveal-D-EQoOl2.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-CxyEDIXg.js b/assets/Installer-CxyEDIXg.js deleted file mode 100644 index a2ed35ab..00000000 --- a/assets/Installer-CxyEDIXg.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-iVST85F-.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-DMQ52ZRS.js b/assets/Installer-DMQ52ZRS.js deleted file mode 100644 index ed51cb67..00000000 --- a/assets/Installer-DMQ52ZRS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-DkYdPRY7.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-DSAeCuP_.js b/assets/Installer-DSAeCuP_.js deleted file mode 100644 index 24d2cd27..00000000 --- a/assets/Installer-DSAeCuP_.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-DayaklK-.js";import{N as a}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function c(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{c as default}; diff --git a/assets/Installer-DhJxPZYS.js b/assets/Installer-DhJxPZYS.js deleted file mode 100644 index 9e17dc56..00000000 --- a/assets/Installer-DhJxPZYS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-CxWP17m6.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-DoCAdwGS.js b/assets/Installer-DoCAdwGS.js deleted file mode 100644 index 993e83b1..00000000 --- a/assets/Installer-DoCAdwGS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-_BpMZhV3.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-DsNWHCu5.js b/assets/Installer-DsNWHCu5.js deleted file mode 100644 index 1fadecee..00000000 --- a/assets/Installer-DsNWHCu5.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-CCmwjNGU.js";import{N as a}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function c(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{c as default}; diff --git a/assets/Installer-DwoF2NcB.js b/assets/Installer-DwoF2NcB.js deleted file mode 100644 index 3bede11f..00000000 --- a/assets/Installer-DwoF2NcB.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-WV1aysjN.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-DxsJdE4z.js b/assets/Installer-DxsJdE4z.js deleted file mode 100644 index 8e5ff0a8..00000000 --- a/assets/Installer-DxsJdE4z.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-CqAA-ZXu.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-fYNHzVom.js b/assets/Installer-fYNHzVom.js deleted file mode 100644 index f2792d76..00000000 --- a/assets/Installer-fYNHzVom.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-CpdATiEY.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/Installer-lZeDO-t9.js b/assets/Installer-lZeDO-t9.js deleted file mode 100644 index 8d6220dd..00000000 --- a/assets/Installer-lZeDO-t9.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-c1PDYu0j.js";import{N as a}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function c(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{c as default}; diff --git a/assets/Installer-o7IM3q6A.js b/assets/Installer-o7IM3q6A.js deleted file mode 100644 index 2973b5a5..00000000 --- a/assets/Installer-o7IM3q6A.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{u as t,S as n}from"./index-B9kEGiWi.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function x(){const{version:s}=t();return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Installation · QECTOR",description:"Install QECTOR Decoder v3 on Linux, macOS, or Windows. PyPI pip install with binary wheels."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Installation",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.0: 15 binary wheels for CPython 3.9-3.13, no sdist). One command on ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"Linux x86_64, macOS ARM64, and Windows amd64"}),". GPU backends optional."]}),e.jsx("div",{className:"inline-block px-6 py-3 bg-void border border-gridline rounded-xl font-mono text-sm text-cyan-300",children:"pip install qector-decoder-v3"})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"System Requirements"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm list-disc pl-5",children:[e.jsx("li",{children:"Python 3.9, 3.10, 3.11, 3.12, or 3.13"}),e.jsx("li",{children:"64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)"}),e.jsxs("li",{children:["Stim/Sinter/PyMatching are optional extras; install ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"qector-decoder-v3[stim]"})," when needed."]}),e.jsx("li",{children:"GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras."})]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-4 text-cyan-300",children:"Quick Install (Recommended)"}),e.jsx("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground",children:e.jsxs("div",{children:["pip install qector-decoder-v3==",s]})}),e.jsx("p",{className:"text-secondary text-sm mt-3",children:"This installs the latest stable release with pre-compiled binary wheels."}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["Optional extras: ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[stim]"})," (Stim/Sinter/PyMatching), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[bench]"})," (local measurement tools), ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"[all]"})," (full environment)."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Verify Installation"}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{children:'python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"'}),e.jsxs("div",{className:"text-green-400 font-semibold",children:["# Should print: ",s]}),e.jsx("div",{className:"mt-2",children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# 15-check environment diagnostic; reports PASS / WARN / FAIL per check"}),e.jsx("div",{className:"mt-2",children:`python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"`}),e.jsx("div",{className:"text-green-400",children:"# Should print: QECTOR OK"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Platform-Specific Notes"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Linux"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"macOS"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Windows"}),e.jsx("p",{className:"text-secondary text-sm",children:"Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent."})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Optional GPU Workflows"}),e.jsx("p",{className:"text-secondary text-sm mb-3",children:"GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available."}),e.jsxs("div",{className:"p-4 bg-void rounded-xl font-mono text-sm text-muted-foreground space-y-1",children:[e.jsx("div",{className:"text-cyan-300",children:"# Optional full environment"}),e.jsx("div",{children:'pip install "qector-decoder-v3[all]"'}),e.jsx("div",{className:"mt-2 text-cyan-300",children:"# Verify the installed package API and environment"}),e.jsx("div",{children:"qector-doctor"}),e.jsx("div",{className:"text-green-400",children:"# Read the diagnostic's backend-specific PASS / WARN / FAIL output"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Troubleshooting"}),e.jsxs("div",{className:"space-y-3 text-secondary text-sm",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"ImportError on macOS:"})," Ensure you have Python 3.9+ from python.org or Homebrew. The system Python may not work."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"GPU not detected:"})," Verify CUDA installation with ",e.jsx("code",{className:"text-cyan-300 font-mono",children:"nvidia-smi"}),". Check the package release documentation for supported CUDA versions."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-primary",children:"Slow import:"})," First import initializes the runtime and validates optional paths. Subsequent imports are fast."]})]})]})]})})]})}export{x as default}; diff --git a/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 b/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 deleted file mode 100644 index 0acaaff0..00000000 Binary files a/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 and /dev/null differ diff --git a/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 b/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 deleted file mode 100644 index f390922e..00000000 Binary files a/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 and /dev/null differ diff --git a/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 b/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 deleted file mode 100644 index 75344a1f..00000000 Binary files a/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 and /dev/null differ diff --git a/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 b/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 deleted file mode 100644 index 395f28be..00000000 Binary files a/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 and /dev/null differ diff --git a/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 b/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 deleted file mode 100644 index 735f6948..00000000 Binary files a/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 and /dev/null differ diff --git a/assets/KaTeX_Main-Bold-Cx986IdX.woff2 b/assets/KaTeX_Main-Bold-Cx986IdX.woff2 deleted file mode 100644 index ab2ad21d..00000000 Binary files a/assets/KaTeX_Main-Bold-Cx986IdX.woff2 and /dev/null differ diff --git a/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 b/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 deleted file mode 100644 index 5931794d..00000000 Binary files a/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 and /dev/null differ diff --git a/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 b/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 deleted file mode 100644 index b50920e1..00000000 Binary files a/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 and /dev/null differ diff --git a/assets/KaTeX_Main-Regular-B22Nviop.woff2 b/assets/KaTeX_Main-Regular-B22Nviop.woff2 deleted file mode 100644 index eb24a7ba..00000000 Binary files a/assets/KaTeX_Main-Regular-B22Nviop.woff2 and /dev/null differ diff --git a/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 b/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 deleted file mode 100644 index 29657023..00000000 Binary files a/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 and /dev/null differ diff --git a/assets/KaTeX_Math-Italic-t53AETM-.woff2 b/assets/KaTeX_Math-Italic-t53AETM-.woff2 deleted file mode 100644 index 215c143f..00000000 Binary files a/assets/KaTeX_Math-Italic-t53AETM-.woff2 and /dev/null differ diff --git a/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 b/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 deleted file mode 100644 index cfaa3bda..00000000 Binary files a/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 and /dev/null differ diff --git a/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 b/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 deleted file mode 100644 index 349c06dc..00000000 Binary files a/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 and /dev/null differ diff --git a/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 b/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 deleted file mode 100644 index a90eea85..00000000 Binary files a/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 and /dev/null differ diff --git a/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 b/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 deleted file mode 100644 index b3048fc1..00000000 Binary files a/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 and /dev/null differ diff --git a/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 b/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 deleted file mode 100644 index c5a8462f..00000000 Binary files a/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 and /dev/null differ diff --git a/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 b/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 deleted file mode 100644 index e1bccfe2..00000000 Binary files a/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 and /dev/null differ diff --git a/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 b/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 deleted file mode 100644 index 680c1308..00000000 Binary files a/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 and /dev/null differ diff --git a/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 b/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 deleted file mode 100644 index 771f1af7..00000000 Binary files a/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 and /dev/null differ diff --git a/assets/LegalPage-BXZvemzZ.js b/assets/LegalPage-BXZvemzZ.js deleted file mode 100644 index 0ccaea64..00000000 --- a/assets/LegalPage-BXZvemzZ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as x}from"./index-CcwlvHYJ.js";import{N as o}from"./NeuralReveal-Bsl9IGCr.js";const m="https://qector.store";function i(t){return`${m}${t==="/"?"/":`${t}/`}`}function h(t){const r=t.lang==="en"?t.path:t.twin,s=t.lang==="fr"?t.path:t.twin;return[{lang:"en",href:i(r)},{lang:"fr",href:i(s)},{lang:"x-default",href:i(r)}]}function p(t){const r=[],s=/\*\*([^*]+)\*\*|\[([^\]]+)\]\(([^)\s]+)\)|`([^`]+)`/g;let a=0,n;for(;(n=s.exec(t))!==null;)n.index>a&&r.push({kind:"text",text:t.slice(a,n.index)}),n[1]!==void 0?r.push({kind:"bold",text:n[1]}):n[4]!==void 0?r.push({kind:"code",text:n[4]}):r.push({kind:"link",text:n[2],href:n[3]}),a=s.lastIndex;return a{if(r.kind==="bold")return e.jsx("strong",{className:"text-primary",children:r.text},s);if(r.kind==="code")return e.jsx("code",{className:"font-mono text-[0.9em] text-cyan-200",children:r.text},s);if(r.kind==="link"){const a=r.href??"#";if(a.startsWith("/"))return e.jsx(x,{to:a,className:"text-cyan-300 hover:underline",children:r.text},s);const n=a.startsWith("http");return e.jsx("a",{href:a,className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",...n?{target:"_blank",rel:"noopener noreferrer"}:{},children:r.text},s)}return e.jsx("span",{children:r.text},s)})})}function g({doc:t}){const r=t.lang==="fr";return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:t.seoTitle,description:t.description,lang:t.lang,alternates:h(t)}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:t.badge}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:t.title,className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:e.jsx(l,{text:t.intro})}),t.version&&e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:t.version}),e.jsx("p",{className:"text-sm mt-4",children:e.jsx(x,{to:t.twin,hrefLang:r?"en":"fr",className:"text-cyan-300 hover:underline",children:r?"English version":"Version française"})})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("nav",{"aria-label":r?"Sommaire":"Contents",className:"card-surface",children:[e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-3",children:r?"Sommaire":"Contents"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-x-6 gap-y-1 text-sm list-none pl-0",children:t.sections.map(s=>e.jsx("li",{children:e.jsx("a",{href:`#${s.id}`,className:"text-secondary hover:text-cyan-300",children:s.heading})},s.id))})]}),t.sections.map(s=>e.jsxs("div",{id:s.id,className:`card-surface scroll-mt-24 ${s.accent?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:s.heading}),s.paras?.map((a,n)=>e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3 last:mb-0",children:e.jsx(l,{text:a})},n)),s.bullets&&e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-2",children:s.bullets.map((a,n)=>e.jsx("li",{children:e.jsx(l,{text:a})},n))}),s.table&&e.jsx("div",{className:"overflow-x-auto mt-3",children:e.jsxs("table",{className:"w-full text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 font-semibold text-primary",children:s.table.head[0]}),e.jsx("th",{className:"py-2 font-semibold text-primary",children:s.table.head[1]})]})}),e.jsx("tbody",{children:s.table.rows.map(([a,n],d)=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary md:whitespace-nowrap",children:e.jsx(l,{text:a})}),e.jsx("td",{className:"py-2 text-secondary",children:e.jsx(l,{text:n})})]},d))})]})})]},s.id))]})})]})}export{g as L}; diff --git a/assets/LegalPage-CFP-uSSS.js b/assets/LegalPage-CFP-uSSS.js deleted file mode 100644 index 7f6d838a..00000000 --- a/assets/LegalPage-CFP-uSSS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as x}from"./index-DayaklK-.js";import{N as o}from"./NeuralReveal-uYarhiMA.js";const m="https://qector.store";function i(t){return`${m}${t==="/"?"/":`${t}/`}`}function h(t){const r=t.lang==="en"?t.path:t.twin,s=t.lang==="fr"?t.path:t.twin;return[{lang:"en",href:i(r)},{lang:"fr",href:i(s)},{lang:"x-default",href:i(r)}]}function p(t){const r=[],s=/\*\*([^*]+)\*\*|\[([^\]]+)\]\(([^)\s]+)\)|`([^`]+)`/g;let n=0,a;for(;(a=s.exec(t))!==null;)a.index>n&&r.push({kind:"text",text:t.slice(n,a.index)}),a[1]!==void 0?r.push({kind:"bold",text:a[1]}):a[4]!==void 0?r.push({kind:"code",text:a[4]}):r.push({kind:"link",text:a[2],href:a[3]}),n=s.lastIndex;return n{if(r.kind==="bold")return e.jsx("strong",{className:"text-primary",children:r.text},s);if(r.kind==="code")return e.jsx("code",{className:"font-mono text-[0.9em] text-cyan-200",children:r.text},s);if(r.kind==="link"){const n=r.href??"#";if(n.startsWith("/"))return e.jsx(x,{to:n,className:"text-cyan-300 hover:underline",children:r.text},s);const a=n.startsWith("http");return e.jsx("a",{href:n,className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",...a?{target:"_blank",rel:"noopener noreferrer"}:{},children:r.text},s)}return e.jsx("span",{children:r.text},s)})})}function j({doc:t}){const r=t.lang==="fr";return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:t.seoTitle,description:t.description,lang:t.lang,alternates:h(t)}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:t.badge}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:t.title,className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:e.jsx(l,{text:t.intro})}),t.version&&e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:t.version}),e.jsx("p",{className:"text-sm mt-4",children:e.jsx(x,{to:t.twin,hrefLang:r?"en":"fr",className:"text-cyan-300 hover:underline",children:r?"English version":"Version française"})})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("nav",{"aria-label":r?"Sommaire":"Contents",className:"card-surface",children:[e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-3",children:r?"Sommaire":"Contents"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-x-6 gap-y-1 text-sm list-none pl-0",children:t.sections.map(s=>e.jsx("li",{children:e.jsx("a",{href:`#${s.id}`,className:"text-secondary hover:text-cyan-300",children:s.heading})},s.id))})]}),t.sections.map(s=>e.jsxs("div",{id:s.id,className:`card-surface scroll-mt-24 ${s.accent?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:s.heading}),s.paras?.map((n,a)=>e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3 last:mb-0",children:e.jsx(l,{text:n})},a)),s.bullets&&e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-2",children:s.bullets.map((n,a)=>e.jsx("li",{children:e.jsx(l,{text:n})},a))}),s.table&&e.jsx("div",{className:"overflow-x-auto mt-3",tabIndex:0,role:"region","aria-label":s.heading,children:e.jsxs("table",{className:"w-full text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 font-semibold text-primary",children:s.table.head[0]}),e.jsx("th",{className:"py-2 font-semibold text-primary",children:s.table.head[1]})]})}),e.jsx("tbody",{children:s.table.rows.map(([n,a],d)=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary md:whitespace-nowrap",children:e.jsx(l,{text:n})}),e.jsx("td",{className:"py-2 text-secondary",children:e.jsx(l,{text:a})})]},d))})]})})]},s.id))]})})]})}export{j as L}; diff --git a/assets/LegalPage-CclXHnEm.js b/assets/LegalPage-CclXHnEm.js deleted file mode 100644 index 887379b6..00000000 --- a/assets/LegalPage-CclXHnEm.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-abfjMTlQ.js";import{N as o}from"./NeuralReveal-D-EQoOl2.js";import{L as x}from"./vendor-PiU4YGcH.js";const m="https://qector.store";function i(t){return`${m}${t==="/"?"/":`${t}/`}`}function h(t){const r=t.lang==="en"?t.path:t.twin,s=t.lang==="fr"?t.path:t.twin;return[{lang:"en",href:i(r)},{lang:"fr",href:i(s)},{lang:"x-default",href:i(r)}]}function p(t){const r=[],s=/\*\*([^*]+)\*\*|\[([^\]]+)\]\(([^)\s]+)\)|`([^`]+)`/g;let a=0,n;for(;(n=s.exec(t))!==null;)n.index>a&&r.push({kind:"text",text:t.slice(a,n.index)}),n[1]!==void 0?r.push({kind:"bold",text:n[1]}):n[4]!==void 0?r.push({kind:"code",text:n[4]}):r.push({kind:"link",text:n[2],href:n[3]}),a=s.lastIndex;return a{if(r.kind==="bold")return e.jsx("strong",{className:"text-primary",children:r.text},s);if(r.kind==="code")return e.jsx("code",{className:"font-mono text-[0.9em] text-cyan-200",children:r.text},s);if(r.kind==="link"){const a=r.href??"#";if(a.startsWith("/"))return e.jsx(x,{to:a,className:"text-cyan-300 hover:underline",children:r.text},s);const n=a.startsWith("http");return e.jsx("a",{href:a,className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",...n?{target:"_blank",rel:"noopener noreferrer"}:{},children:r.text},s)}return e.jsx("span",{children:r.text},s)})})}function b({doc:t}){const r=t.lang==="fr";return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:t.seoTitle,description:t.description,lang:t.lang,alternates:h(t)}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:t.badge}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:t.title,className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:e.jsx(l,{text:t.intro})}),t.version&&e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:t.version}),e.jsx("p",{className:"text-sm mt-4",children:e.jsx(x,{to:t.twin,hrefLang:r?"en":"fr",className:"text-cyan-300 hover:underline",children:r?"English version":"Version française"})})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("nav",{"aria-label":r?"Sommaire":"Contents",className:"card-surface",children:[e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-3",children:r?"Sommaire":"Contents"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-x-6 gap-y-1 text-sm list-none pl-0",children:t.sections.map(s=>e.jsx("li",{children:e.jsx("a",{href:`#${s.id}`,className:"text-secondary hover:text-cyan-300",children:s.heading})},s.id))})]}),t.sections.map(s=>e.jsxs("div",{id:s.id,className:`card-surface scroll-mt-24 ${s.accent?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:s.heading}),s.paras?.map((a,n)=>e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3 last:mb-0",children:e.jsx(l,{text:a})},n)),s.bullets&&e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-2",children:s.bullets.map((a,n)=>e.jsx("li",{children:e.jsx(l,{text:a})},n))}),s.table&&e.jsx("div",{className:"overflow-x-auto mt-3",children:e.jsxs("table",{className:"w-full text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 font-semibold text-primary",children:s.table.head[0]}),e.jsx("th",{className:"py-2 font-semibold text-primary",children:s.table.head[1]})]})}),e.jsx("tbody",{children:s.table.rows.map(([a,n],d)=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary md:whitespace-nowrap",children:e.jsx(l,{text:a})}),e.jsx("td",{className:"py-2 text-secondary",children:e.jsx(l,{text:n})})]},d))})]})})]},s.id))]})})]})}export{b as L}; diff --git a/assets/LegalPage-D-Mi7GTG.js b/assets/LegalPage-D-Mi7GTG.js deleted file mode 100644 index 76156568..00000000 --- a/assets/LegalPage-D-Mi7GTG.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as x}from"./index-c1PDYu0j.js";import{N as o}from"./NeuralReveal-uYarhiMA.js";const m="https://qector.store";function i(t){return`${m}${t==="/"?"/":`${t}/`}`}function h(t){const r=t.lang==="en"?t.path:t.twin,s=t.lang==="fr"?t.path:t.twin;return[{lang:"en",href:i(r)},{lang:"fr",href:i(s)},{lang:"x-default",href:i(r)}]}function p(t){const r=[],s=/\*\*([^*]+)\*\*|\[([^\]]+)\]\(([^)\s]+)\)|`([^`]+)`/g;let n=0,a;for(;(a=s.exec(t))!==null;)a.index>n&&r.push({kind:"text",text:t.slice(n,a.index)}),a[1]!==void 0?r.push({kind:"bold",text:a[1]}):a[4]!==void 0?r.push({kind:"code",text:a[4]}):r.push({kind:"link",text:a[2],href:a[3]}),n=s.lastIndex;return n{if(r.kind==="bold")return e.jsx("strong",{className:"text-primary",children:r.text},s);if(r.kind==="code")return e.jsx("code",{className:"font-mono text-[0.9em] text-cyan-200",children:r.text},s);if(r.kind==="link"){const n=r.href??"#";if(n.startsWith("/"))return e.jsx(x,{to:n,className:"text-cyan-300 hover:underline",children:r.text},s);const a=n.startsWith("http");return e.jsx("a",{href:n,className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",...a?{target:"_blank",rel:"noopener noreferrer"}:{},children:r.text},s)}return e.jsx("span",{children:r.text},s)})})}function j({doc:t}){const r=t.lang==="fr";return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:t.seoTitle,description:t.description,lang:t.lang,alternates:h(t)}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:t.badge}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:t.title,className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:e.jsx(l,{text:t.intro})}),t.version&&e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:t.version}),e.jsx("p",{className:"text-sm mt-4",children:e.jsx(x,{to:t.twin,hrefLang:r?"en":"fr",className:"text-cyan-300 hover:underline",children:r?"English version":"Version française"})})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("nav",{"aria-label":r?"Sommaire":"Contents",className:"card-surface",children:[e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-3",children:r?"Sommaire":"Contents"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-x-6 gap-y-1 text-sm list-none pl-0",children:t.sections.map(s=>e.jsx("li",{children:e.jsx("a",{href:`#${s.id}`,className:"text-secondary hover:text-cyan-300",children:s.heading})},s.id))})]}),t.sections.map(s=>e.jsxs("div",{id:s.id,className:`card-surface scroll-mt-24 ${s.accent?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:s.heading}),s.paras?.map((n,a)=>e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3 last:mb-0",children:e.jsx(l,{text:n})},a)),s.bullets&&e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-2",children:s.bullets.map((n,a)=>e.jsx("li",{children:e.jsx(l,{text:n})},a))}),s.table&&e.jsx("div",{className:"overflow-x-auto mt-3",tabIndex:0,role:"region","aria-label":s.heading,children:e.jsxs("table",{className:"w-full text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 font-semibold text-primary",children:s.table.head[0]}),e.jsx("th",{className:"py-2 font-semibold text-primary",children:s.table.head[1]})]})}),e.jsx("tbody",{children:s.table.rows.map(([n,a],d)=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary md:whitespace-nowrap",children:e.jsx(l,{text:n})}),e.jsx("td",{className:"py-2 text-secondary",children:e.jsx(l,{text:a})})]},d))})]})})]},s.id))]})})]})}export{j as L}; diff --git a/assets/LegalPage-DvyIDT6j.js b/assets/LegalPage-DvyIDT6j.js deleted file mode 100644 index 21dd4832..00000000 --- a/assets/LegalPage-DvyIDT6j.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c}from"./index-Bh9DBCb3.js";import{N as o}from"./NeuralReveal-D-EQoOl2.js";import{L as x}from"./vendor-PiU4YGcH.js";const m="https://qector.store";function i(t){return`${m}${t==="/"?"/":`${t}/`}`}function h(t){const r=t.lang==="en"?t.path:t.twin,s=t.lang==="fr"?t.path:t.twin;return[{lang:"en",href:i(r)},{lang:"fr",href:i(s)},{lang:"x-default",href:i(r)}]}function p(t){const r=[],s=/\*\*([^*]+)\*\*|\[([^\]]+)\]\(([^)\s]+)\)|`([^`]+)`/g;let a=0,n;for(;(n=s.exec(t))!==null;)n.index>a&&r.push({kind:"text",text:t.slice(a,n.index)}),n[1]!==void 0?r.push({kind:"bold",text:n[1]}):n[4]!==void 0?r.push({kind:"code",text:n[4]}):r.push({kind:"link",text:n[2],href:n[3]}),a=s.lastIndex;return a{if(r.kind==="bold")return e.jsx("strong",{className:"text-primary",children:r.text},s);if(r.kind==="code")return e.jsx("code",{className:"font-mono text-[0.9em] text-cyan-200",children:r.text},s);if(r.kind==="link"){const a=r.href??"#";if(a.startsWith("/"))return e.jsx(x,{to:a,className:"text-cyan-300 hover:underline",children:r.text},s);const n=a.startsWith("http");return e.jsx("a",{href:a,className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",...n?{target:"_blank",rel:"noopener noreferrer"}:{},children:r.text},s)}return e.jsx("span",{children:r.text},s)})})}function b({doc:t}){const r=t.lang==="fr";return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:t.seoTitle,description:t.description,lang:t.lang,alternates:h(t)}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:t.badge}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:t.title,className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:e.jsx(l,{text:t.intro})}),t.version&&e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:t.version}),e.jsx("p",{className:"text-sm mt-4",children:e.jsx(x,{to:t.twin,hrefLang:r?"en":"fr",className:"text-cyan-300 hover:underline",children:r?"English version":"Version française"})})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("nav",{"aria-label":r?"Sommaire":"Contents",className:"card-surface",children:[e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-3",children:r?"Sommaire":"Contents"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-x-6 gap-y-1 text-sm list-none pl-0",children:t.sections.map(s=>e.jsx("li",{children:e.jsx("a",{href:`#${s.id}`,className:"text-secondary hover:text-cyan-300",children:s.heading})},s.id))})]}),t.sections.map(s=>e.jsxs("div",{id:s.id,className:`card-surface scroll-mt-24 ${s.accent?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:s.heading}),s.paras?.map((a,n)=>e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3 last:mb-0",children:e.jsx(l,{text:a})},n)),s.bullets&&e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-2",children:s.bullets.map((a,n)=>e.jsx("li",{children:e.jsx(l,{text:a})},n))}),s.table&&e.jsx("div",{className:"overflow-x-auto mt-3",children:e.jsxs("table",{className:"w-full text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 font-semibold text-primary",children:s.table.head[0]}),e.jsx("th",{className:"py-2 font-semibold text-primary",children:s.table.head[1]})]})}),e.jsx("tbody",{children:s.table.rows.map(([a,n],d)=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary md:whitespace-nowrap",children:e.jsx(l,{text:a})}),e.jsx("td",{className:"py-2 text-secondary",children:e.jsx(l,{text:n})})]},d))})]})})]},s.id))]})})]})}export{b as L}; diff --git a/assets/LegalPage-OlrhtE5C.js b/assets/LegalPage-OlrhtE5C.js deleted file mode 100644 index a0690260..00000000 --- a/assets/LegalPage-OlrhtE5C.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as x}from"./index-PdoH5kLF.js";import{N as o}from"./NeuralReveal-Bsl9IGCr.js";const m="https://qector.store";function i(t){return`${m}${t==="/"?"/":`${t}/`}`}function h(t){const r=t.lang==="en"?t.path:t.twin,s=t.lang==="fr"?t.path:t.twin;return[{lang:"en",href:i(r)},{lang:"fr",href:i(s)},{lang:"x-default",href:i(r)}]}function p(t){const r=[],s=/\*\*([^*]+)\*\*|\[([^\]]+)\]\(([^)\s]+)\)|`([^`]+)`/g;let a=0,n;for(;(n=s.exec(t))!==null;)n.index>a&&r.push({kind:"text",text:t.slice(a,n.index)}),n[1]!==void 0?r.push({kind:"bold",text:n[1]}):n[4]!==void 0?r.push({kind:"code",text:n[4]}):r.push({kind:"link",text:n[2],href:n[3]}),a=s.lastIndex;return a{if(r.kind==="bold")return e.jsx("strong",{className:"text-primary",children:r.text},s);if(r.kind==="code")return e.jsx("code",{className:"font-mono text-[0.9em] text-cyan-200",children:r.text},s);if(r.kind==="link"){const a=r.href??"#";if(a.startsWith("/"))return e.jsx(x,{to:a,className:"text-cyan-300 hover:underline",children:r.text},s);const n=a.startsWith("http");return e.jsx("a",{href:a,className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",...n?{target:"_blank",rel:"noopener noreferrer"}:{},children:r.text},s)}return e.jsx("span",{children:r.text},s)})})}function g({doc:t}){const r=t.lang==="fr";return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:t.seoTitle,description:t.description,lang:t.lang,alternates:h(t)}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:t.badge}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:t.title,className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:e.jsx(l,{text:t.intro})}),t.version&&e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:t.version}),e.jsx("p",{className:"text-sm mt-4",children:e.jsx(x,{to:t.twin,hrefLang:r?"en":"fr",className:"text-cyan-300 hover:underline",children:r?"English version":"Version française"})})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("nav",{"aria-label":r?"Sommaire":"Contents",className:"card-surface",children:[e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-3",children:r?"Sommaire":"Contents"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-x-6 gap-y-1 text-sm list-none pl-0",children:t.sections.map(s=>e.jsx("li",{children:e.jsx("a",{href:`#${s.id}`,className:"text-secondary hover:text-cyan-300",children:s.heading})},s.id))})]}),t.sections.map(s=>e.jsxs("div",{id:s.id,className:`card-surface scroll-mt-24 ${s.accent?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:s.heading}),s.paras?.map((a,n)=>e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3 last:mb-0",children:e.jsx(l,{text:a})},n)),s.bullets&&e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-2",children:s.bullets.map((a,n)=>e.jsx("li",{children:e.jsx(l,{text:a})},n))}),s.table&&e.jsx("div",{className:"overflow-x-auto mt-3",children:e.jsxs("table",{className:"w-full text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 font-semibold text-primary",children:s.table.head[0]}),e.jsx("th",{className:"py-2 font-semibold text-primary",children:s.table.head[1]})]})}),e.jsx("tbody",{children:s.table.rows.map(([a,n],d)=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary md:whitespace-nowrap",children:e.jsx(l,{text:a})}),e.jsx("td",{className:"py-2 text-secondary",children:e.jsx(l,{text:n})})]},d))})]})})]},s.id))]})})]})}export{g as L}; diff --git a/assets/LegalPage-k7aoVn24.js b/assets/LegalPage-k7aoVn24.js deleted file mode 100644 index 93f81ff6..00000000 --- a/assets/LegalPage-k7aoVn24.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,L as x}from"./index-CCmwjNGU.js";import{N as o}from"./NeuralReveal-uYarhiMA.js";const m="https://qector.store";function i(t){return`${m}${t==="/"?"/":`${t}/`}`}function h(t){const r=t.lang==="en"?t.path:t.twin,s=t.lang==="fr"?t.path:t.twin;return[{lang:"en",href:i(r)},{lang:"fr",href:i(s)},{lang:"x-default",href:i(r)}]}function p(t){const r=[],s=/\*\*([^*]+)\*\*|\[([^\]]+)\]\(([^)\s]+)\)|`([^`]+)`/g;let n=0,a;for(;(a=s.exec(t))!==null;)a.index>n&&r.push({kind:"text",text:t.slice(n,a.index)}),a[1]!==void 0?r.push({kind:"bold",text:a[1]}):a[4]!==void 0?r.push({kind:"code",text:a[4]}):r.push({kind:"link",text:a[2],href:a[3]}),n=s.lastIndex;return n{if(r.kind==="bold")return e.jsx("strong",{className:"text-primary",children:r.text},s);if(r.kind==="code")return e.jsx("code",{className:"font-mono text-[0.9em] text-cyan-200",children:r.text},s);if(r.kind==="link"){const n=r.href??"#";if(n.startsWith("/"))return e.jsx(x,{to:n,className:"text-cyan-300 hover:underline",children:r.text},s);const a=n.startsWith("http");return e.jsx("a",{href:n,className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",...a?{target:"_blank",rel:"noopener noreferrer"}:{},children:r.text},s)}return e.jsx("span",{children:r.text},s)})})}function j({doc:t}){const r=t.lang==="fr";return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:t.seoTitle,description:t.description,lang:t.lang,alternates:h(t)}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:t.badge}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:t.title,className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:e.jsx(l,{text:t.intro})}),t.version&&e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:t.version}),e.jsx("p",{className:"text-sm mt-4",children:e.jsx(x,{to:t.twin,hrefLang:r?"en":"fr",className:"text-cyan-300 hover:underline",children:r?"English version":"Version française"})})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("nav",{"aria-label":r?"Sommaire":"Contents",className:"card-surface",children:[e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-3",children:r?"Sommaire":"Contents"}),e.jsx("ul",{className:"grid sm:grid-cols-2 gap-x-6 gap-y-1 text-sm list-none pl-0",children:t.sections.map(s=>e.jsx("li",{children:e.jsx("a",{href:`#${s.id}`,className:"text-secondary hover:text-cyan-300",children:s.heading})},s.id))})]}),t.sections.map(s=>e.jsxs("div",{id:s.id,className:`card-surface scroll-mt-24 ${s.accent?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:s.heading}),s.paras?.map((n,a)=>e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3 last:mb-0",children:e.jsx(l,{text:n})},a)),s.bullets&&e.jsx("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-2",children:s.bullets.map((n,a)=>e.jsx("li",{children:e.jsx(l,{text:n})},a))}),s.table&&e.jsx("div",{className:"overflow-x-auto mt-3",tabIndex:0,role:"region","aria-label":s.heading,children:e.jsxs("table",{className:"w-full text-sm text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 font-semibold text-primary",children:s.table.head[0]}),e.jsx("th",{className:"py-2 font-semibold text-primary",children:s.table.head[1]})]})}),e.jsx("tbody",{children:s.table.rows.map(([n,a],d)=>e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary md:whitespace-nowrap",children:e.jsx(l,{text:n})}),e.jsx("td",{className:"py-2 text-secondary",children:e.jsx(l,{text:a})})]},d))})]})})]},s.id))]})})]})}export{j as L}; diff --git a/assets/License-2ghqe3kh.js b/assets/License-2ghqe3kh.js deleted file mode 100644 index 02e6f2d4..00000000 --- a/assets/License-2ghqe3kh.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-DRAXObZB.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-4Bojqpc8.js b/assets/License-4Bojqpc8.js deleted file mode 100644 index 64debf7a..00000000 --- a/assets/License-4Bojqpc8.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-DlmjLVYe.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month with a free 14-day trial."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"free 14-day trial"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro for one named user, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Try it first with the free 14-day trial on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-BMVCbHh5.js b/assets/License-BMVCbHh5.js deleted file mode 100644 index bac7517d..00000000 --- a/assets/License-BMVCbHh5.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t,L as s}from"./index-DayaklK-.js";import{N as r}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function l(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Every paid plan is governed by the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," ","(",e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"version française"}),"). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{l as default}; diff --git a/assets/License-BVQmOrwC.js b/assets/License-BVQmOrwC.js deleted file mode 100644 index 3e9584f1..00000000 --- a/assets/License-BVQmOrwC.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-BcbVjARk.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and v1.0.0 token activation procedure. PolyForm Noncommercial for community use; written commercial licenses available."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a written agreement from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$499"})," (evaluation) or ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$1,299/yr"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Government and defense contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solo / Indie Perpetual ($3,299 one-time): same rights as the annual tier for v3.x, including all v3.x patch and minor updates; major version upgrades such as v4.0 require a new license."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features, distance caps of 7, 19, or 63 depending on tier, and GPU batch paths on Pro and Enterprise tiers."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered instantly and all sales are final: see the"," ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". The $499 evaluation is the creditable way to evaluate before committing."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"python -m pip install --upgrade qector-decoder-v3==1.0.0"})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both v1.0.0 variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'}),". It must print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-Bbjd5pqD.js b/assets/License-Bbjd5pqD.js deleted file mode 100644 index d3921fa6..00000000 --- a/assets/License-Bbjd5pqD.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-_BpMZhV3.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and v1.0.0 token activation procedure. PolyForm Noncommercial for community use; written commercial licenses available."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a written agreement from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$499"})," (evaluation) or ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$1,299/yr"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Government and defense contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solo / Indie Perpetual ($3,299 one-time): same rights as the annual tier for v3.x, including all v3.x patch and minor updates; major version upgrades such as v4.0 require a new license."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). No functionality is gated, degraded, or disabled."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered instantly and all sales are final: see the"," ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". The $499 evaluation is the creditable way to evaluate before committing."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"python -m pip install --upgrade qector-decoder-v3==1.0.0"})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both v1.0.0 variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'}),". It must print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-BfOBkHYL.js b/assets/License-BfOBkHYL.js deleted file mode 100644 index c9e8bb51..00000000 --- a/assets/License-BfOBkHYL.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t,L as s}from"./index-PdoH5kLF.js";import{N as r}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function l(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Every paid plan is governed by the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," ","(",e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"version française"}),"). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{l as default}; diff --git a/assets/License-CLXCCxwS.js b/assets/License-CLXCCxwS.js deleted file mode 100644 index 479f5ea0..00000000 --- a/assets/License-CLXCCxwS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-abfjMTlQ.js";import{N as r}from"./NeuralReveal-D-EQoOl2.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Every paid plan is governed by the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," ","(",e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"version française"}),"). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-CSNrV1_I.js b/assets/License-CSNrV1_I.js deleted file mode 100644 index 9685204c..00000000 --- a/assets/License-CSNrV1_I.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-DkYdPRY7.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-CUAefKwM.js b/assets/License-CUAefKwM.js deleted file mode 100644 index df4c40b2..00000000 --- a/assets/License-CUAefKwM.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-B9kEGiWi.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and v1.0.0 token activation procedure. PolyForm Noncommercial for community use; written commercial licenses available."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a written agreement from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$499"})," (evaluation) or ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$1,299/yr"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Government and defense contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solo / Indie Perpetual ($3,299 one-time): same rights as the annual tier for v3.x, including all v3.x patch and minor updates; major version upgrades such as v4.0 require a new license."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). No functionality is gated, degraded, or disabled."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered instantly and all sales are final: see the"," ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". The $499 evaluation is the creditable way to evaluate before committing."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"python -m pip install --upgrade qector-decoder-v3==1.0.0"})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both v1.0.0 variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'}),". It must print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-CXS5aYz7.js b/assets/License-CXS5aYz7.js deleted file mode 100644 index 523eb8d8..00000000 --- a/assets/License-CXS5aYz7.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t,L as s}from"./index-CCmwjNGU.js";import{N as r}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function o(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped).",alternates:[{lang:"en",href:"https://qector.store/license/"},{lang:"fr",href:"https://qector.store/fr/license/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Every paid plan is governed by the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," ","(",e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"version française"}),"). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{o as default}; diff --git a/assets/License-CeBx9XeU.js b/assets/License-CeBx9XeU.js deleted file mode 100644 index 74736bdd..00000000 --- a/assets/License-CeBx9XeU.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-WV1aysjN.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month with a free 14-day trial."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"free 14-day trial"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Government and defense contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro for one named user, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Try it first with the free 14-day trial on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-CqqH5PUX.js b/assets/License-CqqH5PUX.js deleted file mode 100644 index 9f713003..00000000 --- a/assets/License-CqqH5PUX.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-BUYYSLdX.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-D7X_SmnO.js b/assets/License-D7X_SmnO.js deleted file mode 100644 index 83298cd6..00000000 --- a/assets/License-D7X_SmnO.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-iVST85F-.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and v1.0.0 token activation procedure. PolyForm Noncommercial for community use; written commercial licenses available."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a written agreement from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$499"})," (evaluation) or ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$1,299/yr"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Government and defense contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solo / Indie Perpetual ($3,299 one-time): same rights as the annual tier for v3.x, including all v3.x patch and minor updates; major version upgrades such as v4.0 require a new license."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). No functionality is gated, degraded, or disabled."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered instantly and all sales are final: see the"," ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". The $499 evaluation is the creditable way to evaluate before committing."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"python -m pip install --upgrade qector-decoder-v3==1.0.0"})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both v1.0.0 variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'}),". It must print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-DC6asr5h.js b/assets/License-DC6asr5h.js deleted file mode 100644 index e7a150c0..00000000 --- a/assets/License-DC6asr5h.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-CxWP17m6.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-DDdBqsPy.js b/assets/License-DDdBqsPy.js deleted file mode 100644 index b2cc322f..00000000 --- a/assets/License-DDdBqsPy.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-Bh9DBCb3.js";import{N as r}from"./NeuralReveal-D-EQoOl2.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Every paid plan is governed by the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," ","(",e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"version française"}),"). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-DHRrrKKE.js b/assets/License-DHRrrKKE.js deleted file mode 100644 index 158c5f81..00000000 --- a/assets/License-DHRrrKKE.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-BN-vOeL2.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month with a free 14-day trial."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"free 14-day trial"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Government and defense contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro for one named user, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Try it first with the free 14-day trial on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-DxqQ4a3A.js b/assets/License-DxqQ4a3A.js deleted file mode 100644 index 8ee1c9a6..00000000 --- a/assets/License-DxqQ4a3A.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t,L as s}from"./index-CcwlvHYJ.js";import{N as r}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function l(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Every paid plan is governed by the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," ","(",e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"version française"}),"). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{l as default}; diff --git a/assets/License-PdOsBDOv.js b/assets/License-PdOsBDOv.js deleted file mode 100644 index b0bd8430..00000000 --- a/assets/License-PdOsBDOv.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t,L as s}from"./index-c1PDYu0j.js";import{N as r}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function l(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month, verified offline (air-gapped)."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"14-day money-back guarantee"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Every paid plan is governed by the"," ",e.jsx(s,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," ","(",e.jsx(s,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"version française"}),"). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Plans are on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{l as default}; diff --git a/assets/License-qW4Azk-u.js b/assets/License-qW4Azk-u.js deleted file mode 100644 index 9b028e52..00000000 --- a/assets/License-qW4Azk-u.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-CqAA-ZXu.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month with a free 14-day trial."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"free 14-day trial"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Use by universities, public research organisations, charities and government institutions, whatever their source of funding"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Company work on government, defence or university contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro for one named user, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Try it first with the free 14-day trial on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/License-usilVdvV.js b/assets/License-usilVdvV.js deleted file mode 100644 index 567a94af..00000000 --- a/assets/License-usilVdvV.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-CpdATiEY.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as s}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"License · QECTOR",description:"QECTOR Decoder v3 license terms and token activation procedure. PolyForm Noncommercial for community use; commercial plans from $79/month with a free 14-day trial."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"License",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["QECTOR Decoder v3 is ",e.jsx("span",{className:"text-primary font-semibold",children:"Source-Available"})," (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"$79/month"}),", with a ",e.jsx("span",{className:"text-cyan-300 font-semibold",children:"free 14-day trial"}),". The Workbench GUI is free."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(s,{to:"/pricing",className:"btn-cyan",children:"View Pricing"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact for Commercial"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Community License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 is released under the ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". This means you can use, modify, and distribute the software for non-commercial purposes free of charge."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permitted (Non-Commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Personal research and learning"}),e.jsx("li",{children:"• Academic research and teaching"}),e.jsx("li",{children:"• Non-commercial open-source projects"}),e.jsx("li",{children:"• Publishing benchmark results (with attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Requires Commercial License"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Commercial product integration"}),e.jsx("li",{children:"• Internal commercial R&D with value extraction"}),e.jsx("li",{children:"• Government and defense contracts"}),e.jsx("li",{children:"• Redistribution in commercial products"}),e.jsx("li",{children:"• SaaS / hosted API usage"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"})," for tier details."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All commercial licenses include: written license agreement, commercial use rights (internal), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," for OEM/SaaS licensing."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Perpetual licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Pro Perpetual ($1,990 one-time): the same rights as Pro for one named user, for every 3.x release including all patch and minor updates; a major version such as 4.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms."})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Commercial Addendum: What a Paid License Changes"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Grants the commercial use that PolyForm Noncommercial withholds, for the seats and term you purchased."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Internal use only."})," Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them."]}),e.jsxs("li",{children:["• Activated by setting ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"The package is identical for licensed and unlicensed users."})," Without a token, a licensing notice prints on import (suppressible with ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_SILENT=1"}),"). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_ENFORCE=1"})," is set."]}),e.jsx("li",{children:"• No warranty, indemnification, exclusivity, trademark, or patent grant is included by default."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the ",e.jsx(s,{to:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),". A refunded licence ends on refund. Try it first with the free 14-day trial on the"," ",e.jsx(s,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),"."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"License Activation Procedure"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Verify the purchase."})," The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Install the runtime."})," Use ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," from the official PyPI project."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Activate both variables."})," Set ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE"})," and ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"QECTOR_LICENSE_KEY"})," to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Verify offline."})," Run ",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),". It must print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"; no license server or phone-home is involved."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Preserve the audit record."})," Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["If either email is missing or the token fails verification, contact ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Full License Text"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","and is bundled verbatim with every package distribution (",e.jsx("code",{className:"text-cyan-300 font-mono text-xs",children:"LICENSE"})," in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Third-Party Licenses"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them."})]})]})})]})}export{m as default}; diff --git a/assets/LicenseAgreement-6bmCtLLY.js b/assets/LicenseAgreement-6bmCtLLY.js deleted file mode 100644 index 21a34034..00000000 --- a/assets/LicenseAgreement-6bmCtLLY.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as r}from"./LegalPage-k7aoVn24.js";import{l as t}from"./licenseAgreement-SdRZXyQm.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function f(){return e.jsx(r,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreement-BnmISf1J.js b/assets/LicenseAgreement-BnmISf1J.js deleted file mode 100644 index aa83a8cb..00000000 --- a/assets/LicenseAgreement-BnmISf1J.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as r}from"./LegalPage-D-Mi7GTG.js";import{l as t}from"./licenseAgreement-BVRBs70C.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function f(){return e.jsx(r,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreement-CFfEeDQ9.js b/assets/LicenseAgreement-CFfEeDQ9.js deleted file mode 100644 index 6cbc84d0..00000000 --- a/assets/LicenseAgreement-CFfEeDQ9.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as r}from"./LegalPage-BXZvemzZ.js";import{l as t}from"./licenseAgreement-BVRBs70C.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function f(){return e.jsx(r,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreement-DNUn9QnG.js b/assets/LicenseAgreement-DNUn9QnG.js deleted file mode 100644 index b915f6db..00000000 --- a/assets/LicenseAgreement-DNUn9QnG.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-CclXHnEm.js";import{l as e}from"./licenseAgreement-BCkY28fp.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function g(){return r.jsx(t,{doc:e})}export{g as default}; diff --git a/assets/LicenseAgreement-DRoDblCm.js b/assets/LicenseAgreement-DRoDblCm.js deleted file mode 100644 index 4168e2fd..00000000 --- a/assets/LicenseAgreement-DRoDblCm.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as r}from"./LegalPage-OlrhtE5C.js";import{l as t}from"./licenseAgreement-BVRBs70C.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function f(){return e.jsx(r,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreement-DybwV0lD.js b/assets/LicenseAgreement-DybwV0lD.js deleted file mode 100644 index 750e1c1d..00000000 --- a/assets/LicenseAgreement-DybwV0lD.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as r}from"./LegalPage-CFP-uSSS.js";import{l as t}from"./licenseAgreement-BVRBs70C.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function f(){return e.jsx(r,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreement-prqWmpN4.js b/assets/LicenseAgreement-prqWmpN4.js deleted file mode 100644 index d05f04b8..00000000 --- a/assets/LicenseAgreement-prqWmpN4.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-DvyIDT6j.js";import{l as e}from"./licenseAgreement-BVRBs70C.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function g(){return r.jsx(t,{doc:e})}export{g as default}; diff --git a/assets/LicenseAgreementFR-B4ZVCapm.js b/assets/LicenseAgreementFR-B4ZVCapm.js deleted file mode 100644 index a2535b37..00000000 --- a/assets/LicenseAgreementFR-B4ZVCapm.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as e}from"./LegalPage-BXZvemzZ.js";import{a as t}from"./licenseAgreement-BVRBs70C.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function f(){return r.jsx(e,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreementFR-CB5VPHTj.js b/assets/LicenseAgreementFR-CB5VPHTj.js deleted file mode 100644 index adf34146..00000000 --- a/assets/LicenseAgreementFR-CB5VPHTj.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-CclXHnEm.js";import{a as e}from"./licenseAgreement-BCkY28fp.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function g(){return r.jsx(t,{doc:e})}export{g as default}; diff --git a/assets/LicenseAgreementFR-CCa0fXfI.js b/assets/LicenseAgreementFR-CCa0fXfI.js deleted file mode 100644 index ce4ec603..00000000 --- a/assets/LicenseAgreementFR-CCa0fXfI.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as e}from"./LegalPage-k7aoVn24.js";import{a as t}from"./licenseAgreement-SdRZXyQm.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function f(){return r.jsx(e,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreementFR-D5JK6868.js b/assets/LicenseAgreementFR-D5JK6868.js deleted file mode 100644 index 01d7319d..00000000 --- a/assets/LicenseAgreementFR-D5JK6868.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as e}from"./LegalPage-D-Mi7GTG.js";import{a as t}from"./licenseAgreement-BVRBs70C.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function f(){return r.jsx(e,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreementFR-IumvCzu-.js b/assets/LicenseAgreementFR-IumvCzu-.js deleted file mode 100644 index 0617e732..00000000 --- a/assets/LicenseAgreementFR-IumvCzu-.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as e}from"./LegalPage-OlrhtE5C.js";import{a as t}from"./licenseAgreement-BVRBs70C.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function f(){return r.jsx(e,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreementFR-S73MctF5.js b/assets/LicenseAgreementFR-S73MctF5.js deleted file mode 100644 index 2c35e338..00000000 --- a/assets/LicenseAgreementFR-S73MctF5.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as e}from"./LegalPage-CFP-uSSS.js";import{a as t}from"./licenseAgreement-BVRBs70C.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function f(){return r.jsx(e,{doc:t})}export{f as default}; diff --git a/assets/LicenseAgreementFR-vtWAZWNF.js b/assets/LicenseAgreementFR-vtWAZWNF.js deleted file mode 100644 index 01940a0e..00000000 --- a/assets/LicenseAgreementFR-vtWAZWNF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-DvyIDT6j.js";import{a as e}from"./licenseAgreement-BVRBs70C.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function g(){return r.jsx(t,{doc:e})}export{g as default}; diff --git a/assets/LicenseFR-Ckd0MEiL.js b/assets/LicenseFR-Ckd0MEiL.js deleted file mode 100644 index 9fecddc3..00000000 --- a/assets/LicenseFR-Ckd0MEiL.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i,e as n,P as r,L as a}from"./index-CCmwjNGU.js";import{N as t}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const s="text-cyan-300 font-mono text-xs";function u(){return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Licence · QECTOR",description:`Conditions de licence de QECTOR Decoder v3 et procédure d’activation du jeton. PolyForm Noncommercial pour l’usage communautaire; forfaits commerciaux dès ${n(r.proMonthly)}/mois, vérifiés hors ligne.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/license/"},{lang:"fr",href:"https://qector.store/fr/license/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"PolyForm Noncommercial 1.0.0 · Gratuit pour la recherche · Usage commercial sous licence · Mis à jour en novembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Licence",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Le code source de QECTOR Decoder v3 est ",e.jsx("span",{className:"text-primary font-semibold",children:"disponible"}),", mais son usage commercial n’est pas gratuit. Gratuit pour l’usage personnel, académique et la recherche non commerciale. L’usage commercial exige un forfait payant dès"," ",e.jsxs("span",{className:"text-cyan-300 font-semibold",children:[n(r.proMonthly),"/mois"]}),", avec une"," ",e.jsxs("span",{className:"text-cyan-300 font-semibold",children:["garantie de remboursement de ",r.refundDays," jours"]}),". Le Workbench est gratuit."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/fr/pricing",className:"btn-cyan",children:"Voir les tarifs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Nous écrire"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence communautaire"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["QECTOR Decoder v3 est publié sous la ",e.jsx("strong",{className:"text-primary",children:"PolyForm Noncommercial License 1.0.0"}),". Vous pouvez utiliser, modifier et distribuer le logiciel gratuitement à des fins non commerciales."]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"Permis (non commercial)"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Recherche et apprentissage personnels"}),e.jsx("li",{children:"• Recherche et enseignement universitaires"}),e.jsx("li",{children:"• Usage par les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales, quelle que soit leur source de financement"}),e.jsx("li",{children:"• Projets libres non commerciaux"}),e.jsx("li",{children:"• Publication de résultats de mesures (avec attribution)"})]})]}),e.jsxs("div",{className:"p-4 bg-void rounded-xl mt-4",children:[e.jsx("h3",{className:"text-gold-400 font-semibold text-sm mb-2",children:"Exige une licence commerciale"}),e.jsxs("ul",{className:"space-y-1 text-secondary text-sm",children:[e.jsx("li",{children:"• Intégration dans un produit commercial"}),e.jsx("li",{children:"• R-D commerciale interne"}),e.jsx("li",{children:"• Travail d’une entreprise dans le cadre de contrats gouvernementaux, de défense ou universitaires"}),e.jsx("li",{children:"• Redistribution dans des produits commerciaux"}),e.jsx("li",{children:"• Usage en SaaS ou par API hébergée"})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence commerciale"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Chaque forfait payant est régi par le"," ",e.jsx(a,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"})," ","(",e.jsx(a,{to:"/license-agreement",hrefLang:"en",className:"text-cyan-300 hover:underline",children:"English version"}),"). Toutes les licences commerciales comprennent le droit d’usage commercial (interne, sans nombre de postes), des ensembles d’artefacts reproductibles et l’examen prioritaire des bogues. La redistribution et les droits OEM ne sont pas inclus par défaut; écrivez à ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," pour une licence OEM ou SaaS. Le détail des paliers est sur la page ",e.jsx(a,{to:"/fr/pricing",className:"text-cyan-300 hover:underline",children:"Tarifs"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licences perpétuelles"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Pro Perpétuel (",n(r.proPerpetual),", paiement unique) : les mêmes droits que Pro, pour toutes les versions 1.x de qector-decoder-v3, y compris les correctifs et les mises à jour mineures; une nouvelle version majeure comme la 2.0 exige une nouvelle licence. Les licences achetées auparavant sous le nom Solo / Indie Perpétuel conservent leurs conditions d’origine."]})]}),e.jsxs("div",{className:"card-surface border-gold-400/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Ce que change une licence payante"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm",children:[e.jsx("li",{children:"• Accorde l’usage commercial que PolyForm Noncommercial exclut, pour la durée achetée."}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Usage interne seulement."})," La redistribution, la sous-licence, l’intégration OEM et les services SaaS ou API hébergées offerts à des clients sont exclus, sauf entente écrite Entreprise ou OEM."]}),e.jsxs("li",{children:["• S’active en réglant ",e.jsx("code",{className:s,children:"QECTOR_LICENSE"})," et ",e.jsx("code",{className:s,children:"QECTOR_LICENSE_KEY"})," à votre jeton Ed25519. La vérification se fait hors ligne, avec une clé publique intégrée au paquet : aucun serveur de licences, aucune communication sortante, fonctionne sur un réseau isolé."]}),e.jsxs("li",{children:["• ",e.jsx("strong",{className:"text-primary",children:"Le paquet est identique avec ou sans licence."})," Sans jeton, un avis de licence s’affiche à l’importation (masquable avec ",e.jsx("code",{className:s,children:"QECTOR_SILENT=1"}),"). Le jeton masque l’avis et débloque les fonctions liées au palier : décodage GPU par lots (CUDA/OpenCL) sur tous les forfaits payants, et une distance de code maximale de 7 (Communauté), 19 (Pro, Équipe) ou 63 (Labo, Entreprise). Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si ",e.jsx("code",{className:s,children:"QECTOR_ENFORCE=1"})," est réglé."]}),e.jsx("li",{children:"• Aucune garantie, indemnisation, exclusivité, marque de commerce ni licence de brevet n’est incluse par défaut."})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mt-4",children:["Les jetons sont livrés en quelques minutes, et chaque forfait est assorti d’une garantie de remboursement de ",r.refundDays," jours sur le premier paiement : voir la ",e.jsx(a,{to:"/fr/refund",className:"text-cyan-300 hover:underline",children:"Politique de remboursement"}),". Une licence remboursée prend fin au remboursement."]})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Activer votre licence"}),e.jsxs("ol",{className:"space-y-3 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Achat vérifié."})," Le service de livraison n’accepte qu’un événement de paiement Stripe signé et enregistre la référence Stripe, le courriel, le palier et le jeton dans un registre protégé."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Installer."})," ",e.jsx("code",{className:s,children:'python -m pip install --upgrade "qector-decoder-v3>=1.0,<2"'})," depuis le projet PyPI officiel."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Régler les deux variables."})," Donnez à ",e.jsx("code",{className:s,children:"QECTOR_LICENSE"})," et à ",e.jsx("code",{className:s,children:"QECTOR_LICENSE_KEY"})," le même jeton, reçu par courriel. La première sert à l’avis d’importation, la seconde au moteur selon le palier."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"4. Vérifier hors ligne."})," ",e.jsx("code",{className:s,children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})," doit afficher votre palier payant (par exemple ",e.jsx("code",{className:"text-cyan-300",children:"Pro"}),") et non ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),". Aucun serveur n’est contacté."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"5. Conserver la preuve."})," Gardez le jeton avec la facture ou la confirmation Stripe. N’envoyez jamais le jeton dans une URL, un suivi de bogues, une messagerie ou un dépôt public."]})]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed mt-4",children:["Courriel manquant ou jeton refusé? Écrivez à ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," avec la référence Stripe. N’ouvrez pas un second paiement ni une contestation pendant que la livraison est corrigée."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Texte complet de la licence"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Le texte officiel de la PolyForm Noncommercial License 1.0.0 (en anglais) est publié à"," ",e.jsx("a",{href:"https://polyformproject.org/licenses/noncommercial/1.0.0",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]",children:"polyformproject.org/licenses/noncommercial/1.0.0"})," ","et inclus tel quel dans chaque distribution (",e.jsx("code",{className:s,children:"LICENSE"})," dans la roue). Les résumés de cette page sont fournis à titre indicatif; en cas d’écart, le texte de la licence prévaut."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licences de tiers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR s’appuie sur plusieurs projets libres, dont Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD) et NetworkX (BSD). Les attributions complètes sont incluses dans la distribution. Les noms de tiers sont des marques de leurs propriétaires respectifs; QECTOR n’est ni affilié à eux, ni commandité, ni approuvé par eux."})]})]})})]})}export{u as default}; diff --git a/assets/Manual-B7fpCrlk.js b/assets/Manual-B7fpCrlk.js deleted file mode 100644 index a3adfbee..00000000 --- a/assets/Manual-B7fpCrlk.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-c1PDYu0j.js";import{T as k,s as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B8TlNU4J.js";import{N as I}from"./NeuralReveal-uYarhiMA.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const o=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await o(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await o(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await o(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await o(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await o(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await o(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await o(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await o(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await o(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await o(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function d({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function W(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(d,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{W as default}; diff --git a/assets/Manual-B80JvGo2.js b/assets/Manual-B80JvGo2.js deleted file mode 100644 index 9a91c8a4..00000000 --- a/assets/Manual-B80JvGo2.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-WV1aysjN.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-BOkG7qye.js b/assets/Manual-BOkG7qye.js deleted file mode 100644 index 110b1162..00000000 --- a/assets/Manual-BOkG7qye.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-BN-vOeL2.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-BT_SdIYV.js b/assets/Manual-BT_SdIYV.js deleted file mode 100644 index fac63a62..00000000 --- a/assets/Manual-BT_SdIYV.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-DkYdPRY7.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-BVfOpnR5.js b/assets/Manual-BVfOpnR5.js deleted file mode 100644 index 7963932e..00000000 --- a/assets/Manual-BVfOpnR5.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-_BpMZhV3.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install qector-decoder-v3==1.0.0 -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-Bgdopadc.js b/assets/Manual-Bgdopadc.js deleted file mode 100644 index 3740e312..00000000 --- a/assets/Manual-Bgdopadc.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-BUYYSLdX.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-Bko8q4XD.js b/assets/Manual-Bko8q4XD.js deleted file mode 100644 index acc8e9c2..00000000 --- a/assets/Manual-Bko8q4XD.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-CCmwjNGU.js";import{T as k,s as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B8TlNU4J.js";import{N as I}from"./NeuralReveal-uYarhiMA.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const o=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await o(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await o(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await o(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await o(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await o(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await o(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await o(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await o(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await o(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await o(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function d({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function W(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(d,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{W as default}; diff --git a/assets/Manual-Cd4jvvKA.js b/assets/Manual-Cd4jvvKA.js deleted file mode 100644 index 2b211525..00000000 --- a/assets/Manual-Cd4jvvKA.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-B9kEGiWi.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install qector-decoder-v3==1.0.0 -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-CsPEksBK.js b/assets/Manual-CsPEksBK.js deleted file mode 100644 index 139ca50a..00000000 --- a/assets/Manual-CsPEksBK.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-CcwlvHYJ.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const o=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await o(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await o(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await o(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await o(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await o(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await o(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await o(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await o(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await o(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await o(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function d({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function W(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(d,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{W as default}; diff --git a/assets/Manual-DV0IXz3U.js b/assets/Manual-DV0IXz3U.js deleted file mode 100644 index 2c1757f4..00000000 --- a/assets/Manual-DV0IXz3U.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-CxWP17m6.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-DVeToNSz.js b/assets/Manual-DVeToNSz.js deleted file mode 100644 index bf5ff659..00000000 --- a/assets/Manual-DVeToNSz.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-abfjMTlQ.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-D-EQoOl2.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-DcMDTO2e.js b/assets/Manual-DcMDTO2e.js deleted file mode 100644 index b56a2c3a..00000000 --- a/assets/Manual-DcMDTO2e.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-DRAXObZB.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-DhAX5H3m.js b/assets/Manual-DhAX5H3m.js deleted file mode 100644 index 5be31b72..00000000 --- a/assets/Manual-DhAX5H3m.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-iVST85F-.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install qector-decoder-v3==1.0.0 -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-DufMHAK3.js b/assets/Manual-DufMHAK3.js deleted file mode 100644 index 1475bc2d..00000000 --- a/assets/Manual-DufMHAK3.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-Bh9DBCb3.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-D-EQoOl2.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-Dz9ghE94.js b/assets/Manual-Dz9ghE94.js deleted file mode 100644 index 518e3777..00000000 --- a/assets/Manual-Dz9ghE94.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-CpdATiEY.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-RdcO5vwC.js b/assets/Manual-RdcO5vwC.js deleted file mode 100644 index 5753cbc8..00000000 --- a/assets/Manual-RdcO5vwC.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-BcbVjARk.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install qector-decoder-v3==1.0.0 -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-bANcf9AE.js b/assets/Manual-bANcf9AE.js deleted file mode 100644 index 8e947296..00000000 --- a/assets/Manual-bANcf9AE.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-DayaklK-.js";import{T as k,s as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B8TlNU4J.js";import{N as I}from"./NeuralReveal-uYarhiMA.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const o=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await o(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await o(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await o(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await o(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await o(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await o(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await o(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await o(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await o(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await o(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function d({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function W(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(d,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{W as default}; diff --git a/assets/Manual-ehjT3thq.js b/assets/Manual-ehjT3thq.js deleted file mode 100644 index 060f63ab..00000000 --- a/assets/Manual-ehjT3thq.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-PdoH5kLF.js";import{T as k,s as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B8TlNU4J.js";import{N as I}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const o=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await o(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await o(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await o(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await o(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await o(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await o(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await o(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await o(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await o(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await o(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function d({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function W(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.1)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders=qector_sinter_decoders()"}),", and a qiskit-qec plugin is registered."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(d,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(d,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(d,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.1 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.1"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{W as default}; diff --git a/assets/Manual-oB_C89DR.js b/assets/Manual-oB_C89DR.js deleted file mode 100644 index ed806966..00000000 --- a/assets/Manual-oB_C89DR.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-CqAA-ZXu.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/Manual-shHk1ZuH.js b/assets/Manual-shHk1ZuH.js deleted file mode 100644 index d9ba915d..00000000 --- a/assets/Manual-shHk1ZuH.js +++ /dev/null @@ -1,67 +0,0 @@ -import{r as p,j as e,R as b}from"./vendor-react-BiHfrq0e.js";import{S as N,J as w,C as c}from"./index-DlmjLVYe.js";import{T as k,o as _,u as C,I as S,g as q,a as D,C as P,B as R,v as u,i as E}from"./vendor-ui-B0ssGG4c.js";import{N as I}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-gsap-a3sj5zmn.js";function B(){const[a,l]=p.useState(""),[n,t]=p.useState([{text:"QECTOR CLI Terminal Demo (simulation only)",type:"info"},{text:"No command is executed and no external service is contacted.",type:"info"}]),[s,h]=p.useState(!1),g=p.useRef(null),y=()=>{g.current?.scrollIntoView({behavior:"smooth"})};p.useEffect(()=>{y()},[n]);const f=async i=>{const m=i.trim().toLowerCase(),x=[...n,{text:`qector@sandbox:~$ ${i}`,type:"input"}];t(x),l(""),h(!0);const d=r=>new Promise(v=>setTimeout(v,r));m==="help"?(await d(200),t(r=>[...r,{text:"Available commands:",type:"info"},{text:" help - Show this menu",type:"output"},{text:" pip install qector-decoder-v3 - Show the install command",type:"output"},{text:" qector-doctor - Show the diagnostic command",type:"output"},{text:" qector bench -d 5 - Show a local measurement command",type:"output"},{text:" clear - Clear the terminal screen",type:"output"}])):m==="clear"?t([]):m==="pip install qector-decoder-v3"?(await d(300),t(r=>[...r,{text:"Simulation only: no package was downloaded.",type:"output"}]),await d(800),t(r=>[...r,{text:"Simulation only: no package was installed.",type:"output"}]),await d(400),t(r=>[...r,{text:"For a real install, follow the current PyPI and release verification instructions.",type:"output"}]),await d(600),t(r=>[...r,{text:"✓ Demo complete: no network request or filesystem change was made.",type:"success"}])):m==="qector-doctor"?(await d(300),t(r=>[...r,{text:"Simulation only: qector-doctor was not run.",type:"output"}]),await d(500),t(r=>[...r,{text:"Run qector-doctor in your installed environment to obtain real PASS / WARN / FAIL results.",type:"info"}])):m==="qector bench -d 5"||m==="qector bench --distance 5"?(await d(400),t(r=>[...r,{text:"Simulation only: no circuit or measurement was generated.",type:"output"}]),await d(1e3),t(r=>[...r,{text:"Run qector bench on your own declared workload to generate real local evidence.",type:"info"}])):(await d(150),t(r=>[...r,{text:`qector: command not found: ${i}. Type "help" for a list of commands.`,type:"info"}])),h(!1)},j=i=>{i.preventDefault(),!(!a.trim()||s)&&f(a)};return e.jsxs("div",{className:"flex flex-col border border-gridline bg-void/90 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-surface border-b border-gridline",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{className:"w-4 h-4 text-cyan-300"}),e.jsx("span",{className:"font-mono text-xs text-secondary font-semibold",children:"interactive-cli.sh"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-500/80"}),e.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-500/80"})]})]}),e.jsxs("div",{className:"p-5 font-mono text-xs h-72 overflow-y-auto space-y-2 select-text custom-scrollbar",children:[n.map((i,m)=>{let x="text-secondary";return i.type==="input"?x="text-cyan-300 font-semibold":i.type==="success"?x="text-green-400 font-semibold":i.type==="info"&&(x="text-gold-400"),e.jsx("div",{className:`${x} leading-relaxed whitespace-pre-wrap`,children:i.text},m)}),s&&e.jsxs("div",{className:"text-muted-foreground animate-pulse flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-3 bg-muted-foreground inline-block animate-caret"}),e.jsx("span",{children:"Executing..."})]}),e.jsx("div",{ref:g})]}),e.jsxs("form",{onSubmit:j,className:"flex items-center border-t border-gridline bg-surface/50 px-4 py-2",children:[e.jsx(_,{className:"w-4 h-4 text-cyan-300 shrink-0"}),e.jsx("input",{type:"text",value:a,onChange:i=>l(i.target.value),disabled:s,className:"flex-1 bg-transparent border-none outline-none font-mono text-xs text-cyan-300 px-2 py-1 placeholder-cyan-300/60 focus-visible:ring-2 focus-visible:ring-cyan-300",placeholder:'Type a command (e.g. "help", "pip install qector-decoder-v3")...',"aria-label":"Terminal input"}),e.jsx("button",{type:"submit",disabled:s||!a.trim(),className:"p-1 text-cyan-300 hover:text-cyan-200 disabled:text-muted/20 transition-colors","aria-label":"Run command",children:e.jsx(C,{className:"w-3.5 h-3.5 fill-current"})})]})]})}const L="font-mono text-[11px] bg-cyan-300/10 text-cyan-200 px-1 py-0.5 rounded border border-cyan-300/20";function O(a,l){return a.replace(/\\"/g,'"').split(/(`[^`\n]+`)/g).map((n,t)=>n.length>2&&n.startsWith("`")&&n.endsWith("`")?e.jsx("code",{className:L,children:n.slice(1,-1)},`${l}-${t}`):n)}function o({children:a}){const l=(n,t)=>typeof n=="string"?e.jsx(b.Fragment,{children:O(n,t)},t):Array.isArray(n)?e.jsx(e.Fragment,{children:n.map((s,h)=>e.jsx(b.Fragment,{children:l(s,`${t}-${h}`)},`${t}-${h}`))}):n;return e.jsx(e.Fragment,{children:l(a,"imd")})}function $(){const[a,l]=p.useState("overview"),n=[{id:"overview",title:"1. Overview",icon:e.jsx(S,{className:"w-4 h-4"})},{id:"installation",title:"2. Installation",icon:e.jsx(q,{className:"w-4 h-4"})},{id:"quickstart",title:"3. Quick Start",icon:e.jsx(T,{className:"w-4 h-4"})},{id:"decoders",title:"4. Choosing a Decoder",icon:e.jsx(D,{className:"w-4 h-4"})},{id:"measurement",title:"5. Local Measurements",icon:e.jsx(M,{className:"w-4 h-4"})},{id:"configuration",title:"6. Configuration",icon:e.jsx(U,{className:"w-4 h-4"})},{id:"troubleshooting",title:"7. Troubleshooting",icon:e.jsx(P,{className:"w-4 h-4"})},{id:"package-reference",title:"8. Package Reference (v1.0.0)",icon:e.jsx(R,{className:"w-4 h-4"})}],t=()=>{switch(a){case"overview":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-base leading-relaxed",children:"QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.0 is the first stable release: it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API."}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/10 rounded-xl flex items-start gap-3",children:[e.jsx(E,{className:"w-5 h-5 text-cyan-300 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Ecosystem Native:"})," Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: v1.0.0 registers Sinter and qiskit-qec entry points so ",e.jsx("code",{className:"text-cyan-300",children:"sinter.collect()"})," works with no ",e.jsx("code",{className:"text-cyan-300",children:"custom_decoders="}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-lg mb-3",children:"Key Highlights"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"v1.0.0: First Stable Release"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Validate on Your Hardware"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Multi-Algorithm Diversity"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Compiled Rust Core"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment."})]}),e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("h4",{className:"text-cyan-300 font-semibold text-sm mb-1",children:"Optional GPU Paths"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed",children:"GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them."})]})]})]})]});case"installation":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR ships as pre-compiled binary wheels on PyPI. Installing requires Python and pip."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Standard Installation"}),e.jsx(c,{code:"pip install qector-decoder-v3",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"System Requirements"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-sm",children:[e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary",children:"3.9, 3.10, 3.11, 3.12, 3.13 (64-bit)"})]}),e.jsxs("div",{className:"p-3 border-b border-gridline flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"Operating System"}),e.jsx("span",{className:"text-primary",children:"Linux, macOS, Windows (see current PyPI wheel metadata)"})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"GPU Requirements (Optional)"}),e.jsx("span",{className:"text-primary",children:"Optional and environment-dependent; check the installed release diagnostics"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Install Optional Dependencies"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"Install only the extras required by your workflow:"}),e.jsx(c,{code:`# Stim / Sinter / PyMatching ecosystem - pip install "qector-decoder-v3[stim]" - - # Full optional environment - pip install "qector-decoder-v3[all]"`,filename:"terminal",language:"bash"})]})]});case"quickstart":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Below is a minimal package-only example: create a rotated surface code, generate a syndrome, and verify a Blossom correction against the parity-check matrix."}),e.jsx(c,{filename:"surface_code_decode.py",language:"python",code:`import numpy as np -import qector_decoder_v3 as qector - -# Build a small code and inject one bit error. -code = qector.codes.rotated_surface_code(3) -error = np.zeros(code.n_qubits, dtype=np.uint8) -error[4] = 1 -syndrome = code.syndrome(error) - -# Decode with the graphlike Blossom backend. -correction = qector.BlossomDecoder( - code.check_to_qubits, - n_qubits=code.n_qubits, -).decode(syndrome) - -# The syndrome contract is H c = s (mod 2). -matrix = np.asarray(code.parity_check_matrix(), dtype=np.uint8) -assert np.array_equal((matrix @ correction.astype(int)) % 2, syndrome) -print("Syndrome-faithful correction")`})]});case"decoders":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR includes 17 decoder configurations categorized into stable, workload-sensitive, and experimental/research tiers. Choose based on code type and speed/accuracy tradeoffs:"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse border border-gridline text-left text-sm rounded-xl overflow-hidden",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 font-semibold",children:[e.jsx("th",{className:"p-3",children:"Decoder"}),e.jsx("th",{className:"p-3",children:"Target Code"}),e.jsx("th",{className:"p-3",children:"Speed"}),e.jsx("th",{className:"p-3",children:"Accuracy"}),e.jsx("th",{className:"p-3",children:"Tier"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:[{name:"Blossom (MWPM)",target:"Graphlike CSS / surface",speed:"Workload-dependent",accuracy:"Minimum-weight matching objective",tier:"Stable"},{name:"Belief-Matching",target:"Correlated-noise research",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"BP-OSD",target:"qLDPC, LDPC",speed:"Workload-dependent",accuracy:"Evaluate locally",tier:"Research"},{name:"Union-Find",target:"Large Surface",speed:"Near-linear O(N)",accuracy:"Approximate",tier:"Production"},{name:"GPU Batch",target:"Supported batch workloads",speed:"Runtime-dependent",accuracy:"Validate locally",tier:"Workload-sensitive"},{name:"Hybrid / Cascade",target:"Degenerate, mixed",speed:"Iterative",accuracy:"High",tier:"Research"},{name:"Colour Code",target:"Triangular colour code",speed:"Moderate",accuracy:"Native",tier:"Research"}].map(s=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-semibold text-primary",children:s.name}),e.jsx("td",{className:"p-3 text-secondary",children:s.target}),e.jsx("td",{className:"p-3 text-secondary",children:s.speed}),e.jsx("td",{className:"p-3 text-secondary",children:s.accuracy}),e.jsx("td",{className:"p-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-[10px] uppercase font-bold border ${s.tier==="Production"?"bg-green-400/10 text-green-400 border-green-400/20":"bg-gold-400/10 text-gold-400 border-gold-400/20"}`,children:s.tier})})]},s.name))})]})})]});case"measurement":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Hardware-specific measurements are not published on this site. If your project requires a local measurement, record the code, noise model, decoder configuration, seed, shots, environment, and raw artifact."}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Environment Diagnostic"}),e.jsx(c,{code:"qector-doctor",filename:"terminal",language:"bash"}),e.jsxs("p",{className:"text-secondary text-xs mt-2",children:["15-check diagnostic that reports PASS / WARN / FAIL per check and explains WHY a decoder is unavailable on your machine. Full report via ",e.jsx("code",{className:"text-cyan-300",children:"qector-doctor --json"}),"."]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Local measurement via qector bench"}),e.jsx("p",{className:"text-secondary text-xs mb-2",children:"Use the command documented by the installed package release. The result is machine- and workload-specific, not a site claim:"}),e.jsx(c,{code:"qector bench --distance 5 --rounds 5 --shots 10000 --decoder blossom --noise 0.001",filename:"terminal",language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-sm mb-2",children:"Interactive Sandbox CLI"}),e.jsx("p",{className:"text-secondary text-xs mb-3",children:"This UI is a command-output demonstration only; it does not execute commands or generate benchmark data:"}),e.jsx(B,{})]})]});case"configuration":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Detailed constructor configuration arguments for QECTOR's primary decoders:"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BlossomDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"adaptive_k"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`bool` (Default: `True`). Enable union-find matching pre-filtering to minimize match graph sizing."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"timeout"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`float` (Default: `None`). Maximum time (in seconds) allowed to resolve a single syndrome."})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"BeliefMatchingDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_iters"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `30`). Maximum number of belief propagation iterations. Higher iterations improve syndrome accuracy."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"max_paths"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `10`). Maximum number of alternative paths generated for matching reweighting calculations."})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"bp_method"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"product_sum"`). Choice of BP update method. Options: `"product_sum"`, `"minimum_sum"`.'})})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:"GpuBatchDecoder"}),e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden divide-y divide-gridline text-sm",children:[e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"backend"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:'`str` (Default: `"cuda"`). Choose GPU compilation framework. Options: `"cuda"`, `"opencl"`.'})})]}),e.jsxs("div",{className:"p-3 flex justify-between gap-4",children:[e.jsx("span",{className:"font-mono text-primary min-w-[120px]",children:"batch_size"}),e.jsx("span",{className:"text-secondary text-xs flex-1",children:e.jsx(o,{children:"`int` (Default: `1000`). Number of parallel syndromes transferred to and calculated in the GPU memory space."})})]})]})]})]});case"troubleshooting":return e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Solutions for common installation and running issues:"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:e.jsx(o,{children:"Issue: ImportError when importing `qector`"})})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Ensure your Python architecture matches the wheel and reinstall with `python -m pip install --force-reinstall qector-decoder-v3`."]})})]}),e.jsxs("div",{className:"p-4 bg-gold-400/5 border border-gold-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-gold-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: GPU / CUDA is not detected"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Verify drivers by typing `nvidia-smi` in terminal. Ensure CUDA Toolkit 11.8 or higher is installed and environment variable `CUDA_PATH` or `LD_LIBRARY_PATH` points to the CUDA install folder."]})})]}),e.jsxs("div",{className:"p-4 bg-red-400/5 border border-red-400/20 rounded-xl",children:[e.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-2",children:[e.jsx(u,{className:"w-4 h-4 shrink-0"}),e.jsx("span",{children:"Issue: Out Of Memory (OOM) on GPU batching"})]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:e.jsxs(o,{children:[e.jsx("strong",{children:"Fix:"})," Lower the `batch_size` argument in your `GpuBatchDecoder` instantiation. For exceptionally large code distances (d > 15), prefer the linear-scaling `UnionFindDecoder` which reduces memory demands."]})})]})]})]});case"package-reference":return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-bold text-lg",children:"QECTOR Decoder v3: Extended Reference (package only)"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"Version: 1.0.0 · PyPI: qector-decoder-v3 · Backend: Rust + PyO3"})]}),e.jsx("a",{href:"/docs/reference.md",target:"_blank",rel:"noopener noreferrer",download:"QECTOR Decoder v3 - Reference (package only).md",className:"btn-cyan text-xs py-2 px-4",children:"Download Reference (.md)"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"1. Installation & Platforms"}),e.jsx(c,{code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -pip install "qector-decoder-v3[stim]" # Stim / Sinter / PyMatching / LDPC ecosystem -pip install "qector-decoder-v3[bench]" # local measurement tools -pip install "qector-decoder-v3[all]" # optional full environment`,language:"bash",filename:"terminal"}),e.jsxs("div",{className:"mt-3 border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Python"}),e.jsx("span",{className:"text-primary font-mono",children:"3.9 - 3.13"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Platforms"}),e.jsx("span",{className:"text-primary",children:"Linux x86_64 (manylinux), Windows x64, macOS arm64"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License"}),e.jsx("span",{className:"text-primary",children:"Source-available (Free academic / non-commercial)"})]}),e.jsxs("div",{className:"p-2.5 border-b border-gridline flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Startup Notice"}),e.jsx("span",{className:"text-primary font-mono",children:"Suppressed with QECTOR_SILENT=1"})]}),e.jsxs("div",{className:"p-2.5 flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"License Env"}),e.jsx("span",{className:"text-primary font-mono",children:"QECTOR_LICENSE + QECTOR_LICENSE_KEY (Ed25519 token)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"2. Core Architecture"}),e.jsxs("ul",{className:"list-disc list-inside space-y-1.5 text-secondary text-xs leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Rust Core (compiled extension):"})," Matching, UF, batch CPU/GPU algorithms."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Python Surface:"})," Clean API, Stim/Sinter compat, belief/GNN layers, licensing."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Zero-copy NumPy:"})," Direct memory access; GIL-free parallel decoding paths."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Version Symbol:"})," ",e.jsx("code",{className:"text-cyan-300",children:'qector_decoder_v3.__version__ == "1.0.0"'})]})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"3. Decoder Families & Incidence Rules"}),e.jsxs("p",{className:"text-muted-foreground text-xs mb-3",children:[e.jsx("strong",{className:"text-cyan-300",children:"Graph-like rule (UF family):"})," Every qubit must participate in at most two checks (participation ≤ 2). Matrices violating this raise a clear error (",e.jsx("code",{className:"text-red-400",children:"-32602"}),"). ",e.jsx("code",{className:"text-cyan-300",children:"BlossomDecoder"}),", ",e.jsx("code",{className:"text-cyan-300",children:"SparseBlossomDecoder"}),", and ",e.jsx("code",{className:"text-cyan-300",children:"BpOsdDecoder"})," accept general hyperedge codes."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl",children:e.jsxs("div",{className:"border border-gridline bg-void/30 rounded-xl overflow-hidden text-xs",children:[e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 font-bold border-b border-gridline bg-surface/30",children:[e.jsx("span",{children:"Class"}),e.jsx("span",{children:"Best for"}),e.jsx("span",{children:"Status"}),e.jsx("span",{children:"Graph-like?"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"UnionFindDecoder"}),e.jsx("span",{children:"Low-latency approximate"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes (participation ≤ 2)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"FastUnionFindDecoder"}),e.jsx("span",{children:"Faster UF hot path"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BlossomDecoder"}),e.jsx("span",{children:"Exact MWPM"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"SparseBlossomDecoder"}),e.jsx("span",{children:"Near-optimal matching"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BeliefMatching"}),e.jsx("span",{children:"Correlated-noise accuracy"}),e.jsx("span",{children:"Research"}),e.jsx("span",{children:"Prefer graph-like"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BpOsdDecoder"}),e.jsx("span",{children:"LDPC / qLDPC"}),e.jsx("span",{children:"Experimental"}),e.jsx("span",{children:"No (Hyperedge OK)"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"BatchDecoder"}),e.jsx("span",{children:"High-throughput CPU batch"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"Yes for UF batch"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5 border-b border-gridline",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"CUDABatchDecoder"}),e.jsx("span",{children:"GPU batch (NVIDIA)"}),e.jsx("span",{children:"Runtime-dependent"}),e.jsx("span",{children:"N/A"})]}),e.jsxs("div",{className:"grid grid-cols-4 min-w-[560px] p-2.5",children:[e.jsx("span",{className:"font-mono text-cyan-300",children:"AutoDecoder"}),e.jsx("span",{children:"7-tier self-debugging fallback"}),e.jsx("span",{children:"Stable"}),e.jsx("span",{children:"N/A"})]})]})})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"4. Code Generators"}),e.jsx(c,{code:`from qector_decoder_v3 import ( - generate_repetition_code_checks, # (checks, n_qubits) - generate_ring_code_checks, # (checks, n_qubits) - generate_surface_code_checks, # surface-code checks -)`,language:"python",filename:"python"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"5. MCP and General-Matrix Workflows"}),e.jsx(c,{code:`# The standalone library MCP server is documented separately. -# Start it from the plugin package with: -python mcp/mcp_server_library.py - -# Initialize and call tools/list before using a tool.`,language:"python",filename:"mcp_server.py"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-2 mb-3",children:"For general matrices, use the decoder family documented for that workload and verify every returned correction against H c = s (mod 2):"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import BlossomDecoder, SparseBlossomDecoder, BpOsdDecoder - -def decode_hyperedge(checks, n_qubits, syndrome, kind="Blossom", **opts): - syn = np.asarray(syndrome, dtype=np.uint8).ravel() - if kind in ("Blossom", "blossom"): - return BlossomDecoder(checks, n_qubits).decode(syn) - if kind in ("SparseBlossom", "sparse_blossom"): - return SparseBlossomDecoder(checks, n_qubits).decode(syn) - if kind.lower() in ("bposd", "bp_osd"): - H = np.zeros((len(checks), n_qubits), dtype=np.uint8) - for i, c in enumerate(checks): - for q in c: H[i, q] ^= 1 - return BpOsdDecoder(H, error_rate=opts.get("error_rate", 0.05)).decode(syn) - raise ValueError(f"unsupported kind: {kind}")`,language:"python",filename:"hyperedge_workaround.py"})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-primary font-semibold text-base mb-3",children:"6. Verified Fallback Pattern"}),e.jsx("p",{className:"text-muted-foreground text-xs leading-relaxed mb-3",children:"A fallback is safe only when each candidate is checked against the same parity-check matrix. The following pattern uses the stable Union-Find and Blossom classes and fails closed if a candidate is not syndrome-faithful:"}),e.jsx(c,{code:`import numpy as np -from qector_decoder_v3 import FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder - -def faithful_decode(check_to_qubits, n_qubits, syndrome): - syndrome = np.asarray(syndrome, dtype=np.uint8).ravel() - matrix = np.zeros((len(check_to_qubits), n_qubits), dtype=np.uint8) - for check, qubits in enumerate(check_to_qubits): - matrix[check, qubits] = 1 - - for decoder_type in (FastUnionFindDecoder, UnionFindDecoder, BlossomDecoder): - try: - correction = np.asarray( - decoder_type(check_to_qubits, n_qubits=n_qubits).decode(syndrome), - dtype=np.uint8, - ) - if np.array_equal((matrix @ correction.astype(int)) % 2, syndrome): - return correction, decoder_type.__name__ - except Exception: - continue - raise RuntimeError("No syndrome-faithful decoder result")`,language:"python",filename:"cascade_decode.py"})]})]});default:return null}};return e.jsxs(e.Fragment,{children:[e.jsx(N,{title:"User Manual · QECTOR",description:"Complete user manual for QECTOR Decoder v3. Installation, configuration, decoder selection, validation, and troubleshooting."}),e.jsx(w,{data:{"@context":"https://schema.org","@type":"HowTo",name:"How to Install and Run QECTOR Decoder v3",description:"Step-by-step instructions to install QECTOR, verify a syndrome-faithful decode, select a decoder, and review evidence boundaries.",step:[{"@type":"HowToStep",name:"Install the package",text:"Run pip install qector-decoder-v3 in your Python terminal to install the Rust core binary wheels."},{"@type":"HowToStep",name:"Verify the installation",text:'Verify the installation with python -c "import qector_decoder_v3 as qd; print(qd.__version__)" and a small syndrome-faithfulness check.'},{"@type":"HowToStep",name:"Review evidence boundaries",text:"Read the v1.0.0 reference manual and record code, noise model, decoder configuration, seed, environment, and artifact metadata before making a local measurement."}]}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(I,{text:"User Manual",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-8",children:[e.jsx("div",{className:"lg:col-span-1",children:e.jsx("nav",{"aria-label":"Manual sections",className:"sticky top-24 space-y-1 bg-surface/10 p-2 rounded-xl border border-gridline/50",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>l(s.id),"aria-current":a===s.id?"true":void 0,className:`w-full text-left px-3.5 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 flex items-center gap-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300 ${a===s.id?"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20":"text-secondary hover:text-primary hover:bg-white/5 border border-transparent"}`,children:[s.icon,s.title]},s.id))})}),e.jsx("div",{className:"lg:col-span-3",children:e.jsxs("div",{className:"card-surface bg-surface/20 min-h-[500px]",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-primary border-b border-gridline pb-4 flex items-center gap-2",children:n.find(s=>s.id===a)?.title.substring(3)}),e.jsx("div",{className:"transition-all duration-300",children:t()})]})})]})})})]})}function T(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 21l-.813-5.096L3 15l5.096-.813L9 9l.813 5.096L15 15l-5.187.904Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.071 4.929a10 10 0 0 0-14.142 0M12 3v3m0 12v3M3 12h3m12 0h3",opacity:"0.5"})]})}function M(a){return e.jsx("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v5.25c0 .621-.504 1.125-1.125 1.125h-2.25A1.125 1.125 0 0 1 3 18.375v-5.25ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125v-9.75ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v14.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"})})}function U(a){return e.jsxs("svg",{...a,fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.43l-1.003.828c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.43l1.004-.827c.292-.24.437-.613.43-.991a6.936 6.936 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}export{$ as default}; diff --git a/assets/McpServer-619DB13w.js b/assets/McpServer-619DB13w.js deleted file mode 100644 index abe3dbff..00000000 --- a/assets/McpServer-619DB13w.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-BN-vOeL2.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-B66-DjzI.js b/assets/McpServer-B66-DjzI.js deleted file mode 100644 index f8523015..00000000 --- a/assets/McpServer-B66-DjzI.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-WV1aysjN.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-BQJ_Te-C.js b/assets/McpServer-BQJ_Te-C.js deleted file mode 100644 index a37849eb..00000000 --- a/assets/McpServer-BQJ_Te-C.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-CqAA-ZXu.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-Be8VQAo_.js b/assets/McpServer-Be8VQAo_.js deleted file mode 100644 index 8fb13043..00000000 --- a/assets/McpServer-Be8VQAo_.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-DkYdPRY7.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-Bxt8RVJ9.js b/assets/McpServer-Bxt8RVJ9.js deleted file mode 100644 index 64e40ca7..00000000 --- a/assets/McpServer-Bxt8RVJ9.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-iVST85F-.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3==1.0.0"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3==1.0.0 wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-C5JtddAJ.js b/assets/McpServer-C5JtddAJ.js deleted file mode 100644 index 2897f473..00000000 --- a/assets/McpServer-C5JtddAJ.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-Bh9DBCb3.js";import{N as o}from"./NeuralReveal-D-EQoOl2.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-CA7IXDf6.js b/assets/McpServer-CA7IXDf6.js deleted file mode 100644 index 8332abb1..00000000 --- a/assets/McpServer-CA7IXDf6.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,L as a,C as t}from"./index-DayaklK-.js";import{N as n}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function b(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(n,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:o.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{b as default}; diff --git a/assets/McpServer-CTaxUaPg.js b/assets/McpServer-CTaxUaPg.js deleted file mode 100644 index d9fec2bc..00000000 --- a/assets/McpServer-CTaxUaPg.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-abfjMTlQ.js";import{N as o}from"./NeuralReveal-D-EQoOl2.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-CePFSOZJ.js b/assets/McpServer-CePFSOZJ.js deleted file mode 100644 index fb71da8b..00000000 --- a/assets/McpServer-CePFSOZJ.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-CpdATiEY.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-Co_2_izC.js b/assets/McpServer-Co_2_izC.js deleted file mode 100644 index c724a7a3..00000000 --- a/assets/McpServer-Co_2_izC.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,L as a,C as t}from"./index-CCmwjNGU.js";import{N as n}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function b(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(n,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:o.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{b as default}; diff --git a/assets/McpServer-D27l0qru.js b/assets/McpServer-D27l0qru.js deleted file mode 100644 index ec6976f8..00000000 --- a/assets/McpServer-D27l0qru.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-CxWP17m6.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-DBDf1DXP.js b/assets/McpServer-DBDf1DXP.js deleted file mode 100644 index 561c7585..00000000 --- a/assets/McpServer-DBDf1DXP.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,L as a,C as t}from"./index-c1PDYu0j.js";import{N as n}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function b(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(n,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:o.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{b as default}; diff --git a/assets/McpServer-DH6efPKh.js b/assets/McpServer-DH6efPKh.js deleted file mode 100644 index 9f0fade9..00000000 --- a/assets/McpServer-DH6efPKh.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-BcbVjARk.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3==1.0.0"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3==1.0.0 wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-DVGceqba.js b/assets/McpServer-DVGceqba.js deleted file mode 100644 index c6bf3b72..00000000 --- a/assets/McpServer-DVGceqba.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-B9kEGiWi.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3==1.0.0"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3==1.0.0 wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-DVuNiJfI.js b/assets/McpServer-DVuNiJfI.js deleted file mode 100644 index 41f83cb0..00000000 --- a/assets/McpServer-DVuNiJfI.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,L as a,C as t}from"./index-CcwlvHYJ.js";import{N as n}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function b(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(n,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:o.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{b as default}; diff --git a/assets/McpServer-DYX0yvB3.js b/assets/McpServer-DYX0yvB3.js deleted file mode 100644 index 248ab8a3..00000000 --- a/assets/McpServer-DYX0yvB3.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-BUYYSLdX.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-V-tQ2EEs.js b/assets/McpServer-V-tQ2EEs.js deleted file mode 100644 index 617a5734..00000000 --- a/assets/McpServer-V-tQ2EEs.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-DlmjLVYe.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-m4zxJ7m1.js b/assets/McpServer-m4zxJ7m1.js deleted file mode 100644 index 019f015d..00000000 --- a/assets/McpServer-m4zxJ7m1.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-_BpMZhV3.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3==1.0.0"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3==1.0.0 wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-vBOicFuG.js b/assets/McpServer-vBOicFuG.js deleted file mode 100644 index 20382380..00000000 --- a/assets/McpServer-vBOicFuG.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,C as t}from"./index-DRAXObZB.js";import{N as o}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const n=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.0 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.0"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function v(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.0",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.0"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(o,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp==1.26.0"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v1.0.6 includes 28 skills, 11 slash commands, 5 agents, and four local MCP servers: 8 stable library tools, 29 opt-in research tools, 3 opt-in admin tools, and a safe Desktop profile. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:n.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{v as default}; diff --git a/assets/McpServer-y-T_ds_x.js b/assets/McpServer-y-T_ds_x.js deleted file mode 100644 index 6e1efa3d..00000000 --- a/assets/McpServer-y-T_ds_x.js +++ /dev/null @@ -1,31 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as c,J as i,L as a,C as t}from"./index-PdoH5kLF.js";import{N as n}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const o=[{name:"list_code_families",desc:"List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.",required:[],optional:[],returns:'families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"'},{name:"list_decoders",desc:"List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.",required:[],optional:[],returns:'decoders map (class, status: "stable"), reference_manual DOI'},{name:"get_license_info",desc:"Read the live offline QECTOR license tier and feature gates from the installed wheel.",required:[],optional:[],returns:"license info object, qector_version, reference_manual DOI"},{name:"decode_syndrome",desc:"Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).",required:["syndrome"],optional:["family","size","decoder_name","n_qubits"],returns:"family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us"},{name:"decode_single",desc:"Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.",required:[],optional:["family","distance","decoder_name","error_rate","seed"],returns:"family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us"},{name:"threshold_sweep",desc:"Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.",required:[],optional:["family","distances","error_rates","trials","seed","decoder_name","artifact_path"],returns:"family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat"},{name:"build_code_from_matrix",desc:"Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.",required:["H_matrix"],optional:["family","distance"],returns:"family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual"},{name:"compat_report",desc:"Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).",required:[],optional:[],returns:"runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces"}],d=[{name:"repetition",desc:"Open 1D chain parity-check code"},{name:"ring",desc:"Periodic ring code"},{name:"surface_legacy",desc:"Legacy toric weight-4 generator; NOT graphlike"},{name:"rotated_surface",desc:"Graphlike rotated surface code"},{name:"unrotated_surface",desc:"Graphlike square-lattice surface code"},{name:"toric",desc:"Graphlike toric code with periodic boundaries"},{name:"heavy_hex",desc:"Graphlike heavy-hex code"},{name:"color_code",desc:"Color code family exposed by the wheel"},{name:"hypergraph_product",desc:"CSS code from two parity-check matrices (requires build_code_from_matrix)"}],l=[{name:"union_find",type:"Graphlike",desc:"Standard cluster-growth Union-Find decoder."},{name:"fast_union_find",type:"Graphlike",desc:"Faster approximate Union-Find variant."},{name:"blossom",type:"Universal",desc:"Weight-optimal exact MWPM matching."},{name:"sparse_blossom",type:"Graphlike",desc:"Region-growing blossom variant for sparse error graphs."},{name:"native_auto",type:"Auto",desc:"Self-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product)."}],m=`{ - "mcpServers": { - "qector": { - "command": "python", - "args": ["\${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"] - } - } -}`,x=`{ - "jsonrpc": "2.0", - "id": 1, - "method": "tools/call", - "params": { - "name": "decode_single", - "arguments": { - "family": "rotated_surface", - "distance": 5, - "decoder_name": "blossom", - "error_rate": 0.05, - "seed": 42 - } - } -}`,h=`{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "content": [{ - "type": "text", - "text": "{\\n \\"family\\": \\"rotated_surface\\",\\n \\"distance\\": 5,\\n \\"decoder\\": \\"blossom\\",\\n \\"syndrome_valid\\": true,\\n \\"logical_scoring\\": \\"logical-observable matrix (Theorem 2)\\",\\n \\"logical_failure\\": false\\n}" - }] - } -}`;function b(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Library MCP Server · QECTOR Decoder v3 v1.0.1",description:"App-free Model Context Protocol server for quantum error correction decoding. 8 verified local stdio JSON-RPC 2.0 tools across 9 code families and 5 stable decoders. Ships as a local library; no Workbench or GUI required."}),e.jsx(i,{data:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"QECTOR Library MCP Server",applicationCategory:"DeveloperApplication",operatingSystem:"Windows, macOS, Linux",description:"Local stdio Model Context Protocol server exposing 8 QEC decoding tools. Designed for local stdio use."}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(n,{text:"Library MCP Server",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8",children:["The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "})," and coset-scored logical outcomes. Runs on ",e.jsx("code",{className:"text-cyan-300",children:"qector-decoder-v3 1.0.x"})," with",e.jsx("code",{className:"text-cyan-300",children:"mcp>=1.30,<3"}),"; no Workbench or GUI needed. Ships in the",e.jsx("code",{className:"text-cyan-300",children:"qector-claude-plugin"})," repository."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Documentation"}),e.jsx(a,{to:"/workbench",className:"btn-outline",children:"Workbench vs library"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-10",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Design principles"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[{t:"Deterministic, not generated",d:"The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful."},{t:"Runs locally",d:"Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry."},{t:"App-free",d:"Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required."}].map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-sm mb-2",children:s.t}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.d})]},s.t))}),e.jsxs("div",{className:"card-surface border border-cyan-800/60 bg-gradient-to-r from-cyan-950/40 via-surface to-cyan-950/20 p-6 rounded-2xl flex flex-col md:flex-row items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"inline-block px-2.5 py-0.5 rounded text-[11px] font-mono font-semibold bg-cyan-400 text-slate-950 mb-2",children:"CLAUDE PLUGIN"}),e.jsx("h3",{className:"text-lg font-bold text-slate-100 mb-1",children:"Looking for the full Claude Code Plugin?"}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:"The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux."})]}),e.jsx(a,{to:"/claude-plugin",className:"px-5 py-2.5 rounded-xl bg-cyan-400 hover:bg-cyan-300 text-slate-950 font-semibold text-xs font-mono transition-all whitespace-nowrap shadow-lg shadow-cyan-400/20",children:"Explore Claude Plugin →"})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Connect a client"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["The server speaks JSON-RPC 2.0 over local stdio and identifies itself as",e.jsx("code",{className:"text-cyan-300",children:" qector-decoder-v3-mcp "}),". Add it to Claude Code, Claude Desktop, or any MCP client:"]}),e.jsx(t,{language:"json",code:m}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["In Claude Code, root ",e.jsx("code",{className:"text-cyan-300",children:".mcp.json"})," already references this server via ",e.jsxs("code",{className:"text-cyan-300",children:["$","${CLAUDE_PLUGIN_ROOT}"]}),". Validate with",e.jsx("code",{className:"text-cyan-300",children:' claude plugin validate "" --strict '}),"."]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"8 Tools"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Returned verbatim by ",e.jsx("code",{className:"text-cyan-300",children:"tools/list"}),". The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP",e.jsx("code",{className:"text-cyan-300",children:" isError "})," result without leaking tracebacks."]}),e.jsx("div",{className:"space-y-4",children:o.map(s=>e.jsxs("div",{className:"card-surface",children:[e.jsx("div",{className:"flex flex-wrap items-baseline gap-3 mb-2",children:e.jsx("code",{className:"text-cyan-300 font-semibold text-base",children:s.name})}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:s.desc}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Required"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.required.length?s.required.map(r=>e.jsx("code",{className:"text-cyan-300 mr-2",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Optional"}),e.jsx("div",{className:"text-secondary flex flex-wrap gap-x-2 gap-y-1",children:s.optional.length?s.optional.map(r=>e.jsx("code",{className:"text-muted-foreground",children:r},r)):e.jsx("span",{className:"text-muted-foreground",children:"none"})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground uppercase tracking-wider mb-1",children:"Returns"}),e.jsx("div",{className:"text-secondary",children:s.returns})]})]})]},s.name))})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Code families & decoders"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "}),") and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl",children:[e.jsx("span",{className:"text-cyan-300 font-mono font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground mt-1 font-mono",children:["→ ",s.desc]})]},s.name))}),e.jsx("div",{className:"mt-4 overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-2 px-3",children:"Decoder"}),e.jsx("th",{className:"py-2 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-2 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:l.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-2 px-3 font-mono font-semibold text-primary",children:s.name}),e.jsx("td",{className:"py-2 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-2 px-3 text-secondary text-xs",children:s.desc})]},s.name))})]})})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:"Example call"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:[e.jsx("code",{className:"text-cyan-300",children:" decode_single "})," runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields."]}),e.jsx(t,{language:"json",code:x}),e.jsx("p",{className:"text-secondary text-sm mt-5 mb-3",children:"Response:"}),e.jsx(t,{language:"json",code:h}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-3",children:["Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The ",e.jsx("code",{className:"text-cyan-300",children:" H c = s (mod 2) "}),"check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Operational guidance"}),e.jsxs("ul",{className:"space-y-3 text-secondary text-sm leading-relaxed list-disc pl-5 marker:text-cyan-300/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Local only."})," The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Graphlike guard."})," Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as ",e.jsx("code",{className:"text-cyan-300",children:" generate_surface_code_checks "}),", use ",e.jsx("code",{className:"text-cyan-300",children:" build_code_from_matrix "})," or decompose via the documented direct-wheel APIs."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"LER is coset-scored."})," Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a ",e.jsx("code",{className:"text-cyan-300",children:" code_capacity "})," tag are included; do not compare with ",e.jsx("code",{className:"text-cyan-300",children:" circuit_level "})," results."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Artifacts stay local."})," ",e.jsx("code",{className:"text-cyan-300",children:" threshold_sweep "})," writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Licensing."})," See ",e.jsx(a,{to:"/pricing",className:"text-cyan-300",children:"Pricing"})," for license-key installation and tier information returned by ",e.jsx("code",{className:"text-cyan-300",children:" get_license_info "}),"."]})]})]}),e.jsx("div",{className:"text-center pt-2",children:e.jsx(a,{to:"/pricing",className:"btn-cyan",children:"View licensing"})})]})})]})}export{b as default}; diff --git a/assets/MetricCard-BJ0ePioZ.js b/assets/MetricCard-BJ0ePioZ.js deleted file mode 100644 index b97d2d6b..00000000 --- a/assets/MetricCard-BJ0ePioZ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";function m({label:t,value:r,desc:s,icon:n,variant:a="default",centered:c=!1,className:d=""}){const i=a==="compact",x=a==="gold"?"text-gold-400":"text-green-400",o=c?"text-center":"";return r?e.jsxs("div",{className:`card-surface ${o} ${d}`,children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-1",children:t}),e.jsx("div",{className:"text-primary font-bold text-2xl mb-2",children:r}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:s})]}):e.jsxs("div",{className:`${i?"p-4":"p-5"} bg-void border border-gridline rounded-xl transition-colors duration-300 hover:border-cyan-300/30 ${d}`,children:[e.jsxs("div",{className:`${x} font-bold text-sm mb-2 flex items-center gap-2`,children:[n&&e.jsx("span",{"aria-hidden":"true",children:n}),e.jsx("span",{children:t})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s})]})}export{m as M}; diff --git a/assets/NeuralReveal-BflyZYSb.js b/assets/NeuralReveal-BflyZYSb.js deleted file mode 100644 index d6ecb08c..00000000 --- a/assets/NeuralReveal-BflyZYSb.js +++ /dev/null @@ -1 +0,0 @@ -import{r as s,j as f}from"./vendor-react-BiHfrq0e.js";const C="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%&*";function w({text:t,triggerOnView:M=!0,scrambleDuration:d=1500,className:I="",as:k="span"}){const[E,p]=s.useState(t.split("")),[h,m]=s.useState(t.split("").map(()=>!0)),N=s.useRef(!1),R=s.useRef(null),i=s.useRef(null),v=s.useRef([]),l=s.useRef(t.split("").map(()=>!0)),j=s.useCallback(()=>{if(N.current||(N.current=!0,typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches))return;const n=t.split("").map(()=>!1);m(n),l.current=n,p(t.split("").map(()=>"_"));const c=t.length,b=d/c;i.current=setInterval(()=>{p(e=>{const r=[...e],a=r.map((y,S)=>S).filter(y=>!l.current[y]&&t[y]!==" ");if(a.length===0)return i.current&&clearInterval(i.current),r;const o=a[Math.floor(Math.random()*a.length)];return r[o]=C[Math.floor(Math.random()*C.length)],r})},20);for(let e=0;e{const o=[...a];return o[e]=" ",o});continue}const r=setTimeout(()=>{l.current[e]=!0,m([...l.current]),p(a=>{const o=[...a];return o[e]=t[e],o})},e*b+100);v.current.push(r)}const g=setTimeout(()=>{i.current&&clearInterval(i.current)},d+500);v.current.push(g)},[t,d]);return s.useEffect(()=>{if(!M){j();return}const u=new IntersectionObserver(([n])=>{n.isIntersecting&&(j(),u.disconnect())},{threshold:.3});return R.current&&u.observe(R.current),()=>{u.disconnect();const n=i.current,c=v.current;n&&clearInterval(n),c.forEach(clearTimeout)}},[M,j]),f.jsx("span",{ref:R,className:`inline-block ${I}`,children:f.jsx(k,{className:"font-mono","aria-label":t,children:f.jsx("span",{"aria-hidden":"true",children:t.split(" ").map((u,n,c)=>{const b=c.slice(0,n).join(" ").length+(n>0?1:0);return f.jsxs("span",{className:"inline-block whitespace-nowrap",children:[u.split("").map((g,e)=>{const r=b+e;return f.jsx("span",{className:`inline-block transition-opacity duration-100 ${h[r]?"opacity-100":"opacity-70"}`,style:{color:h[r]?void 0:"#67e8f9",textShadow:h[r]?void 0:"0 0 8px rgba(103, 232, 249, 0.5)"},children:E[r]},r)}),n!0)),M=r.useRef(!1),R=r.useRef(null),o=r.useRef(null),y=r.useRef([]),i=r.useRef(t.split("").map(()=>!0)),g=r.useCallback(()=>{if(M.current||(M.current=!0,typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches))return;const n=`qector-reveal:${t}`;try{if(window.sessionStorage.getItem(n))return;window.sessionStorage.setItem(n,"1")}catch{}const s=t.split("").map(()=>!1);v(s),i.current=s,p(t.split("").map(()=>"_"));const d=t.length,w=h/d;o.current=setInterval(()=>{p(e=>{const u=[...e],c=u.map((b,E)=>E).filter(b=>!i.current[b]&&t[b]!==" ");if(c.length===0)return o.current&&clearInterval(o.current),u;const a=c[Math.floor(Math.random()*c.length)];return u[a]=N[Math.floor(Math.random()*N.length)],u})},20);for(let e=0;e{const a=[...c];return a[e]=" ",a});continue}const u=setTimeout(()=>{i.current[e]=!0,v([...i.current]),p(c=>{const a=[...c];return a[e]=t[e],a})},e*w+30);y.current.push(u)}const j=setTimeout(()=>{o.current&&clearInterval(o.current)},h+200);y.current.push(j)},[t,h]);return r.useEffect(()=>{if(!I){g();return}const l=new IntersectionObserver(([n])=>{n.isIntersecting&&(g(),l.disconnect())},{threshold:.3});return R.current&&l.observe(R.current),()=>{l.disconnect();const n=o.current,s=y.current;n&&clearInterval(n),s.forEach(clearTimeout)}},[I,g]),f.jsx("span",{ref:R,className:`inline-block ${S}`,children:f.jsx(C,{"aria-label":t,"data-reveal-text":t,children:f.jsx("span",{"aria-hidden":"true",children:t.split(" ").map((l,n,s)=>{const d=s.slice(0,n).join(" ").length+(n>0?1:0);return f.jsxs("span",{className:"inline-block whitespace-nowrap",children:[l.split("").map((w,j)=>{const e=d+j;return f.jsx("span",{className:`inline-block transition-opacity duration-100 ${m[e]?"opacity-100":"opacity-70"}`,style:{color:m[e]?void 0:"#67e8f9",textShadow:m[e]?void 0:"0 0 8px rgba(103, 232, 249, 0.5)"},children:k[e]},e)}),n!0)),N=s.useRef(!1),v=s.useRef(null),i=s.useRef(null),R=s.useRef([]),l=s.useRef(e.split("").map(()=>!0)),j=s.useCallback(()=>{if(N.current||(N.current=!0,typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches))return;const n=e.split("").map(()=>!1);m(n),l.current=n,p(e.split("").map(()=>"_"));const c=e.length,b=d/c;i.current=setInterval(()=>{p(t=>{const r=[...t],a=r.map((y,S)=>S).filter(y=>!l.current[y]&&e[y]!==" ");if(a.length===0)return i.current&&clearInterval(i.current),r;const o=a[Math.floor(Math.random()*a.length)];return r[o]=C[Math.floor(Math.random()*C.length)],r})},20);for(let t=0;t{const o=[...a];return o[t]=" ",o});continue}const r=setTimeout(()=>{l.current[t]=!0,m([...l.current]),p(a=>{const o=[...a];return o[t]=e[t],o})},t*b+100);R.current.push(r)}const g=setTimeout(()=>{i.current&&clearInterval(i.current)},d+500);R.current.push(g)},[e,d]);return s.useEffect(()=>{if(!M){j();return}const u=new IntersectionObserver(([n])=>{n.isIntersecting&&(j(),u.disconnect())},{threshold:.3});return v.current&&u.observe(v.current),()=>{u.disconnect();const n=i.current,c=R.current;n&&clearInterval(n),c.forEach(clearTimeout)}},[M,j]),f.jsx("span",{ref:v,className:`inline-block ${I}`,children:f.jsx(k,{className:"font-mono","aria-label":e,"data-reveal-text":e,children:f.jsx("span",{"aria-hidden":"true",children:e.split(" ").map((u,n,c)=>{const b=c.slice(0,n).join(" ").length+(n>0?1:0);return f.jsxs("span",{className:"inline-block whitespace-nowrap",children:[u.split("").map((g,t)=>{const r=b+t;return f.jsx("span",{className:`inline-block transition-opacity duration-100 ${h[r]?"opacity-100":"opacity-70"}`,style:{color:h[r]?void 0:"#67e8f9",textShadow:h[r]?void 0:"0 0 8px rgba(103, 232, 249, 0.5)"},children:E[r]},r)}),n!0)),N=r.useRef(!1),R=r.useRef(null),i=r.useRef(null),y=r.useRef([]),l=r.useRef(t.split("").map(()=>!0)),j=r.useCallback(()=>{if(N.current||(N.current=!0,typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches))return;const n=`qector-reveal:${t}`;try{if(window.sessionStorage.getItem(n))return;window.sessionStorage.setItem(n,"1")}catch{}const s=t.split("").map(()=>!1);v(s),l.current=s,f(t.split("").map(()=>"_"));const d=t.length,b=h/d;i.current=setInterval(()=>{f(e=>{const p=[...e],c=p.map((I,E)=>E).filter(I=>!l.current[I]&&t[I]!==" ");if(c.length===0)return i.current&&clearInterval(i.current),p;const o=c[Math.floor(Math.random()*c.length)];return p[o]=w[Math.floor(Math.random()*w.length)],p})},20);for(let e=0;e{const o=[...c];return o[e]=" ",o});continue}const p=setTimeout(()=>{l.current[e]=!0,v([...l.current]),f(c=>{const o=[...c];return o[e]=t[e],o})},e*b+30);y.current.push(p)}const g=setTimeout(()=>{i.current&&clearInterval(i.current)},h+200);y.current.push(g)},[t,h]);return r.useEffect(()=>{if(!M){j();return}const u=new IntersectionObserver(([n])=>{n.isIntersecting&&(j(),u.disconnect())},{threshold:.3});return R.current&&u.observe(R.current),()=>{u.disconnect();const n=i.current,s=y.current;n&&clearInterval(n),s.forEach(clearTimeout)}},[M,j]),a.jsx("span",{ref:R,className:`inline-block ${S}`,children:a.jsxs(C,{"data-reveal-text":t,children:[a.jsx("span",{className:"sr-only",children:t}),a.jsx("span",{"aria-hidden":"true",children:t.split(" ").map((u,n,s)=>{const d=s.slice(0,n).join(" ").length+(n>0?1:0);return a.jsxs("span",{className:"inline-block whitespace-nowrap",children:[u.split("").map((b,g)=>{const e=d+g;return a.jsx("span",{className:`inline-block transition-opacity duration-100 ${m[e]?"opacity-100":"opacity-70"}`,style:{color:m[e]?void 0:"#67e8f9",textShadow:m[e]?void 0:"0 0 8px rgba(103, 232, 249, 0.5)"},children:k[e]},e)}),ne.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(a,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:n}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-2w75ETv5.js b/assets/NotFound-2w75ETv5.js deleted file mode 100644 index 33e7ad4c..00000000 --- a/assets/NotFound-2w75ETv5.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-abfjMTlQ.js";import{N as i}from"./NeuralReveal-D-EQoOl2.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-B9aHRzOY.js b/assets/NotFound-B9aHRzOY.js deleted file mode 100644 index 232f9ac0..00000000 --- a/assets/NotFound-B9aHRzOY.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-DlmjLVYe.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-BY-iDbPF.js b/assets/NotFound-BY-iDbPF.js deleted file mode 100644 index 71eea8a8..00000000 --- a/assets/NotFound-BY-iDbPF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r,L as t}from"./index-c1PDYu0j.js";import{N as i}from"./NeuralReveal-uYarhiMA.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const g=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function N(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:g.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{N as default}; diff --git a/assets/NotFound-BizOSXTq.js b/assets/NotFound-BizOSXTq.js deleted file mode 100644 index 7115a323..00000000 --- a/assets/NotFound-BizOSXTq.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-CpdATiEY.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-BqfnwVjo.js b/assets/NotFound-BqfnwVjo.js deleted file mode 100644 index 4d8088f4..00000000 --- a/assets/NotFound-BqfnwVjo.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-DkYdPRY7.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-BvmxweJ_.js b/assets/NotFound-BvmxweJ_.js deleted file mode 100644 index 190fd779..00000000 --- a/assets/NotFound-BvmxweJ_.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-BUYYSLdX.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-BxTs_LlH.js b/assets/NotFound-BxTs_LlH.js deleted file mode 100644 index 8e3d72f4..00000000 --- a/assets/NotFound-BxTs_LlH.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-WV1aysjN.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-C-HGJzn4.js b/assets/NotFound-C-HGJzn4.js deleted file mode 100644 index c99293aa..00000000 --- a/assets/NotFound-C-HGJzn4.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-BcbVjARk.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-COhWWTle.js b/assets/NotFound-COhWWTle.js deleted file mode 100644 index de28bf6b..00000000 --- a/assets/NotFound-COhWWTle.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-CxWP17m6.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-CYYBlHH3.js b/assets/NotFound-CYYBlHH3.js deleted file mode 100644 index f95cadd5..00000000 --- a/assets/NotFound-CYYBlHH3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r,L as t}from"./index-CcwlvHYJ.js";import{N as i}from"./NeuralReveal-Bsl9IGCr.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";const g=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function N(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:g.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{N as default}; diff --git a/assets/NotFound-Ceu7jCqq.js b/assets/NotFound-Ceu7jCqq.js deleted file mode 100644 index 62090961..00000000 --- a/assets/NotFound-Ceu7jCqq.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-B9kEGiWi.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-Cn29WaZX.js b/assets/NotFound-Cn29WaZX.js deleted file mode 100644 index 4bc7fc50..00000000 --- a/assets/NotFound-Cn29WaZX.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-CqAA-ZXu.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-D-ACnmyk.js b/assets/NotFound-D-ACnmyk.js deleted file mode 100644 index a87fba83..00000000 --- a/assets/NotFound-D-ACnmyk.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-Bh9DBCb3.js";import{N as i}from"./NeuralReveal-D-EQoOl2.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-DF9dH9QN.js b/assets/NotFound-DF9dH9QN.js deleted file mode 100644 index 1c35b05b..00000000 --- a/assets/NotFound-DF9dH9QN.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r,L as t}from"./index-DayaklK-.js";import{N as i}from"./NeuralReveal-uYarhiMA.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const g=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function N(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:g.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{N as default}; diff --git a/assets/NotFound-DY5xxcSZ.js b/assets/NotFound-DY5xxcSZ.js deleted file mode 100644 index f83cac04..00000000 --- a/assets/NotFound-DY5xxcSZ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-_BpMZhV3.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-DYyGE5rS.js b/assets/NotFound-DYyGE5rS.js deleted file mode 100644 index 1bf71a16..00000000 --- a/assets/NotFound-DYyGE5rS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-DRAXObZB.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/NotFound-Gl-W94M8.js b/assets/NotFound-Gl-W94M8.js deleted file mode 100644 index 30cb97bc..00000000 --- a/assets/NotFound-Gl-W94M8.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r,L as t}from"./index-PdoH5kLF.js";import{N as i}from"./NeuralReveal-Bsl9IGCr.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const g=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function N(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:g.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{N as default}; diff --git a/assets/NotFound-LmmZglSu.js b/assets/NotFound-LmmZglSu.js deleted file mode 100644 index 2639e87d..00000000 --- a/assets/NotFound-LmmZglSu.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r,L as t}from"./index-CCmwjNGU.js";import{N as i}from"./NeuralReveal-uYarhiMA.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const g=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function N(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:g.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{N as default}; diff --git a/assets/NotFound-Xb_C85Aw.js b/assets/NotFound-Xb_C85Aw.js deleted file mode 100644 index f53c687a..00000000 --- a/assets/NotFound-Xb_C85Aw.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as r}from"./index-BN-vOeL2.js";import{N as i}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import{H as l,g as c,B as d,w as x,x as m,l as u}from"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const p=[{to:"/decoder",icon:c,title:"QECTOR Decoder v3",desc:"17 decoder configurations for Python"},{to:"/docs",icon:d,title:"Documentation Hub",desc:"Guides, manuals, and references"},{to:"/evidence",icon:x,title:"Evidence & Reports",desc:"Contracts, methodology, artifacts"},{to:"/contact",icon:m,title:"Contact Engineering",desc:"Talk to the team behind QECTOR"}];function y(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"Page Not Found · QECTOR",description:"The requested page could not be found.",noindex:!0}),e.jsxs("section",{className:"relative min-h-[80vh] flex items-center justify-center section-padding py-24 md:py-32 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-transparent to-void pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[36rem] h-[36rem] bg-cyan-400/5 rounded-full blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-2xl mx-auto",children:[e.jsx("span",{className:"eyebrow-pill mb-6",children:"404 · Not found"}),e.jsx("div",{className:"text-8xl md:text-9xl font-extrabold tracking-tight leading-none mb-6",children:e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-b from-cyan-300/80 to-cyan-300/10 select-none","aria-hidden":"true",children:"404"})}),e.jsx("h1",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-4",children:e.jsx(i,{text:"Page Not Found",className:"text-3xl md:text-4xl font-bold"})}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed max-w-prose mx-auto mb-10",children:"The page you are looking for does not exist or has been moved. The links below will get you back on track."}),e.jsxs("div",{className:"flex flex-wrap gap-4 justify-center mb-14",children:[e.jsxs(t,{to:"/",className:"btn-cyan inline-flex items-center gap-2",children:[e.jsx(l,{size:16,"aria-hidden":"true"}),"Back to Home"]}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Documentation"})]}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-4 text-center",children:"You might be looking for"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:p.map(({to:s,icon:n,title:a,desc:o})=>e.jsxs(t,{to:s,className:"card-surface group flex items-center gap-4 !p-5 text-left",children:[e.jsx("span",{className:"shrink-0 w-10 h-10 rounded-xl bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 group-hover:bg-cyan-300/20 transition-colors duration-200",children:e.jsx(n,{size:18,"aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-semibold text-primary group-hover:text-cyan-200 transition-colors duration-200",children:a}),e.jsx("span",{className:"block text-xs text-muted-foreground leading-relaxed",children:o})]}),e.jsx(u,{size:16,"aria-hidden":"true",className:"shrink-0 text-muted-foreground group-hover:text-cyan-300 group-hover:translate-x-1 transition-all duration-200"})]},s))})]})]})]})]})}export{y as default}; diff --git a/assets/Pricing-01bd34ST.js b/assets/Pricing-01bd34ST.js deleted file mode 100644 index 542ad412..00000000 --- a/assets/Pricing-01bd34ST.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,b as s,J as u,L as n,C as f}from"./index-DlmjLVYe.js";import{F as p,T as y,P as l}from"./TrialForm-BEDfCuvx.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";o.registerPlugin(g);function L(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const i=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{i.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,i)=>{r&&(d.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Free ${a.trialDays}-day commercial trial. Pro from ${s(a.proMonthly)}/month, Team ${s(a.team)}/yr, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, start a free"," ",a.trialDays,"-day trial, then pick a plan: cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:r=>t(r,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Free · No card · Token by e-mail"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:[a.trialDays,"-Day Commercial Trial"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Evaluate QECTOR on your own workloads with full commercial evaluation rights: every decoder family, CPU and GPU (CUDA/OpenCL) batch decoding, offline licence verification."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Up to 5 internal users"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expires on its own: nothing to cancel"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," One trial per address per year"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(y,{lang:"en"})})]})})}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for internal use. Plans renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Team and Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`One named user. Or ${s(a.proAnnual)}/year (2 months free).`,features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:n.proMonthly}),e.jsx(l,{name:"Team",price:s(a.team),period:"/ year",desc:"Up to 10 named users.",featured:!0,featuredLabel:"Best for startups",features:["Everything in Pro","Up to 10 named users","Priority support (1 business day)","2-hour onboarding call"],ctaLabel:"Buy Team",ctaHref:n.team}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Up to 25 named users. Enterprise licence tier.",features:["Everything in Team","Code distances up to 63","Support SLA","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:n.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Unlimited seats","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:n.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:n.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(c,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:n.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Team or Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,i)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},i))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(c,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(c,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{L as default}; diff --git a/assets/Pricing-BMbyXkw2.js b/assets/Pricing-BMbyXkw2.js deleted file mode 100644 index c948483b..00000000 --- a/assets/Pricing-BMbyXkw2.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as s,c as a,J as u,d as i,M as f,L as l,C as y}from"./index-CCmwjNGU.js";import{F as p,P as o}from"./faqData-De1eOWz0.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B8TlNU4J.js";c.registerPlugin(b);function k(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${a(s.proMonthly)}/month, Lab ${a(s.lab)}/yr, Enterprise and OEM from ${a(s.enterpriseFrom)}/yr. ${s.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(g,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",s.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[s.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",s.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:a(s.proMonthly),period:"/ month",desc:`Or ${a(s.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(o,{name:"Lab",price:a(s.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(o,{name:"Enterprise & OEM",price:`$${s.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[a(s.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",a(s.proPerpetual)," one-time"]})})," ","(every 1.x release, 12 months of support)."]})})]}),e.jsx(f,{more:"Validation Sprint and activation",children:e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",s.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[s.pilotDays,"-day Pilot is ",a(s.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(y,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]})}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 items-start",children:p.map((r,n)=>e.jsxs("details",{className:"faq-item group bg-surface/30 border border-gridline/40 rounded-2xl hover:bg-surface/60 transition-colors",children:[e.jsxs("summary",{className:"cursor-pointer list-none flex items-start justify-between gap-4 p-5 min-h-[44px] text-base font-bold text-cyan-300",children:[e.jsx("h3",{className:"text-base font-bold",children:r.q}),e.jsx("span",{"aria-hidden":"true",className:"shrink-0 text-muted-foreground transition-transform group-open:rotate-45 text-xl leading-none",children:"+"})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed px-5 pb-5",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",s.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("p",{children:["By purchasing, you accept the ",e.jsx(l,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Licence Agreement"}),e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Manage subscription"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{k as default}; diff --git a/assets/Pricing-BbPwznPI.js b/assets/Pricing-BbPwznPI.js deleted file mode 100644 index 97eafe51..00000000 --- a/assets/Pricing-BbPwznPI.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,J as x,C as p}from"./index-_BpMZhV3.js";import{F as d,P as r}from"./faqData-gdKKGDcm.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as l,S as h}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";l.registerPlugin(h);function E(){const n=o.useRef([]);o.useEffect(()=>{const t=document.createElement("script");if(t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const a=l.context(()=>{n.current.filter(Boolean).forEach(c=>{l.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{a.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const s=(t,a)=>{t&&(n.current[a]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Pricing · QECTOR",description:"QECTOR Decoder v3 commercial licensing. $499 one-time 60-day evaluation, fully creditable. Annual production tiers from $1,299/yr. Enterprise and OEM custom pricing. Prices in USD, exclusive of tax.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(x,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:d.map(t=>({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:t.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 is Source-Available for academic and non-commercial research. For internal R&D, pilot programs, and commercial deployment, select a license below."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:t=>s(t,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Commercial Evaluation"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"A 60-day full-access pilot designed for serious QEC research teams. Includes CPU + CUDA batch decoding, written license agreement, benchmark artifact package, and priority support."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," 100% creditable toward any annual license purchased within 90 days of your evaluation start"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Unlimited internal seats"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"$499"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"One-time flat fee"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Start 60-Day Pilot"})]})]})})}),e.jsxs("div",{ref:t=>s(t,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Annual Production Tiers"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"For teams deploying QECTOR internally or integrating into private SaaS infrastructure."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," 40% Academic Discount available on all annual tiers. Contact sales."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(r,{name:"Solo / Indie",price:"$1,299",period:"/ year",desc:"Production rights for a single named user.",features:["Full v3 decoders","Commercial R&D rights","Single named user","Priority email support"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(r,{name:"Startup / Growth",price:"$4,499",period:"/ year",desc:"Up to 10 named users. Advanced BP-OSD/LDPC workflows.",featured:!0,featuredLabel:"Most Popular",features:["Up to 10 named users","Advanced BP-OSD/LDPC","CPU + CUDA batch","Support SLA + 2hr integration"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(r,{name:"Professional",price:"$11,500",period:"/ year",desc:"Up to 25 named users. Validation Report Package credit.",features:["Up to 25 named users","All advanced workflows","Dedicated integration","Validation Report credit"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(r,{name:"Enterprise & OEM",price:"Custom",period:"",desc:"Unlimited seats, custom builds, and SaaS/OEM distribution.",accent:"gold",features:["Unlimited logical qubits","SaaS hosting rights","OEM bundling rights","Dedicated support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Prefer to own it outright? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpetual is $3,299 one-time."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contact sales to activate"})]})})]}),e.jsxs("div",{ref:t=>s(t,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes 60-day Commercial Evaluation"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Setting your license token simply disables the non-commercial usage notice."}),e.jsx(p,{language:"bash",className:"mb-6",code:`# Commercial use: activate with the Ed25519 token -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optional: suppress the licensing notice in CI logs -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:t=>s(t,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:t=>s(t,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:d.map((t,a)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:t.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.a})]},a))})]}),e.jsxs("div",{ref:t=>s(t,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are USD and exclude tax. Stripe handles local taxes automatically. Tokens are delivered instantly via email. Due to instant delivery, sales are final. Please use the $499 Evaluation to test suitability before annual commitment."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{E as default}; diff --git a/assets/Pricing-Bqb9jgZa.js b/assets/Pricing-Bqb9jgZa.js deleted file mode 100644 index 6707115f..00000000 --- a/assets/Pricing-Bqb9jgZa.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,b as s,J as u,L as n,C as f}from"./index-WV1aysjN.js";import{F as p,T as y,P as l}from"./TrialForm-CC5CTQMP.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";o.registerPlugin(g);function L(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const i=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{i.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,i)=>{r&&(d.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Free ${a.trialDays}-day commercial trial. Pro from ${s(a.proMonthly)}/month, Team ${s(a.team)}/yr, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, start a free"," ",a.trialDays,"-day trial, then pick a plan: cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:r=>t(r,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Free · No card · Token by e-mail"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:[a.trialDays,"-Day Commercial Trial"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Evaluate QECTOR on your own workloads with full commercial evaluation rights: every decoder family, CPU and GPU (CUDA/OpenCL) batch decoding, offline licence verification."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Up to 5 internal users"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expires on its own: nothing to cancel"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," One trial per address per year"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(y,{lang:"en"})})]})})}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for internal use. Plans renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Team and Lab for industry-funded university projects. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`One named user. Or ${s(a.proAnnual)}/year (2 months free).`,features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:n.proMonthly}),e.jsx(l,{name:"Team",price:s(a.team),period:"/ year",desc:"Up to 10 named users.",featured:!0,featuredLabel:"Best for startups",features:["Everything in Pro","Up to 10 named users","Priority support (1 business day)","2-hour onboarding call"],ctaLabel:"Buy Team",ctaHref:n.team}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Up to 25 named users. Enterprise licence tier.",features:["Everything in Team","Code distances up to 63","Support SLA","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:n.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`from ${s(a.enterpriseFrom)}`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Unlimited seats","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:n.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:n.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(c,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:n.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Team or Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,i)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},i))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(c,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(c,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{L as default}; diff --git a/assets/Pricing-CL6UmMkO.js b/assets/Pricing-CL6UmMkO.js deleted file mode 100644 index 8147a5dd..00000000 --- a/assets/Pricing-CL6UmMkO.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,c as s,J as u,d as i,L as l,C as y}from"./index-PdoH5kLF.js";import{F as p,P as c}from"./faqData-IO8c0Ufu.js";import{N as f}from"./NeuralReveal-Bsl9IGCr.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as b}from"./vendor-ui-B8TlNU4J.js";o.registerPlugin(g);function P(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(b,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(c,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(c,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(c,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 1.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(y,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("p",{children:["By purchasing, you accept the ",e.jsx(l,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Licence Agreement"}),e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Manage subscription"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{P as default}; diff --git a/assets/Pricing-CZj0aLPH.js b/assets/Pricing-CZj0aLPH.js deleted file mode 100644 index 5c91a104..00000000 --- a/assets/Pricing-CZj0aLPH.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,J as x,C as p}from"./index-BcbVjARk.js";import{F as d,P as a}from"./faqData-CCPvMSkf.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as n,S as h}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";n.registerPlugin(h);function E(){const l=o.useRef([]);o.useEffect(()=>{const t=document.createElement("script");if(t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=n.context(()=>{l.current.filter(Boolean).forEach(c=>{n.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{r.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const s=(t,r)=>{t&&(l.current[r]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Pricing · QECTOR",description:"QECTOR Decoder v3 commercial licensing. $499 one-time 60-day evaluation, fully creditable. Annual production tiers from $1,299/yr. Enterprise and OEM custom pricing. Prices in USD, exclusive of tax.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(x,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:d.map(t=>({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:t.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 is Source-Available for academic and non-commercial research. For internal R&D, pilot programs, and commercial deployment, select a license below."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:t=>s(t,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Commercial Evaluation"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"A 60-day full-access pilot designed for serious QEC research teams. Includes CPU + CUDA batch decoding, written license agreement, benchmark artifact package, and priority support."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," 100% creditable toward any annual license purchased within 90 days of your evaluation start"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Unlimited internal seats"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"$499"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"One-time flat fee"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Start 60-Day Pilot"})]})]})})}),e.jsxs("div",{ref:t=>s(t,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Annual Production Tiers"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"For teams deploying QECTOR internally or integrating into private SaaS infrastructure."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," 40% Academic Discount available on all annual tiers. Contact sales."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(a,{name:"Solo / Indie",price:"$1,299",period:"/ year",desc:"Production rights for a single named user.",features:["Full v3 decoders","Commercial R&D rights","Single named user","Priority email support"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(a,{name:"Startup / Growth",price:"$4,499",period:"/ year",desc:"Up to 10 named users. Advanced BP-OSD/LDPC workflows.",featured:!0,featuredLabel:"Most Popular",features:["Up to 10 named users","Advanced BP-OSD/LDPC","CPU + CUDA batch","Support SLA + 2hr integration"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(a,{name:"Professional",price:"$11,500",period:"/ year",desc:"Up to 25 named users. Validation Report Package credit.",features:["Up to 25 named users","All advanced workflows","Dedicated integration","Validation Report credit"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(a,{name:"Enterprise & OEM",price:"Custom",period:"",desc:"Unlimited seats, custom builds, and SaaS/OEM distribution.",accent:"gold",features:["Unlimited logical qubits","SaaS hosting rights","OEM bundling rights","Dedicated support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Prefer to own it outright? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpetual is $3,299 one-time."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contact sales to activate"})]})})]}),e.jsxs("div",{ref:t=>s(t,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes 60-day Commercial Evaluation"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Setting your license token disables the non-commercial usage notice and unlocks your tier's runtime features: distance caps of 7, 19, or 63 depending on tier, and GPU batch paths on Pro and Enterprise tiers."}),e.jsx(p,{language:"bash",className:"mb-6",code:`# Commercial use: activate with the Ed25519 token -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optional: suppress the licensing notice in CI logs -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:t=>s(t,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:t=>s(t,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:d.map((t,r)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:t.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.a})]},r))})]}),e.jsxs("div",{ref:t=>s(t,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are USD and exclude tax. Stripe handles local taxes automatically. Tokens are delivered instantly via email. Due to instant delivery, sales are final. Please use the $499 Evaluation to test suitability before annual commitment."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{E as default}; diff --git a/assets/Pricing-Cn8Zecmp.js b/assets/Pricing-Cn8Zecmp.js deleted file mode 100644 index 8a76eca8..00000000 --- a/assets/Pricing-Cn8Zecmp.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,b as s,J as u,L as i,C as y}from"./index-Bh9DBCb3.js";import{F as p,P as c}from"./faqData-D7ZwBN6k.js";import{N as f}from"./NeuralReveal-D-EQoOl2.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as b}from"./vendor-ui-B0ssGG4c.js";import{L as l}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";o.registerPlugin(g);function L(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(b,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(c,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(c,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(c,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 1.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(y,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("p",{children:["By purchasing, you accept the ",e.jsx(l,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Licence Agreement"}),e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Manage subscription"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{L as default}; diff --git a/assets/Pricing-D2yXl8FX.js b/assets/Pricing-D2yXl8FX.js deleted file mode 100644 index 065e3ab9..00000000 --- a/assets/Pricing-D2yXl8FX.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,c as s,J as u,d as i,L as l,C as y}from"./index-CcwlvHYJ.js";import{F as p,P as c}from"./faqData-DUePwhCA.js";import{N as f}from"./NeuralReveal-Bsl9IGCr.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as b}from"./vendor-ui-B0ssGG4c.js";o.registerPlugin(g);function P(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(b,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(c,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(c,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(c,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 1.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(y,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("p",{children:["By purchasing, you accept the ",e.jsx(l,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Licence Agreement"}),e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Manage subscription"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{P as default}; diff --git a/assets/Pricing-D3uoCnYX.js b/assets/Pricing-D3uoCnYX.js deleted file mode 100644 index 1a64af5b..00000000 --- a/assets/Pricing-D3uoCnYX.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,P as a,b as s,J as h,L as i,C as f}from"./index-DRAXObZB.js";import{F as p,P as l}from"./faqData-CHsSn8s2.js";import{N as y}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function S(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(h,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(y,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{S as default}; diff --git a/assets/Pricing-DIy3-kFX.js b/assets/Pricing-DIy3-kFX.js deleted file mode 100644 index a564e8e3..00000000 --- a/assets/Pricing-DIy3-kFX.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,J as x,C as p}from"./index-B9kEGiWi.js";import{F as d,P as r}from"./faqData-CCPvMSkf.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as l,S as h}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";l.registerPlugin(h);function E(){const n=o.useRef([]);o.useEffect(()=>{const t=document.createElement("script");if(t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const a=l.context(()=>{n.current.filter(Boolean).forEach(c=>{l.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{a.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const s=(t,a)=>{t&&(n.current[a]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Pricing · QECTOR",description:"QECTOR Decoder v3 commercial licensing. $499 one-time 60-day evaluation, fully creditable. Annual production tiers from $1,299/yr. Enterprise and OEM custom pricing. Prices in USD, exclusive of tax.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(x,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:d.map(t=>({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:t.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 is Source-Available for academic and non-commercial research. For internal R&D, pilot programs, and commercial deployment, select a license below."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:t=>s(t,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Commercial Evaluation"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"A 60-day full-access pilot designed for serious QEC research teams. Includes CPU + CUDA batch decoding, written license agreement, benchmark artifact package, and priority support."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," 100% creditable toward any annual license purchased within 90 days of your evaluation start"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Unlimited internal seats"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"$499"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"One-time flat fee"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Start 60-Day Pilot"})]})]})})}),e.jsxs("div",{ref:t=>s(t,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Annual Production Tiers"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"For teams deploying QECTOR internally or integrating into private SaaS infrastructure."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," 40% Academic Discount available on all annual tiers. Contact sales."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(r,{name:"Solo / Indie",price:"$1,299",period:"/ year",desc:"Production rights for a single named user.",features:["Full v3 decoders","Commercial R&D rights","Single named user","Priority email support"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(r,{name:"Startup / Growth",price:"$4,499",period:"/ year",desc:"Up to 10 named users. Advanced BP-OSD/LDPC workflows.",featured:!0,featuredLabel:"Most Popular",features:["Up to 10 named users","Advanced BP-OSD/LDPC","CPU + CUDA batch","Support SLA + 2hr integration"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(r,{name:"Professional",price:"$11,500",period:"/ year",desc:"Up to 25 named users. Validation Report Package credit.",features:["Up to 25 named users","All advanced workflows","Dedicated integration","Validation Report credit"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(r,{name:"Enterprise & OEM",price:"Custom",period:"",desc:"Unlimited seats, custom builds, and SaaS/OEM distribution.",accent:"gold",features:["Unlimited logical qubits","SaaS hosting rights","OEM bundling rights","Dedicated support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Prefer to own it outright? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpetual is $3,299 one-time."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contact sales to activate"})]})})]}),e.jsxs("div",{ref:t=>s(t,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes 60-day Commercial Evaluation"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Setting your license token simply disables the non-commercial usage notice."}),e.jsx(p,{language:"bash",className:"mb-6",code:`# Commercial use: activate with the Ed25519 token -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optional: suppress the licensing notice in CI logs -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:t=>s(t,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:t=>s(t,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:d.map((t,a)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:t.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.a})]},a))})]}),e.jsxs("div",{ref:t=>s(t,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are USD and exclude tax. Stripe handles local taxes automatically. Tokens are delivered instantly via email. Due to instant delivery, sales are final. Please use the $499 Evaluation to test suitability before annual commitment."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{E as default}; diff --git a/assets/Pricing-DJJSKVoA.js b/assets/Pricing-DJJSKVoA.js deleted file mode 100644 index d240045e..00000000 --- a/assets/Pricing-DJJSKVoA.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,b as s,J as u,L as n,C as f}from"./index-BN-vOeL2.js";import{F as p,T as y,P as l}from"./TrialForm-BIjatKya.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";o.registerPlugin(g);function L(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const i=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{i.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,i)=>{r&&(d.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Free ${a.trialDays}-day commercial trial. Pro from ${s(a.proMonthly)}/month, Team ${s(a.team)}/yr, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, start a free"," ",a.trialDays,"-day trial, then pick a plan: cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:r=>t(r,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Free · No card · Token by e-mail"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:[a.trialDays,"-Day Commercial Trial"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Evaluate QECTOR on your own workloads with full commercial evaluation rights: every decoder family, CPU and GPU (CUDA/OpenCL) batch decoding, offline licence verification."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Up to 5 internal users"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expires on its own: nothing to cancel"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," One trial per address per year"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(y,{lang:"en"})})]})})}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for internal use. Plans renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Team and Lab for industry-funded university projects. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`One named user. Or ${s(a.proAnnual)}/year (2 months free).`,features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:n.proMonthly}),e.jsx(l,{name:"Team",price:s(a.team),period:"/ year",desc:"Up to 10 named users.",featured:!0,featuredLabel:"Best for startups",features:["Everything in Pro","Up to 10 named users","Priority support (1 business day)","2-hour onboarding call"],ctaLabel:"Buy Team",ctaHref:n.team}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Up to 25 named users. Enterprise licence tier.",features:["Everything in Team","Code distances up to 63","Support SLA","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:n.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Unlimited seats","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:n.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:n.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(c,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:n.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Team or Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,i)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},i))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(c,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(c,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{L as default}; diff --git a/assets/Pricing-DMwpPJSq.js b/assets/Pricing-DMwpPJSq.js deleted file mode 100644 index 6a76766c..00000000 --- a/assets/Pricing-DMwpPJSq.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as m,J as x,C as p}from"./index-iVST85F-.js";import{F as d,P as r}from"./faqData-CYz7igrM.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as l,S as h}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";l.registerPlugin(h);function E(){const n=o.useRef([]);o.useEffect(()=>{const t=document.createElement("script");if(t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const a=l.context(()=>{n.current.filter(Boolean).forEach(c=>{l.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{a.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const s=(t,a)=>{t&&(n.current[a]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(m,{title:"Pricing · QECTOR",description:"QECTOR Decoder v3 commercial licensing. $499 one-time 60-day evaluation, fully creditable. Annual production tiers from $1,299/yr. Enterprise and OEM custom pricing. Prices in USD, exclusive of tax.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(x,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:d.map(t=>({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:t.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 is Source-Available for academic and non-commercial research. For internal R&D, pilot programs, and commercial deployment, select a license below."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:t=>s(t,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Commercial Evaluation"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"A 60-day full-access pilot designed for serious QEC research teams. Includes CPU + CUDA batch decoding, written license agreement, benchmark artifact package, and priority support."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," 100% creditable toward any annual license purchased within 90 days of your evaluation start"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Unlimited internal seats"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"$499"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"One-time flat fee"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Start 60-Day Pilot"})]})]})})}),e.jsxs("div",{ref:t=>s(t,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Annual Production Tiers"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"For teams deploying QECTOR internally or integrating into private SaaS infrastructure."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," 40% Academic Discount available on all annual tiers. Contact sales."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(r,{name:"Solo / Indie",price:"$1,299",period:"/ year",desc:"Production rights for a single named user.",features:["Full v3 decoders","Commercial R&D rights","Single named user","Priority email support"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(r,{name:"Startup / Growth",price:"$4,499",period:"/ year",desc:"Up to 10 named users. Advanced BP-OSD/LDPC workflows.",featured:!0,featuredLabel:"Most Popular",features:["Up to 10 named users","Advanced BP-OSD/LDPC","CPU + CUDA batch","Support SLA + 2hr integration"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(r,{name:"Professional",price:"$11,500",period:"/ year",desc:"Up to 25 named users. Validation Report Package credit.",features:["Up to 25 named users","All advanced workflows","Dedicated integration","Validation Report credit"],ctaLabel:"Buy Now",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(r,{name:"Enterprise & OEM",price:"Custom",period:"",desc:"Unlimited seats, custom builds, and SaaS/OEM distribution.",accent:"gold",features:["Unlimited logical qubits","SaaS hosting rights","OEM bundling rights","Dedicated support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Prefer to own it outright? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpetual is $3,299 one-time."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contact sales to activate"})]})})]}),e.jsxs("div",{ref:t=>s(t,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes 60-day Commercial Evaluation"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Setting your license token simply disables the non-commercial usage notice."}),e.jsx(p,{language:"bash",className:"mb-6",code:`# Commercial use: activate with the Ed25519 token -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optional: suppress the licensing notice in CI logs -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:t=>s(t,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:t=>s(t,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:d.map((t,a)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:t.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:t.a})]},a))})]}),e.jsxs("div",{ref:t=>s(t,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are USD and exclude tax. Stripe handles local taxes automatically. Tokens are delivered instantly via email. Due to instant delivery, sales are final. Please use the $499 Evaluation to test suitability before annual commitment."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{E as default}; diff --git a/assets/Pricing-Ddy-FPVH.js b/assets/Pricing-Ddy-FPVH.js deleted file mode 100644 index 976bf03a..00000000 --- a/assets/Pricing-Ddy-FPVH.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,P as a,b as s,J as h,L as i,C as f}from"./index-CxWP17m6.js";import{F as p,P as l}from"./faqData-CHsSn8s2.js";import{N as y}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function S(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(h,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(y,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{S as default}; diff --git a/assets/Pricing-Deid2xWF.js b/assets/Pricing-Deid2xWF.js deleted file mode 100644 index deb761bc..00000000 --- a/assets/Pricing-Deid2xWF.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,b as s,J as u,L as n,C as f}from"./index-CpdATiEY.js";import{F as p,T as y,P as l}from"./TrialForm-D2xU-ZBp.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";o.registerPlugin(g);function L(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const i=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{i.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,i)=>{r&&(d.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Free ${a.trialDays}-day commercial trial. Pro from ${s(a.proMonthly)}/month, Team ${s(a.team)}/yr, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, start a free"," ",a.trialDays,"-day trial, then pick a plan: cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:r=>t(r,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Free · No card · Token by e-mail"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:[a.trialDays,"-Day Commercial Trial"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Evaluate QECTOR on your own workloads with full commercial evaluation rights: every decoder family, CPU and GPU (CUDA/OpenCL) batch decoding, offline licence verification."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Up to 5 internal users"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expires on its own: nothing to cancel"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," One trial per address per year"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(y,{lang:"en"})})]})})}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for internal use. Plans renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Team and Lab for industry-funded university projects. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`One named user. Or ${s(a.proAnnual)}/year (2 months free).`,features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:n.proMonthly}),e.jsx(l,{name:"Team",price:s(a.team),period:"/ year",desc:"Up to 10 named users.",featured:!0,featuredLabel:"Best for startups",features:["Everything in Pro","Up to 10 named users","Priority support (1 business day)","2-hour onboarding call"],ctaLabel:"Buy Team",ctaHref:n.team}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Up to 25 named users. Enterprise licence tier.",features:["Everything in Team","Code distances up to 63","Support SLA","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:n.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Unlimited seats","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:n.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:n.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(c,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:n.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Team or Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,i)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},i))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(c,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(c,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{L as default}; diff --git a/assets/Pricing-DkKSNR_L.js b/assets/Pricing-DkKSNR_L.js deleted file mode 100644 index 6ca9a409..00000000 --- a/assets/Pricing-DkKSNR_L.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,P as a,b as s,J as h,L as i,C as f}from"./index-DkYdPRY7.js";import{F as p,P as l}from"./faqData-CHsSn8s2.js";import{N as y}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function S(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(h,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(y,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{S as default}; diff --git a/assets/Pricing-DpB7aYgZ.js b/assets/Pricing-DpB7aYgZ.js deleted file mode 100644 index 267ece16..00000000 --- a/assets/Pricing-DpB7aYgZ.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,c as s,J as u,d as i,L as l,C as y}from"./index-DayaklK-.js";import{F as p,P as c}from"./faqData-CvhYJZQK.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as b}from"./vendor-ui-B8TlNU4J.js";o.registerPlugin(g);function P(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(b,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(c,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(c,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(c,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 1.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(y,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("p",{children:["By purchasing, you accept the ",e.jsx(l,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Licence Agreement"}),e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Manage subscription"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{P as default}; diff --git a/assets/Pricing-DtCO08jL.js b/assets/Pricing-DtCO08jL.js deleted file mode 100644 index 1c469ee9..00000000 --- a/assets/Pricing-DtCO08jL.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,c as s,J as u,d as i,L as l,C as y}from"./index-c1PDYu0j.js";import{F as p,P as c}from"./faqData-B9kvzm8o.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as b}from"./vendor-ui-B8TlNU4J.js";o.registerPlugin(g);function P(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(b,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(c,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(c,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(c,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 1.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(y,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("p",{children:["By purchasing, you accept the ",e.jsx(l,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Licence Agreement"}),e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Manage subscription"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{P as default}; diff --git a/assets/Pricing-VNXAJmmp.js b/assets/Pricing-VNXAJmmp.js deleted file mode 100644 index 0d4554cb..00000000 --- a/assets/Pricing-VNXAJmmp.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,b as s,J as u,L as i,C as y}from"./index-abfjMTlQ.js";import{F as p,P as c}from"./faqData-D7ZwBN6k.js";import{N as f}from"./NeuralReveal-D-EQoOl2.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as b}from"./vendor-ui-B0ssGG4c.js";import{L as l}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";o.registerPlugin(g);function L(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(b,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(c,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(c,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(c,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 1.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(y,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("p",{children:["By purchasing, you accept the ",e.jsx(l,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Licence Agreement"}),e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{L as default}; diff --git a/assets/Pricing-b_XG04Ml.js b/assets/Pricing-b_XG04Ml.js deleted file mode 100644 index 1e6088c4..00000000 --- a/assets/Pricing-b_XG04Ml.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,P as a,b as s,J as u,L as n,C as f}from"./index-CqAA-ZXu.js";import{F as p,T as y,P as l}from"./TrialForm-CpW40uwE.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as o,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as c}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";o.registerPlugin(g);function L(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const i=o.context(()=>{d.current.filter(Boolean).forEach(m=>{o.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{i.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,i)=>{r&&(d.current[i]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Free ${a.trialDays}-day commercial trial. Pro from ${s(a.proMonthly)}/month, Team ${s(a.team)}/yr, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(u,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, start a free"," ",a.trialDays,"-day trial, then pick a plan: cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:r=>t(r,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Free · No card · Token by e-mail"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:[a.trialDays,"-Day Commercial Trial"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Evaluate QECTOR on your own workloads with full commercial evaluation rights: every decoder family, CPU and GPU (CUDA/OpenCL) batch decoding, offline licence verification."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Up to 5 internal users"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expires on its own: nothing to cancel"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," One trial per address per year"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(y,{lang:"en"})})]})})}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for internal use. Plans renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Team and Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`One named user. Or ${s(a.proAnnual)}/year (2 months free).`,features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:n.proMonthly}),e.jsx(l,{name:"Team",price:s(a.team),period:"/ year",desc:"Up to 10 named users.",featured:!0,featuredLabel:"Best for startups",features:["Everything in Pro","Up to 10 named users","Priority support (1 business day)","2-hour onboarding call"],ctaLabel:"Buy Team",ctaHref:n.team}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Up to 25 named users. Enterprise licence tier.",features:["Everything in Team","Code distances up to 63","Support SLA","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:n.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Unlimited seats","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:n.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:n.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(c,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:n.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Team or Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,i)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},i))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(c,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(c,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{L as default}; diff --git a/assets/Pricing-xevqAEll.js b/assets/Pricing-xevqAEll.js deleted file mode 100644 index 02cf129a..00000000 --- a/assets/Pricing-xevqAEll.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,P as a,b as s,J as h,L as i,C as f}from"./index-BUYYSLdX.js";import{F as p,P as l}from"./faqData-CHsSn8s2.js";import{N as y}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function S(){const d=x.useRef([]);x.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const t=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Pricing · QECTOR",description:`QECTOR Decoder v3 commercial licensing. Pro from ${s(a.proMonthly)}/month, Lab ${s(a.lab)}/yr, Enterprise and OEM from ${s(a.enterpriseFrom)}/yr. ${a.refundDays}-day money-back. Prices in USD; tax added at checkout where applicable.`,lang:"en",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsx(h,{data:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:p.map(r=>({"@type":"Question",name:r.q,acceptedAnswer:{"@type":"Answer",text:r.a}}))}}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Clear, Transparent Commercial Licensing"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(y,{text:"License QECTOR for Production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, ",a.refundDays,"-day money-back on your first payment."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>t(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Air-gapped"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Signed token, verified offline. No licence server, no phone-home."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:[a.refundDays,"-day money-back"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Full refund on your first payment of any plan, no questions asked."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Cancel any time"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Your licence stays valid to the end of the period you paid for."})]})]}),e.jsxs("div",{ref:r=>t(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Commercial Plans"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",a.academicDiscountPct,"% off Lab for academic institutions. Non-commercial research is free."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(l,{name:"Pro",price:s(a.proMonthly),period:"/ month",desc:`Or ${s(a.proAnnual)}/year (2 months free). Pro licence tier.`,featured:!0,featuredLabel:"Most popular",features:["Commercial internal use","All decoder families","CPU + GPU (CUDA/OpenCL) batch","Code distances up to 19","Email support (2 business days)"],ctaLabel:"Buy monthly",ctaHref:i.proMonthly}),e.jsx(l,{name:"Lab",price:s(a.lab),period:"/ year",desc:"Enterprise licence tier, for research groups and labs.",features:["Everything in Pro","Code distances up to 63","Priority support with SLA","2-hour onboarding call","One Validation Report ($5,000 value)"],ctaLabel:"Buy Lab",ctaHref:i.lab}),e.jsx(l,{name:"Enterprise & OEM",price:`$${a.enterpriseFrom/1e3}k+`,period:"/ year",desc:"Redistribution, SaaS, OEM and custom terms.",accent:"gold",features:["Signed agreement, custom terms","SaaS and customer-facing APIs","OEM and hardware bundling","Named support engineer"],ctaLabel:"Contact Sales",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro billed yearly: ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[s(a.proAnnual)," / year"]}),"."," ","Prefer to own it? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpetual: ",s(a.proPerpetual)," one-time"]})})," ","(every 3.x release, 12 months of support)."]})})]}),e.jsxs("div",{ref:r=>t(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"$3,750 one-time · 10-20 days delivery"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Includes a ",a.pilotDays,"-day Pilot licence"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Comparative analysis vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," 60-minute results review call"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Request Validation Sprint"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Need only the licence and a call? The ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:[a.pilotDays,"-day Pilot is ",s(a.pilot)]}),":"," ","a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activating Your License"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1."}),e.jsx(f,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Verify offline: prints Pro or Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped."})]})]}),e.jsxs("div",{ref:r=>t(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Why License QECTOR?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Free (Source-Available)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licensed (Commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Non-commercial research use only"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Internal R&D and production rights"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Community support (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Priority email support & SLAs"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (Free)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Validation artifact reproduction harnesses"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"PolyForm Noncommercial License"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Written Commercial License Agreement"})]})]})]})})})]}),e.jsxs("div",{ref:r=>t(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Frequently Asked Questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>t(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What is not included:"})," Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Procurement:"})," All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal."," ",a.refundDays,"-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Refund Policy"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contact Engineering"})]})]})]})]})}export{S as default}; diff --git a/assets/PricingFR-1AsUzYak.js b/assets/PricingFR-1AsUzYak.js deleted file mode 100644 index c44b95e3..00000000 --- a/assets/PricingFR-1AsUzYak.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as d,C as m}from"./index-_BpMZhV3.js";import{P as a,a as x}from"./faqData-gdKKGDcm.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as l,S as p}from"./vendor-gsap-a3sj5zmn.js";import{G as h}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";l.registerPlugin(p);function E(){const n=o.useRef([]);o.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=l.context(()=>{n.current.filter(Boolean).forEach(c=>{l.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{r.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const t=(s,r)=>{s&&(n.current[r]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"Tarifs · QECTOR",description:"Licences commerciales QECTOR Decoder v3. Évaluation de 60 jours à 499 $, entièrement créditable. Paliers de production annuels à partir de 1 299 $/an. Entreprise et OEM sur mesure. Prix en USD, hors taxes.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 est disponible en source pour la recherche académique et non commerciale. Pour la R&D interne, les programmes pilotes et le déploiement commercial, choisissez une licence ci-dessous."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>t(s,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Libre-service · Activation instantanée"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Évaluation commerciale"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Un pilote de 60 jours avec accès complet, conçu pour les équipes sérieuses de recherche QEC. Inclut le décodage batch CPU + CUDA, un contrat de licence écrit, un lot d’artefacts de référence et un support prioritaire."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Crédit de 100 % vers une licence annuelle achetée dans les 90 jours suivant le début de votre évaluation"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Sièges internes illimités"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"499 $"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"Frais uniques"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Lancer le pilote de 60 jours"})]})]})})}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Paliers de production annuels"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Pour les équipes qui déploient QECTOR en interne ou l’intègrent à une infrastructure SaaS privée."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(h,{size:14,className:"shrink-0","aria-hidden":"true"})," 40 % de rabais académique disponible sur tous les paliers annuels. Contactez notre équipe commerciale."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(a,{name:"Solo / Indie",price:"1 299 $",period:"/ an",desc:"Droits de production pour un seul utilisateur nommé.",features:["Tous les décodeurs v3","Droits commerciaux de R&D","Un seul utilisateur nommé","Support courriel prioritaire"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(a,{name:"Startup / Growth",price:"4 499 $",period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés. Flux BP-OSD/LDPC avancés.",featured:!0,featuredLabel:"Le plus populaire",features:["Jusqu’à 10 utilisateurs nommés","BP-OSD/LDPC avancé","Batch CPU + CUDA","SLA de support + intégration 2 h"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(a,{name:"Professional",price:"11 500 $",period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Crédit pour le lot de rapports de validation.",features:["Jusqu’à 25 utilisateurs nommés","Tous les flux avancés","Intégration dédiée","Crédit rapport de validation"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(a,{name:"Enterprise & OEM",price:"Sur mesure",period:"",desc:"Sièges illimités, versions personnalisées et distribution SaaS/OEM.",accent:"gold",features:["Qubits logiques illimités","Droits d’hébergement SaaS","Droits de regroupement OEM","Ingénieur de support dédié"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Vous préférez l’acheter définitivement ? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpétuelle à 3 299 $ paiement unique."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contactez notre équipe commerciale pour l’activer"})]})})]}),e.jsxs("div",{ref:s=>t(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut l’évaluation commerciale de 60 jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Définir votre jeton de licence désactive simplement l’avis d’usage non commercial."}),e.jsx(m,{language:"bash",className:"mb-6",code:`# Usage commercial : activer avec le jeton Ed25519 -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optionnel : désactiver l'avis de licence dans les journaux CI -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>t(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>t(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:x.map((s,r)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},r))})]}),e.jsxs("div",{ref:s=>t(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD et hors taxes. Stripe gère les taxes locales automatiquement. Les jetons sont livrés instantanément par courriel. En raison de la livraison instantanée, les ventes sont finales. Utilisez l’évaluation à 499 $ pour tester l’adéquation avant un engagement annuel."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{E as default}; diff --git a/assets/PricingFR-BLb3E3Pu.js b/assets/PricingFR-BLb3E3Pu.js deleted file mode 100644 index 9afd1c53..00000000 --- a/assets/PricingFR-BLb3E3Pu.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-DRAXObZB.js";import{P as o,a as h}from"./faqData-CHsSn8s2.js";import{N as f}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as l}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function C(){const d=m.useRef([]);m.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(u=>{c.fromTo(u,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:u,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(r.proMonthly)}/mois, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:s=>a(s,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",r.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Ou ${t(r.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-BMDt_ie4.js b/assets/PricingFR-BMDt_ie4.js deleted file mode 100644 index aa11f38b..00000000 --- a/assets/PricingFR-BMDt_ie4.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-DkYdPRY7.js";import{P as o,a as h}from"./faqData-CHsSn8s2.js";import{N as f}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as l}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function C(){const d=m.useRef([]);m.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(u=>{c.fromTo(u,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:u,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(r.proMonthly)}/mois, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:s=>a(s,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",r.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Ou ${t(r.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-BTMd2o9u.js b/assets/PricingFR-BTMd2o9u.js deleted file mode 100644 index 624d8a15..00000000 --- a/assets/PricingFR-BTMd2o9u.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as s,e as t,d as i,L as l,C as p}from"./index-PdoH5kLF.js";import{P as o,a as h}from"./faqData-IO8c0Ufu.js";import{N as f}from"./NeuralReveal-Bsl9IGCr.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B8TlNU4J.js";c.registerPlugin(b);function C(){const d=u.useRef([]);u.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const a=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(s.proMonthly)}/mois, Labo ${t(s.lab)}/an, Entreprise et OEM dès ${t(s.enterpriseFrom)}/an. Satisfait ou remboursé ${s.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>a(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",s.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:r=>a(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",s.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(s.proMonthly),period:"/ mois",desc:`Ou ${t(s.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(s.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${s.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(s.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(s.proPerpetual)," paiement unique"]})})," ","(toutes les versions 1.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:r=>a(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",s.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",s.pilotDays," jours est à ",t(s.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:r=>a(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:r=>a(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>a(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("p",{children:["En achetant, vous acceptez le ",e.jsx(l,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/fr/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Contrat de licence"}),e.jsx(l,{to:"/fr/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Gérer l’abonnement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-B_0EkGv3.js b/assets/PricingFR-B_0EkGv3.js deleted file mode 100644 index 8f39b099..00000000 --- a/assets/PricingFR-B_0EkGv3.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as d,C as m}from"./index-iVST85F-.js";import{P as a,a as x}from"./faqData-CYz7igrM.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as l,S as p}from"./vendor-gsap-a3sj5zmn.js";import{G as h}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";l.registerPlugin(p);function E(){const n=o.useRef([]);o.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=l.context(()=>{n.current.filter(Boolean).forEach(c=>{l.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{r.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const t=(s,r)=>{s&&(n.current[r]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"Tarifs · QECTOR",description:"Licences commerciales QECTOR Decoder v3. Évaluation de 60 jours à 499 $, entièrement créditable. Paliers de production annuels à partir de 1 299 $/an. Entreprise et OEM sur mesure. Prix en USD, hors taxes.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 est disponible en source pour la recherche académique et non commerciale. Pour la R&D interne, les programmes pilotes et le déploiement commercial, choisissez une licence ci-dessous."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>t(s,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Libre-service · Activation instantanée"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Évaluation commerciale"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Un pilote de 60 jours avec accès complet, conçu pour les équipes sérieuses de recherche QEC. Inclut le décodage batch CPU + CUDA, un contrat de licence écrit, un lot d’artefacts de référence et un support prioritaire."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Crédit de 100 % vers une licence annuelle achetée dans les 90 jours suivant le début de votre évaluation"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Sièges internes illimités"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"499 $"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"Frais uniques"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Lancer le pilote de 60 jours"})]})]})})}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Paliers de production annuels"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Pour les équipes qui déploient QECTOR en interne ou l’intègrent à une infrastructure SaaS privée."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(h,{size:14,className:"shrink-0","aria-hidden":"true"})," 40 % de rabais académique disponible sur tous les paliers annuels. Contactez notre équipe commerciale."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(a,{name:"Solo / Indie",price:"1 299 $",period:"/ an",desc:"Droits de production pour un seul utilisateur nommé.",features:["Tous les décodeurs v3","Droits commerciaux de R&D","Un seul utilisateur nommé","Support courriel prioritaire"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(a,{name:"Startup / Growth",price:"4 499 $",period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés. Flux BP-OSD/LDPC avancés.",featured:!0,featuredLabel:"Le plus populaire",features:["Jusqu’à 10 utilisateurs nommés","BP-OSD/LDPC avancé","Batch CPU + CUDA","SLA de support + intégration 2 h"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(a,{name:"Professional",price:"11 500 $",period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Crédit pour le lot de rapports de validation.",features:["Jusqu’à 25 utilisateurs nommés","Tous les flux avancés","Intégration dédiée","Crédit rapport de validation"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(a,{name:"Enterprise & OEM",price:"Sur mesure",period:"",desc:"Sièges illimités, versions personnalisées et distribution SaaS/OEM.",accent:"gold",features:["Qubits logiques illimités","Droits d’hébergement SaaS","Droits de regroupement OEM","Ingénieur de support dédié"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Vous préférez l’acheter définitivement ? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpétuelle à 3 299 $ paiement unique."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contactez notre équipe commerciale pour l’activer"})]})})]}),e.jsxs("div",{ref:s=>t(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut l’évaluation commerciale de 60 jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Définir votre jeton de licence désactive simplement l’avis d’usage non commercial."}),e.jsx(m,{language:"bash",className:"mb-6",code:`# Usage commercial : activer avec le jeton Ed25519 -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optionnel : désactiver l'avis de licence dans les journaux CI -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>t(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>t(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:x.map((s,r)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},r))})]}),e.jsxs("div",{ref:s=>t(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD et hors taxes. Stripe gère les taxes locales automatiquement. Les jetons sont livrés instantanément par courriel. En raison de la livraison instantanée, les ventes sont finales. Utilisez l’évaluation à 499 $ pour tester l’adéquation avant un engagement annuel."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{E as default}; diff --git a/assets/PricingFR-B_DF8Sg3.js b/assets/PricingFR-B_DF8Sg3.js deleted file mode 100644 index dc3fbac0..00000000 --- a/assets/PricingFR-B_DF8Sg3.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as s,c as t,L as i,C as p}from"./index-Bh9DBCb3.js";import{P as l,a as h}from"./faqData-D7ZwBN6k.js";import{N as f}from"./NeuralReveal-D-EQoOl2.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function P(){const d=u.useRef([]);u.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const a=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(s.proMonthly)}/mois, Labo ${t(s.lab)}/an, Entreprise et OEM dès ${t(s.enterpriseFrom)}/an. Satisfait ou remboursé ${s.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>a(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",s.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:r=>a(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",s.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(l,{name:"Pro",price:t(s.proMonthly),period:"/ mois",desc:`Ou ${t(s.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Labo",price:t(s.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`${s.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(s.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(s.proPerpetual)," paiement unique"]})})," ","(toutes les versions 1.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:r=>a(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",s.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",s.pilotDays," jours est à ",t(s.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:r=>a(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:r=>a(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>a(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("p",{children:["En achetant, vous acceptez le ",e.jsx(o,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(o,{to:"/fr/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Contrat de licence"}),e.jsx(o,{to:"/fr/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Gérer l’abonnement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{P as default}; diff --git a/assets/PricingFR-Ba1mTi8-.js b/assets/PricingFR-Ba1mTi8-.js deleted file mode 100644 index 4248ed2b..00000000 --- a/assets/PricingFR-Ba1mTi8-.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as s,e as t,d as i,L as l,C as p}from"./index-DayaklK-.js";import{P as o,a as h}from"./faqData-CvhYJZQK.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B8TlNU4J.js";c.registerPlugin(b);function C(){const d=u.useRef([]);u.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const a=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(s.proMonthly)}/mois, Labo ${t(s.lab)}/an, Entreprise et OEM dès ${t(s.enterpriseFrom)}/an. Satisfait ou remboursé ${s.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>a(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",s.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:r=>a(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",s.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(s.proMonthly),period:"/ mois",desc:`Ou ${t(s.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(s.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${s.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(s.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(s.proPerpetual)," paiement unique"]})})," ","(toutes les versions 1.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:r=>a(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",s.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",s.pilotDays," jours est à ",t(s.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:r=>a(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:r=>a(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>a(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("p",{children:["En achetant, vous acceptez le ",e.jsx(l,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/fr/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Contrat de licence"}),e.jsx(l,{to:"/fr/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Gérer l’abonnement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-BkwLcQqV.js b/assets/PricingFR-BkwLcQqV.js deleted file mode 100644 index 1f8f13b0..00000000 --- a/assets/PricingFR-BkwLcQqV.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-CqAA-ZXu.js";import{T as h,P as l,a as f}from"./TrialForm-CpW40uwE.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(g);function S(){const d=u.useRef([]);u.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Essai commercial gratuit de ${r.trialDays} jours. Pro dès ${t(r.proMonthly)}/mois, Équipe ${t(r.team)}/an, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, commencez un essai gratuit de ",r.trialDays," jours, puis choisissez un forfait : annulable en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>a(s,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Gratuit · Sans carte · Jeton par courriel"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:["Essai commercial de ",r.trialDays," jours"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Évaluez QECTOR sur vos propres charges de travail avec des droits d’évaluation commerciale complets : toutes les familles de décodeurs, décodage par lots CPU et GPU (CUDA/OpenCL), vérification de licence hors ligne."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Jusqu’à 5 utilisateurs internes"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expire de lui-même : rien à annuler"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Un essai par adresse par année"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(h,{lang:"fr"})})]})})}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour usage interne. Les forfaits se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Équipe et Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Un utilisateur nommé. Ou ${t(r.proAnnual)}/an (2 mois offerts).`,features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Équipe",price:t(r.team),period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés.",featured:!0,featuredLabel:"Idéal pour les startups",features:["Tout Pro","Jusqu’à 10 utilisateurs nommés","Support prioritaire (1 jour ouvrable)","Appel d’intégration de 2 h"],ctaLabel:"Acheter Équipe",ctaHref:i.team}),e.jsx(l,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Palier de licence Entreprise.",features:["Tout Équipe","Distances de code jusqu’à 63","SLA de support","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Sièges illimités","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Équipe ou Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:f.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{S as default}; diff --git a/assets/PricingFR-Bq3K4m2D.js b/assets/PricingFR-Bq3K4m2D.js deleted file mode 100644 index e6ed7870..00000000 --- a/assets/PricingFR-Bq3K4m2D.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-WV1aysjN.js";import{T as h,P as l,a as f}from"./TrialForm-CC5CTQMP.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(g);function S(){const d=m.useRef([]);m.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(u=>{c.fromTo(u,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:u,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Essai commercial gratuit de ${r.trialDays} jours. Pro dès ${t(r.proMonthly)}/mois, Équipe ${t(r.team)}/an, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, commencez un essai gratuit de ",r.trialDays," jours, puis choisissez un forfait : annulable en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>a(s,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Gratuit · Sans carte · Jeton par courriel"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:["Essai commercial de ",r.trialDays," jours"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Évaluez QECTOR sur vos propres charges de travail avec des droits d’évaluation commerciale complets : toutes les familles de décodeurs, décodage par lots CPU et GPU (CUDA/OpenCL), vérification de licence hors ligne."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Jusqu’à 5 utilisateurs internes"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expire de lui-même : rien à annuler"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Un essai par adresse par année"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(h,{lang:"fr"})})]})})}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour usage interne. Les forfaits se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Équipe et Labo pour les projets universitaires financés par l’industrie. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Un utilisateur nommé. Ou ${t(r.proAnnual)}/an (2 mois offerts).`,features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Équipe",price:t(r.team),period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés.",featured:!0,featuredLabel:"Idéal pour les startups",features:["Tout Pro","Jusqu’à 10 utilisateurs nommés","Support prioritaire (1 jour ouvrable)","Appel d’intégration de 2 h"],ctaLabel:"Acheter Équipe",ctaHref:i.team}),e.jsx(l,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Palier de licence Entreprise.",features:["Tout Équipe","Distances de code jusqu’à 63","SLA de support","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`dès ${t(r.enterpriseFrom)}`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Sièges illimités","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Équipe ou Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:f.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{S as default}; diff --git a/assets/PricingFR-C1a9eh_h.js b/assets/PricingFR-C1a9eh_h.js deleted file mode 100644 index 3cb77700..00000000 --- a/assets/PricingFR-C1a9eh_h.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as s,e as t,d as i,L as l,C as p}from"./index-CcwlvHYJ.js";import{P as o,a as h}from"./faqData-DUePwhCA.js";import{N as f}from"./NeuralReveal-Bsl9IGCr.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";c.registerPlugin(b);function C(){const d=u.useRef([]);u.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const a=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(s.proMonthly)}/mois, Labo ${t(s.lab)}/an, Entreprise et OEM dès ${t(s.enterpriseFrom)}/an. Satisfait ou remboursé ${s.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>a(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",s.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:r=>a(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",s.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(s.proMonthly),period:"/ mois",desc:`Ou ${t(s.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(s.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${s.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(s.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(s.proPerpetual)," paiement unique"]})})," ","(toutes les versions 1.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:r=>a(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",s.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",s.pilotDays," jours est à ",t(s.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:r=>a(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:r=>a(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>a(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("p",{children:["En achetant, vous acceptez le ",e.jsx(l,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/fr/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Contrat de licence"}),e.jsx(l,{to:"/fr/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Gérer l’abonnement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-C5Yr9nMm.js b/assets/PricingFR-C5Yr9nMm.js deleted file mode 100644 index d1e5685a..00000000 --- a/assets/PricingFR-C5Yr9nMm.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-abfjMTlQ.js";import{P as l,a as h}from"./faqData-D7ZwBN6k.js";import{N as f}from"./NeuralReveal-D-EQoOl2.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function P(){const d=u.useRef([]);u.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(r.proMonthly)}/mois, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:s=>a(s,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",r.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(l,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Ou ${t(r.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 1.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("p",{children:["En achetant, vous acceptez le ",e.jsx(o,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(o,{to:"/fr/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Contrat de licence"}),e.jsx(o,{to:"/fr/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{P as default}; diff --git a/assets/PricingFR-C6K3hXax.js b/assets/PricingFR-C6K3hXax.js deleted file mode 100644 index 677c0180..00000000 --- a/assets/PricingFR-C6K3hXax.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as s,e as t,d as i,L as l,C as p}from"./index-c1PDYu0j.js";import{P as o,a as h}from"./faqData-B9kvzm8o.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B8TlNU4J.js";c.registerPlugin(b);function C(){const d=u.useRef([]);u.useEffect(()=>{const r=document.createElement("script");if(r.src="https://js.stripe.com/v3/buy-button.js",r.async=!0,document.body.appendChild(r),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),r.parentNode===document.body&&document.body.removeChild(r)}},[]);const a=(r,n)=>{r&&(d.current[n]=r)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(s.proMonthly)}/mois, Labo ${t(s.lab)}/an, Entreprise et OEM dès ${t(s.enterpriseFrom)}/an. Satisfait ou remboursé ${s.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:r=>a(r,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",s.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:r=>a(r,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",s.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(s.proMonthly),period:"/ mois",desc:`Ou ${t(s.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(s.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${s.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(s.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(s.proPerpetual)," paiement unique"]})})," ","(toutes les versions 1.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:r=>a(r,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",s.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",s.pilotDays," jours est à ",t(s.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:r=>a(r,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:r=>a(r,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((r,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:r.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:r.a})]},n))})]}),e.jsxs("div",{ref:r=>a(r,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",s.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("p",{children:["En achetant, vous acceptez le ",e.jsx(l,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(l,{to:"/fr/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Contrat de licence"}),e.jsx(l,{to:"/fr/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Gérer l’abonnement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-C6aJLaoB.js b/assets/PricingFR-C6aJLaoB.js deleted file mode 100644 index 1ab306b6..00000000 --- a/assets/PricingFR-C6aJLaoB.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-BN-vOeL2.js";import{T as h,P as l,a as f}from"./TrialForm-BIjatKya.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(g);function S(){const d=m.useRef([]);m.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(u=>{c.fromTo(u,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:u,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Essai commercial gratuit de ${r.trialDays} jours. Pro dès ${t(r.proMonthly)}/mois, Équipe ${t(r.team)}/an, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, commencez un essai gratuit de ",r.trialDays," jours, puis choisissez un forfait : annulable en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>a(s,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Gratuit · Sans carte · Jeton par courriel"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:["Essai commercial de ",r.trialDays," jours"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Évaluez QECTOR sur vos propres charges de travail avec des droits d’évaluation commerciale complets : toutes les familles de décodeurs, décodage par lots CPU et GPU (CUDA/OpenCL), vérification de licence hors ligne."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Jusqu’à 5 utilisateurs internes"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expire de lui-même : rien à annuler"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Un essai par adresse par année"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(h,{lang:"fr"})})]})})}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour usage interne. Les forfaits se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Équipe et Labo pour les projets universitaires financés par l’industrie. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Un utilisateur nommé. Ou ${t(r.proAnnual)}/an (2 mois offerts).`,features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Équipe",price:t(r.team),period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés.",featured:!0,featuredLabel:"Idéal pour les startups",features:["Tout Pro","Jusqu’à 10 utilisateurs nommés","Support prioritaire (1 jour ouvrable)","Appel d’intégration de 2 h"],ctaLabel:"Acheter Équipe",ctaHref:i.team}),e.jsx(l,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Palier de licence Entreprise.",features:["Tout Équipe","Distances de code jusqu’à 63","SLA de support","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Sièges illimités","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Équipe ou Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:f.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{S as default}; diff --git a/assets/PricingFR-C8Es19li.js b/assets/PricingFR-C8Es19li.js deleted file mode 100644 index d4535883..00000000 --- a/assets/PricingFR-C8Es19li.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-BUYYSLdX.js";import{P as o,a as h}from"./faqData-CHsSn8s2.js";import{N as f}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as l}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function C(){const d=m.useRef([]);m.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(u=>{c.fromTo(u,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:u,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(r.proMonthly)}/mois, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:s=>a(s,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",r.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Ou ${t(r.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-CtzmHxI3.js b/assets/PricingFR-CtzmHxI3.js deleted file mode 100644 index d4f3c77f..00000000 --- a/assets/PricingFR-CtzmHxI3.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-CxWP17m6.js";import{P as o,a as h}from"./faqData-CHsSn8s2.js";import{N as f}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B0ssGG4c.js";import{L as l}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(b);function C(){const d=m.useRef([]);m.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(u=>{c.fromTo(u,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:u,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(r.proMonthly)}/mois, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:s=>a(s,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",r.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(o,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Ou ${t(r.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(o,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(o,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(l,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:h.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(l,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(l,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-D89gbHS7.js b/assets/PricingFR-D89gbHS7.js deleted file mode 100644 index f28a364b..00000000 --- a/assets/PricingFR-D89gbHS7.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-DlmjLVYe.js";import{T as h,P as l,a as f}from"./TrialForm-BEDfCuvx.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(g);function S(){const d=u.useRef([]);u.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Essai commercial gratuit de ${r.trialDays} jours. Pro dès ${t(r.proMonthly)}/mois, Équipe ${t(r.team)}/an, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, commencez un essai gratuit de ",r.trialDays," jours, puis choisissez un forfait : annulable en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>a(s,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Gratuit · Sans carte · Jeton par courriel"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:["Essai commercial de ",r.trialDays," jours"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Évaluez QECTOR sur vos propres charges de travail avec des droits d’évaluation commerciale complets : toutes les familles de décodeurs, décodage par lots CPU et GPU (CUDA/OpenCL), vérification de licence hors ligne."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Jusqu’à 5 utilisateurs internes"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expire de lui-même : rien à annuler"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Un essai par adresse par année"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(h,{lang:"fr"})})]})})}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour usage interne. Les forfaits se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Équipe et Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Un utilisateur nommé. Ou ${t(r.proAnnual)}/an (2 mois offerts).`,features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Équipe",price:t(r.team),period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés.",featured:!0,featuredLabel:"Idéal pour les startups",features:["Tout Pro","Jusqu’à 10 utilisateurs nommés","Support prioritaire (1 jour ouvrable)","Appel d’intégration de 2 h"],ctaLabel:"Acheter Équipe",ctaHref:i.team}),e.jsx(l,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Palier de licence Entreprise.",features:["Tout Équipe","Distances de code jusqu’à 63","SLA de support","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Sièges illimités","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Équipe ou Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:f.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{S as default}; diff --git a/assets/PricingFR-DVFFUe5q.js b/assets/PricingFR-DVFFUe5q.js deleted file mode 100644 index a331cfe0..00000000 --- a/assets/PricingFR-DVFFUe5q.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as d,C as m}from"./index-B9kEGiWi.js";import{P as a,a as x}from"./faqData-CCPvMSkf.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as l,S as p}from"./vendor-gsap-a3sj5zmn.js";import{G as h}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";l.registerPlugin(p);function E(){const n=o.useRef([]);o.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=l.context(()=>{n.current.filter(Boolean).forEach(c=>{l.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{r.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const t=(s,r)=>{s&&(n.current[r]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"Tarifs · QECTOR",description:"Licences commerciales QECTOR Decoder v3. Évaluation de 60 jours à 499 $, entièrement créditable. Paliers de production annuels à partir de 1 299 $/an. Entreprise et OEM sur mesure. Prix en USD, hors taxes.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 est disponible en source pour la recherche académique et non commerciale. Pour la R&D interne, les programmes pilotes et le déploiement commercial, choisissez une licence ci-dessous."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>t(s,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Libre-service · Activation instantanée"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Évaluation commerciale"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Un pilote de 60 jours avec accès complet, conçu pour les équipes sérieuses de recherche QEC. Inclut le décodage batch CPU + CUDA, un contrat de licence écrit, un lot d’artefacts de référence et un support prioritaire."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Crédit de 100 % vers une licence annuelle achetée dans les 90 jours suivant le début de votre évaluation"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Sièges internes illimités"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"499 $"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"Frais uniques"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Lancer le pilote de 60 jours"})]})]})})}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Paliers de production annuels"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Pour les équipes qui déploient QECTOR en interne ou l’intègrent à une infrastructure SaaS privée."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(h,{size:14,className:"shrink-0","aria-hidden":"true"})," 40 % de rabais académique disponible sur tous les paliers annuels. Contactez notre équipe commerciale."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(a,{name:"Solo / Indie",price:"1 299 $",period:"/ an",desc:"Droits de production pour un seul utilisateur nommé.",features:["Tous les décodeurs v3","Droits commerciaux de R&D","Un seul utilisateur nommé","Support courriel prioritaire"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(a,{name:"Startup / Growth",price:"4 499 $",period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés. Flux BP-OSD/LDPC avancés.",featured:!0,featuredLabel:"Le plus populaire",features:["Jusqu’à 10 utilisateurs nommés","BP-OSD/LDPC avancé","Batch CPU + CUDA","SLA de support + intégration 2 h"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(a,{name:"Professional",price:"11 500 $",period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Crédit pour le lot de rapports de validation.",features:["Jusqu’à 25 utilisateurs nommés","Tous les flux avancés","Intégration dédiée","Crédit rapport de validation"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(a,{name:"Enterprise & OEM",price:"Sur mesure",period:"",desc:"Sièges illimités, versions personnalisées et distribution SaaS/OEM.",accent:"gold",features:["Qubits logiques illimités","Droits d’hébergement SaaS","Droits de regroupement OEM","Ingénieur de support dédié"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Vous préférez l’acheter définitivement ? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpétuelle à 3 299 $ paiement unique."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contactez notre équipe commerciale pour l’activer"})]})})]}),e.jsxs("div",{ref:s=>t(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut l’évaluation commerciale de 60 jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Définir votre jeton de licence désactive simplement l’avis d’usage non commercial."}),e.jsx(m,{language:"bash",className:"mb-6",code:`# Usage commercial : activer avec le jeton Ed25519 -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optionnel : désactiver l'avis de licence dans les journaux CI -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>t(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>t(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:x.map((s,r)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},r))})]}),e.jsxs("div",{ref:s=>t(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD et hors taxes. Stripe gère les taxes locales automatiquement. Les jetons sont livrés instantanément par courriel. En raison de la livraison instantanée, les ventes sont finales. Utilisez l’évaluation à 499 $ pour tester l’adéquation avant un engagement annuel."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{E as default}; diff --git a/assets/PricingFR-DYCR87D8.js b/assets/PricingFR-DYCR87D8.js deleted file mode 100644 index 1305222f..00000000 --- a/assets/PricingFR-DYCR87D8.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as u,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,e as t,d as i,L as o,C as p}from"./index-CCmwjNGU.js";import{P as l,a as h}from"./faqData-De1eOWz0.js";import{N as f}from"./NeuralReveal-uYarhiMA.js";import{g as c,S as b}from"./vendor-gsap-a3sj5zmn.js";import{G as g}from"./vendor-ui-B8TlNU4J.js";c.registerPlugin(b);function C(){const d=u.useRef([]);u.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(m=>{c.fromTo(m,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:m,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Pro dès ${t(r.proMonthly)}/mois, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(f,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsxs("div",{ref:s=>a(s,0),className:"grid grid-cols-1 sm:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Hors réseau"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsxs("p",{className:"text-cyan-300 font-bold",children:["Remboursé ",r.refundDays," jours"]}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Remboursement complet de votre premier paiement de tout forfait, sans question."})]}),e.jsxs("div",{className:"card-surface py-6",children:[e.jsx("p",{className:"text-cyan-300 font-bold",children:"Annulable en tout temps"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"Votre licence reste valide jusqu’à la fin de la période payée."})]})]}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(g,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:[e.jsx(l,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Ou ${t(r.proAnnual)}/an (2 mois offerts). Palier de licence Pro.`,featured:!0,featuredLabel:"Le plus populaire",features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Distances de code jusqu’à 19","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Palier de licence Entreprise, pour les groupes de recherche et laboratoires.",features:["Tout Pro","Distances de code jusqu’à 63","Support prioritaire avec SLA","Appel d’intégration de 2 h","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Contrat signé, conditions sur mesure","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 1.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 items-start",children:h.map((s,n)=>e.jsxs("details",{className:"faq-item group bg-surface/30 border border-gridline/40 rounded-2xl hover:bg-surface/60 transition-colors",children:[e.jsxs("summary",{className:"cursor-pointer list-none flex items-start justify-between gap-4 p-5 min-h-[44px] text-base font-bold text-cyan-300",children:[e.jsx("h3",{className:"text-base font-bold",children:s.q}),e.jsx("span",{"aria-hidden":"true",className:"shrink-0 text-muted-foreground transition-transform group-open:rotate-45 text-xl leading-none",children:"+"})]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed px-5 pb-5",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("p",{children:["En achetant, vous acceptez le ",e.jsx(o,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"Contrat de licence commerciale"}),"."]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 pt-4",children:[e.jsx(o,{to:"/fr/license-agreement",className:"hover:text-cyan-300 transition-colors",children:"Contrat de licence"}),e.jsx(o,{to:"/fr/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",target:"_blank",rel:"noopener noreferrer",className:"hover:text-cyan-300 transition-colors",children:"Gérer l’abonnement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{C as default}; diff --git a/assets/PricingFR-Dj13kvWH.js b/assets/PricingFR-Dj13kvWH.js deleted file mode 100644 index 93c3fc92..00000000 --- a/assets/PricingFR-Dj13kvWH.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as x,P as r,c as t,L as i,C as p}from"./index-CpdATiEY.js";import{T as h,P as l,a as f}from"./TrialForm-D2xU-ZBp.js";import{N as b}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as g}from"./vendor-gsap-a3sj5zmn.js";import{G as j}from"./vendor-ui-B0ssGG4c.js";import{L as o}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(g);function S(){const d=m.useRef([]);m.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const n=c.context(()=>{d.current.filter(Boolean).forEach(u=>{c.fromTo(u,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:u,start:"top 85%",once:!0}})})});return()=>{n.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const a=(s,n)=>{s&&(d.current[n]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Tarifs · QECTOR",description:`Licences commerciales QECTOR Decoder v3. Essai commercial gratuit de ${r.trialDays} jours. Pro dès ${t(r.proMonthly)}/mois, Équipe ${t(r.team)}/an, Labo ${t(r.lab)}/an, Entreprise et OEM dès ${t(r.enterpriseFrom)}/an. Satisfait ou remboursé ${r.refundDays} jours. Prix en USD; taxes ajoutées au paiement s’il y a lieu.`,lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(b,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:["Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, commencez un essai gratuit de ",r.trialDays," jours, puis choisissez un forfait : annulable en tout temps, satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement."]})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>a(s,0),id:"trial",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Gratuit · Sans carte · Jeton par courriel"}),e.jsxs("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:["Essai commercial de ",r.trialDays," jours"]}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Évaluez QECTOR sur vos propres charges de travail avec des droits d’évaluation commerciale complets : toutes les familles de décodeurs, décodage par lots CPU et GPU (CUDA/OpenCL), vérification de licence hors ligne."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Jusqu’à 5 utilisateurs internes"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Expire de lui-même : rien à annuler"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Un essai par adresse par année"]})]})]}),e.jsx("div",{className:"w-full md:w-auto flex flex-col items-center",children:e.jsx(h,{lang:"fr"})})]})})}),e.jsxs("div",{ref:s=>a(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Forfaits commerciaux"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Droits de production pour usage interne. Les forfaits se renouvellent automatiquement jusqu’à annulation."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(j,{size:14,className:"shrink-0","aria-hidden":"true"})," ",r.academicDiscountPct," % de rabais sur Équipe et Labo pour les projets universitaires financés par l’industrie. La recherche non commerciale est gratuite."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(l,{name:"Pro",price:t(r.proMonthly),period:"/ mois",desc:`Un utilisateur nommé. Ou ${t(r.proAnnual)}/an (2 mois offerts).`,features:["Usage commercial interne","Toutes les familles de décodeurs","Lots CPU + GPU (CUDA/OpenCL)","Support courriel (2 jours ouvrables)"],ctaLabel:"Acheter au mois",ctaHref:i.proMonthly}),e.jsx(l,{name:"Équipe",price:t(r.team),period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés.",featured:!0,featuredLabel:"Idéal pour les startups",features:["Tout Pro","Jusqu’à 10 utilisateurs nommés","Support prioritaire (1 jour ouvrable)","Appel d’intégration de 2 h"],ctaLabel:"Acheter Équipe",ctaHref:i.team}),e.jsx(l,{name:"Labo",price:t(r.lab),period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Palier de licence Entreprise.",features:["Tout Équipe","Distances de code jusqu’à 63","SLA de support","Un rapport de validation (valeur 5 000 $)"],ctaLabel:"Acheter Labo",ctaHref:i.lab}),e.jsx(l,{name:"Entreprise & OEM",price:`${r.enterpriseFrom/1e3} k$+`,period:"/ an",desc:"Redistribution, SaaS, OEM et conditions sur mesure.",accent:"gold",features:["Sièges illimités","SaaS et API offertes aux clients","OEM et regroupement matériel","Ingénieur de support attitré"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center space-y-2",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Pro facturé à l’année : ",e.jsxs("a",{href:i.proAnnual,className:"text-cyan-400 hover:underline",rel:"noopener",children:[t(r.proAnnual)," / an"]}),"."," ","Vous préférez l’acheter définitivement ? ",e.jsx("a",{href:i.proPerpetual,className:"text-cyan-400 hover:underline",rel:"noopener",children:e.jsxs("strong",{children:["Pro Perpétuel : ",t(r.proPerpetual)," paiement unique"]})})," ","(toutes les versions 3.x, 12 mois de support)."]})})]}),e.jsxs("div",{ref:s=>a(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut une licence Pilote de ",r.pilotDays," jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(o,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"}),e.jsxs("p",{className:"text-xs text-gold-200/60 mt-6",children:["Seulement la licence et un appel ? Le ",e.jsxs("a",{href:i.pilot,className:"text-gold-400 hover:underline",rel:"noopener",children:["Pilote de ",r.pilotDays," jours est à ",t(r.pilot)]})," :"," ","un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Équipe ou Labo dans les 90 jours."]})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1."}),e.jsx(p,{language:"bash",className:"mb-6",code:`pip install --upgrade "qector-decoder-v3>=1.0,<2" -export QECTOR_LICENSE_KEY="" -export QECTOR_LICENSE="" - -# Vérifier hors ligne : affiche Pro ou Enterprise -python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>a(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>a(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:f.map((s,n)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},n))})]}),e.jsxs("div",{ref:s=>a(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel."," ","Satisfait ou remboursé ",r.refundDays," jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(o,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(o,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{S as default}; diff --git a/assets/PricingFR-Dx93rO3U.js b/assets/PricingFR-Dx93rO3U.js deleted file mode 100644 index 8f6a7cc9..00000000 --- a/assets/PricingFR-Dx93rO3U.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as d,C as m}from"./index-BcbVjARk.js";import{P as a,a as x}from"./faqData-CCPvMSkf.js";import{N as u}from"./NeuralReveal-BflyZYSb.js";import{g as l,S as p}from"./vendor-gsap-a3sj5zmn.js";import{G as h}from"./vendor-ui-B0ssGG4c.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";l.registerPlugin(p);function E(){const n=o.useRef([]);o.useEffect(()=>{const s=document.createElement("script");if(s.src="https://js.stripe.com/v3/buy-button.js",s.async=!0,document.body.appendChild(s),window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const r=l.context(()=>{n.current.filter(Boolean).forEach(c=>{l.fromTo(c,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power3.out",scrollTrigger:{trigger:c,start:"top 85%",once:!0}})})});return()=>{r.revert(),s.parentNode===document.body&&document.body.removeChild(s)}},[]);const t=(s,r)=>{s&&(n.current[r]=s)};return e.jsxs(e.Fragment,{children:[e.jsx(d,{title:"Tarifs · QECTOR",description:"Licences commerciales QECTOR Decoder v3. Évaluation de 60 jours à 499 $, entièrement créditable. Paliers de production annuels à partir de 1 299 $/an. Entreprise et OEM sur mesure. Prix en USD, hors taxes.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/pricing/"},{lang:"fr",href:"https://qector.store/fr/pricing/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/10 via-surface/30 to-void"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-cyan-900/20 via-void to-void pointer-events-none"}),e.jsxs("div",{className:"relative z-10 max-w-4xl mx-auto px-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 bg-cyan-300/10 border border-cyan-300/20 rounded-full text-xs font-bold text-cyan-300 uppercase tracking-widest mb-8 backdrop-blur-md",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-cyan-300 animate-pulse-dot"}),"Licences commerciales claires et transparentes"]}),e.jsx("h1",{className:"text-4xl sm:text-5xl md:text-7xl font-extrabold tracking-tight leading-tight mb-6",children:e.jsx(u,{text:"Licenciez QECTOR pour la production",className:"text-4xl sm:text-5xl md:text-7xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl mx-auto",children:"QECTOR Decoder v3 est disponible en source pour la recherche académique et non commerciale. Pour la R&D interne, les programmes pilotes et le déploiement commercial, choisissez une licence ci-dessous."})]})]}),e.jsxs("div",{className:"px-6 pb-24 max-w-6xl mx-auto space-y-20 relative z-10",children:[e.jsx("div",{ref:s=>t(s,0),id:"evaluation",className:"scroll-mt-32",children:e.jsx("div",{className:"relative p-1 rounded-3xl bg-gradient-to-r from-cyan-400 via-cyan-500 to-gold-400 animate-gradient-xy",children:e.jsxs("div",{className:"bg-void/90 backdrop-blur-xl rounded-[23px] p-8 md:p-12 border border-white/5 flex flex-col md:flex-row items-center justify-between gap-8",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx("div",{className:"inline-block px-3 py-1 bg-cyan-500/20 text-cyan-300 text-xs font-bold uppercase tracking-wider rounded-full mb-4",children:"Libre-service · Activation instantanée"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-extrabold text-white mb-4",children:"Évaluation commerciale"}),e.jsx("p",{className:"text-secondary text-base leading-relaxed max-w-xl",children:"Un pilote de 60 jours avec accès complet, conçu pour les équipes sérieuses de recherche QEC. Inclut le décodage batch CPU + CUDA, un contrat de licence écrit, un lot d’artefacts de référence et un support prioritaire."}),e.jsxs("div",{className:"mt-6 flex flex-wrap gap-4 text-sm text-cyan-100/70",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Crédit de 100 % vers une licence annuelle achetée dans les 90 jours suivant le début de votre évaluation"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-cyan-400",children:"✓"})," Sièges internes illimités"]})]})]}),e.jsxs("div",{className:"w-full md:w-auto flex flex-col items-center",children:[e.jsx("div",{className:"text-4xl font-black text-white mb-1",children:"499 $"}),e.jsx("div",{className:"text-secondary text-sm mb-6",children:"Frais uniques"}),e.jsx("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan w-full text-center py-4 px-8 font-bold shadow-[0_0_30px_rgba(34,211,238,0.3)]",target:"_blank",rel:"noopener noreferrer",children:"Lancer le pilote de 60 jours"})]})]})})}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Paliers de production annuels"}),e.jsx("p",{className:"text-secondary text-lg mb-4",children:"Pour les équipes qui déploient QECTOR en interne ou l’intègrent à une infrastructure SaaS privée."}),e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-blue-500/10 border border-blue-400/30 rounded-full text-xs font-semibold text-blue-300",children:[e.jsx(h,{size:14,className:"shrink-0","aria-hidden":"true"})," 40 % de rabais académique disponible sur tous les paliers annuels. Contactez notre équipe commerciale."]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[e.jsx(a,{name:"Solo / Indie",price:"1 299 $",period:"/ an",desc:"Droits de production pour un seul utilisateur nommé.",features:["Tous les décodeurs v3","Droits commerciaux de R&D","Un seul utilisateur nommé","Support courriel prioritaire"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/cNi9AV63TfkubbY87UeUU09"}),e.jsx(a,{name:"Startup / Growth",price:"4 499 $",period:"/ an",desc:"Jusqu’à 10 utilisateurs nommés. Flux BP-OSD/LDPC avancés.",featured:!0,featuredLabel:"Le plus populaire",features:["Jusqu’à 10 utilisateurs nommés","BP-OSD/LDPC avancé","Batch CPU + CUDA","SLA de support + intégration 2 h"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/14A5kF4ZP5JU7ZMdseeUU0c"}),e.jsx(a,{name:"Professional",price:"11 500 $",period:"/ an",desc:"Jusqu’à 25 utilisateurs nommés. Crédit pour le lot de rapports de validation.",features:["Jusqu’à 25 utilisateurs nommés","Tous les flux avancés","Intégration dédiée","Crédit rapport de validation"],ctaLabel:"Acheter",ctaHref:"https://buy.stripe.com/28EeVf1ND0pA6VIewieUU0d"}),e.jsx(a,{name:"Enterprise & OEM",price:"Sur mesure",period:"",desc:"Sièges illimités, versions personnalisées et distribution SaaS/OEM.",accent:"gold",features:["Qubits logiques illimités","Droits d’hébergement SaaS","Droits de regroupement OEM","Ingénieur de support dédié"],ctaLabel:"Contacter l’équipe commerciale",ctaHref:"/contact"})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsxs("p",{className:"text-sm text-secondary",children:["Vous préférez l’acheter définitivement ? ",e.jsx("strong",{className:"text-cyan-300",children:"Solo / Indie Perpétuelle à 3 299 $ paiement unique."})," ",e.jsx(i,{to:"/contact",className:"text-cyan-400 hover:underline",children:"Contactez notre équipe commerciale pour l’activer"})]})})]}),e.jsxs("div",{ref:s=>t(s,2),className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"card-surface border-gold-400/20 bg-gold-400/5",children:[e.jsx("h3",{className:"text-2xl font-bold text-gold-400 mb-2",children:"QECTOR Validation Sprint"}),e.jsx("p",{className:"text-sm text-gold-200/60 mb-4",children:"3 750 $ paiement unique · Livraison en 10-20 jours"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles."}),e.jsxs("ul",{className:"text-secondary text-sm space-y-2 mb-8",children:[e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Inclut l’évaluation commerciale de 60 jours"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Analyse comparative vs PyMatching/Stim"]}),e.jsxs("li",{className:"flex gap-2",children:[e.jsx("span",{className:"text-gold-400",children:"✓"})," Appel de révision des résultats de 60 minutes"]})]}),e.jsx(i,{to:"/contact",className:"btn-gold block text-center",children:"Demander un sprint de validation"})]}),e.jsxs("div",{className:"card-surface bg-surface border-gridline",children:[e.jsx("h3",{className:"text-2xl font-bold mb-4",children:"Activer votre licence"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Définir votre jeton de licence désactive l’avis d’usage non commercial et déverrouille les fonctionnalités de votre palier : plafonds de distance de 7, 19 ou 63 selon le palier, et chemins GPU batch sur les paliers Pro et Entreprise."}),e.jsx(m,{language:"bash",className:"mb-6",code:`# Usage commercial : activer avec le jeton Ed25519 -export QECTOR_LICENSE="" -export QECTOR_LICENSE_KEY="" - -# Optionnel : désactiver l'avis de licence dans les journaux CI -export QECTOR_SILENT=1`}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau."})]})]}),e.jsxs("div",{ref:s=>t(s,3),children:[e.jsx("h2",{className:"text-3xl font-bold mb-8 text-center",children:"Pourquoi licencier QECTOR ?"}),e.jsx("div",{className:"card-surface bg-surface/50 border border-gridline",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline/50",children:[e.jsx("th",{className:"text-left py-4 px-6 text-cyan-300 font-semibold text-sm",children:"Gratuit (source disponible)"}),e.jsx("th",{className:"text-left py-4 px-6 text-gold-400 font-semibold text-sm",children:"Licencié (commercial)"})]})}),e.jsxs("tbody",{className:"text-sm",children:[e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Usage de recherche non commerciale seulement"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Droits internes de R&D et de production"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Support communautaire (GitHub Issues)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Support courriel prioritaire et SLA"})]}),e.jsxs("tr",{className:"border-b border-gridline/30",children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"QECTOR Workbench GUI (gratuit)"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Harnais de reproduction d’artefacts de validation"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"py-4 px-6 text-secondary border-r border-gridline/30",children:"Licence PolyForm Noncommercial"}),e.jsx("td",{className:"py-4 px-6 text-primary font-medium",children:"Contrat de licence commerciale écrit"})]})]})]})})})]}),e.jsxs("div",{ref:s=>t(s,4),className:"pt-12",children:[e.jsx("div",{className:"text-center mb-12",children:e.jsx("h2",{className:"text-3xl font-bold mb-4",children:"Foire aux questions"})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:x.map((s,r)=>e.jsxs("div",{className:"card-surface bg-surface/30 border-gridline/40 hover:bg-surface/60 transition-colors p-6 rounded-2xl",children:[e.jsx("h3",{className:"text-base font-bold text-primary mb-3 text-cyan-300",children:s.q}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:s.a})]},r))})]}),e.jsxs("div",{ref:s=>t(s,5),className:"border-t border-gridline/40 pt-12 text-center text-xs text-muted-foreground max-w-3xl mx-auto space-y-4",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Ce qui n’est pas inclus :"})," sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Approvisionnement :"})," tous les prix sont en USD et hors taxes. Stripe gère les taxes locales automatiquement. Les jetons sont livrés instantanément par courriel. En raison de la livraison instantanée, les ventes sont finales. Utilisez l’évaluation à 499 $ pour tester l’adéquation avant un engagement annuel."]}),e.jsxs("div",{className:"flex justify-center gap-6 pt-4",children:[e.jsx(i,{to:"/refund",className:"hover:text-cyan-300 transition-colors",children:"Politique de remboursement"}),e.jsx(i,{to:"/contact",className:"hover:text-cyan-300 transition-colors",children:"Contacter l’ingénierie"})]})]})]})]})}export{E as default}; diff --git a/assets/Privacy-1UpnFJMn.js b/assets/Privacy-1UpnFJMn.js deleted file mode 100644 index 6c6c2080..00000000 --- a/assets/Privacy-1UpnFJMn.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-BXZvemzZ.js";import{p as t}from"./privacy-KnN4Rr90.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/Privacy-B3SNe1nk.js b/assets/Privacy-B3SNe1nk.js deleted file mode 100644 index 1761ed4c..00000000 --- a/assets/Privacy-B3SNe1nk.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-WV1aysjN.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-BIGgflNy.js b/assets/Privacy-BIGgflNy.js deleted file mode 100644 index 2e0b695c..00000000 --- a/assets/Privacy-BIGgflNy.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CxWP17m6.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-Blbnjvv1.js b/assets/Privacy-Blbnjvv1.js deleted file mode 100644 index 7ff9fe3f..00000000 --- a/assets/Privacy-Blbnjvv1.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-OlrhtE5C.js";import{p as t}from"./privacy-KnN4Rr90.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/Privacy-Bw56_mFe.js b/assets/Privacy-Bw56_mFe.js deleted file mode 100644 index 050a205a..00000000 --- a/assets/Privacy-Bw56_mFe.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DkYdPRY7.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-Bxhj-CUV.js b/assets/Privacy-Bxhj-CUV.js deleted file mode 100644 index fd46cb40..00000000 --- a/assets/Privacy-Bxhj-CUV.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DRAXObZB.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-C1rLQMC9.js b/assets/Privacy-C1rLQMC9.js deleted file mode 100644 index b9d98790..00000000 --- a/assets/Privacy-C1rLQMC9.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-B9kEGiWi.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-C4c3BcJK.js b/assets/Privacy-C4c3BcJK.js deleted file mode 100644 index f87d8ab8..00000000 --- a/assets/Privacy-C4c3BcJK.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BN-vOeL2.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-CAKpuiQ_.js b/assets/Privacy-CAKpuiQ_.js deleted file mode 100644 index 6399f94b..00000000 --- a/assets/Privacy-CAKpuiQ_.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-DvyIDT6j.js";import{p as t}from"./privacy-CyCxpbsd.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function u(){return r.jsx(o,{doc:t})}export{u as default}; diff --git a/assets/Privacy-CSC4E5Sx.js b/assets/Privacy-CSC4E5Sx.js deleted file mode 100644 index ef0646e1..00000000 --- a/assets/Privacy-CSC4E5Sx.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CpdATiEY.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-ChjFFsO0.js b/assets/Privacy-ChjFFsO0.js deleted file mode 100644 index a2ab1744..00000000 --- a/assets/Privacy-ChjFFsO0.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-iVST85F-.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-CsJ5OCPq.js b/assets/Privacy-CsJ5OCPq.js deleted file mode 100644 index bef4acf6..00000000 --- a/assets/Privacy-CsJ5OCPq.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DlmjLVYe.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-CwHcJhDF.js b/assets/Privacy-CwHcJhDF.js deleted file mode 100644 index f8131515..00000000 --- a/assets/Privacy-CwHcJhDF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BUYYSLdX.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-D7vLEBoi.js b/assets/Privacy-D7vLEBoi.js deleted file mode 100644 index dd513f10..00000000 --- a/assets/Privacy-D7vLEBoi.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CqAA-ZXu.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-DA_dioZX.js b/assets/Privacy-DA_dioZX.js deleted file mode 100644 index 15ef514b..00000000 --- a/assets/Privacy-DA_dioZX.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-D-Mi7GTG.js";import{p as t}from"./privacy-CP9bp7X-.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/Privacy-DHw_SEtf.js b/assets/Privacy-DHw_SEtf.js deleted file mode 100644 index 68ceee07..00000000 --- a/assets/Privacy-DHw_SEtf.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-_BpMZhV3.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-DPO_GrhI.js b/assets/Privacy-DPO_GrhI.js deleted file mode 100644 index 7c5a33fd..00000000 --- a/assets/Privacy-DPO_GrhI.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CclXHnEm.js";import{p as t}from"./privacy-CyCxpbsd.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function u(){return r.jsx(o,{doc:t})}export{u as default}; diff --git a/assets/Privacy-DTWyxh_E.js b/assets/Privacy-DTWyxh_E.js deleted file mode 100644 index 0861491d..00000000 --- a/assets/Privacy-DTWyxh_E.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-k7aoVn24.js";import{p as t}from"./privacy-C_JimZhu.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/Privacy-DZfev8WZ.js b/assets/Privacy-DZfev8WZ.js deleted file mode 100644 index 10be8d30..00000000 --- a/assets/Privacy-DZfev8WZ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BcbVjARk.js";import{N as t}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Privacy Policy · QECTOR",description:"Privacy policy for QECTOR website and services."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No ad networks · No data sold · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(t,{text:"Privacy Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"We collect only what's needed to respond to your inquiry. No third-party ad networks. We do not sell your personal information. If this ever changes, we will update this policy and obtain your consent first."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Overview"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"QECTOR (operated by iD01t Productions) respects your privacy. This policy explains what data we collect, how we use it, and your rights. We minimize data collection and do not sell your personal information."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data controller"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Data controller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Quebec, Canada, J4K 3H7. Privacy contact:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data We Collect"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contact form:"})," Name, email, organization, referral source, evaluation timeline, message - stored only to respond to your inquiry."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Usage analytics:"})," Standard server access logs only (no first-party analytics, no advertising). Third-party scripts loaded on this site (the Stripe buy-button script on pricing pages, the Calendly scheduling widget on the contact page) and third-party services you use directly (Stripe checkout) operate under their own privacy policies."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Technical logs:"})," Standard server logs (IP address, user agent) retained for a limited period for security purposes."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cookies and third-party trackers"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"We do not run ad networks and we do not set advertising cookies. Two third-party integrations load their own scripts on this site:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Stripe buy-button script"})," (js.stripe.com), loaded automatically on the pricing pages. Purpose: payment processing. See the ",e.jsx("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Stripe Privacy Policy"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Calendly scheduling widget"}),", loaded on the contact page. Purpose: booking appointments. See the ",e.jsx("a",{href:"https://calendly.com/privacy",target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline",children:"Calendly Privacy Policy"}),"."]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"How We Use Data"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5",children:[e.jsx("li",{children:"Respond to inquiries and support requests"}),e.jsx("li",{children:"Improve website and product experience"}),e.jsx("li",{children:"Send product updates you have opted into"}),e.jsx("li",{children:"Detect and prevent abuse"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data retention"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Technical access logs are retained for a maximum of 12 months. Contact inquiries are retained for 3 years."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Data Sharing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We do not sell, rent, or trade your personal information. Data is only shared with:"}),e.jsxs("ul",{className:"space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5 mt-3",children:[e.jsx("li",{children:"Service providers necessary for operation (hosting, email delivery, scheduling, payment processing)"}),e.jsx("li",{children:"When required by law or to protect our rights"})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"International transfers and payments"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Some data is processed outside Canada by our providers (Stripe in the United States for payments, Calendly in the United States for scheduling). Card details are handled solely by Stripe and never touch our servers."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Your Rights"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["You have the right to access, correct, or delete your personal data. You also have the right to data portability, to object to or restrict processing, and to withdraw consent at any time. You may lodge a complaint with your data protection authority (Commission d'accès à l'information du Québec, or your EU supervisory authority). Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," to exercise these rights."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["For privacy-related questions, contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Privacy-QF8StmXn.js b/assets/Privacy-QF8StmXn.js deleted file mode 100644 index 5231645c..00000000 --- a/assets/Privacy-QF8StmXn.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CFP-uSSS.js";import{p as t}from"./privacy-CP9bp7X-.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/PrivacyFR-BAX39_oh.js b/assets/PrivacyFR-BAX39_oh.js deleted file mode 100644 index c24b64b1..00000000 --- a/assets/PrivacyFR-BAX39_oh.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CFP-uSSS.js";import{a as t}from"./privacy-CP9bp7X-.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function c(){return r.jsx(o,{doc:t})}export{c as default}; diff --git a/assets/PrivacyFR-Bhng6Sji.js b/assets/PrivacyFR-Bhng6Sji.js deleted file mode 100644 index a24c52e2..00000000 --- a/assets/PrivacyFR-Bhng6Sji.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-k7aoVn24.js";import{a as t}from"./privacy-C_JimZhu.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function c(){return r.jsx(o,{doc:t})}export{c as default}; diff --git a/assets/PrivacyFR-CCMtsUS3.js b/assets/PrivacyFR-CCMtsUS3.js deleted file mode 100644 index ea84ce6f..00000000 --- a/assets/PrivacyFR-CCMtsUS3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-BXZvemzZ.js";import{a as t}from"./privacy-KnN4Rr90.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function c(){return r.jsx(o,{doc:t})}export{c as default}; diff --git a/assets/PrivacyFR-DI_0o-iC.js b/assets/PrivacyFR-DI_0o-iC.js deleted file mode 100644 index e7752ef8..00000000 --- a/assets/PrivacyFR-DI_0o-iC.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CclXHnEm.js";import{a as t}from"./privacy-CyCxpbsd.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function u(){return r.jsx(o,{doc:t})}export{u as default}; diff --git a/assets/PrivacyFR-H5T4viaB.js b/assets/PrivacyFR-H5T4viaB.js deleted file mode 100644 index 72ca5913..00000000 --- a/assets/PrivacyFR-H5T4viaB.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-OlrhtE5C.js";import{a as t}from"./privacy-KnN4Rr90.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function c(){return r.jsx(o,{doc:t})}export{c as default}; diff --git a/assets/PrivacyFR-fW9Yt675.js b/assets/PrivacyFR-fW9Yt675.js deleted file mode 100644 index 67f5583b..00000000 --- a/assets/PrivacyFR-fW9Yt675.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-D-Mi7GTG.js";import{a as t}from"./privacy-CP9bp7X-.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function c(){return r.jsx(o,{doc:t})}export{c as default}; diff --git a/assets/PrivacyFR-yruEp8O3.js b/assets/PrivacyFR-yruEp8O3.js deleted file mode 100644 index b350a773..00000000 --- a/assets/PrivacyFR-yruEp8O3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-DvyIDT6j.js";import{a as t}from"./privacy-CyCxpbsd.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function u(){return r.jsx(o,{doc:t})}export{u as default}; diff --git a/assets/Refund-4zHoAwwi.js b/assets/Refund-4zHoAwwi.js deleted file mode 100644 index 0fea693b..00000000 --- a/assets/Refund-4zHoAwwi.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-CpdATiEY.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time, free ${a.trialDays}-day trial before you buy.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Try it free for ",a.trialDays," days, then buy with a ",a.refundDays,"-day money-back guarantee. Plans renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Team, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:["Try before you buy: free ",a.trialDays,"-day trial"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Request a free ",a.trialDays,"-day commercial trial on the"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),". No card is needed and the token simply expires, so there is nothing to cancel or refund. Larger evaluations can use the"," ",a.pilotDays,"-day Pilot, which is covered by the same money-back guarantee."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual), Team and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-7XZ4VkKd.js b/assets/Refund-7XZ4VkKd.js deleted file mode 100644 index c4e8d42e..00000000 --- a/assets/Refund-7XZ4VkKd.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-k7aoVn24.js";import{r as t}from"./terms-DgnSX4e_.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function s(){return r.jsx(o,{doc:t})}export{s as default}; diff --git a/assets/Refund-Brla-rHu.js b/assets/Refund-Brla-rHu.js deleted file mode 100644 index 547ffc78..00000000 --- a/assets/Refund-Brla-rHu.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-DRAXObZB.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Every plan has a ",a.refundDays,"-day money-back guarantee on the first payment. Subscriptions renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual) and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-C9DAd5MZ.js b/assets/Refund-C9DAd5MZ.js deleted file mode 100644 index 117e71ab..00000000 --- a/assets/Refund-C9DAd5MZ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-OlrhtE5C.js";import{r as t}from"./terms-LnOasveG.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function s(){return r.jsx(o,{doc:t})}export{s as default}; diff --git a/assets/Refund-CRV_Z2o3.js b/assets/Refund-CRV_Z2o3.js deleted file mode 100644 index f95eab8a..00000000 --- a/assets/Refund-CRV_Z2o3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CFP-uSSS.js";import{r as t}from"./terms-LnOasveG.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function s(){return r.jsx(o,{doc:t})}export{s as default}; diff --git a/assets/Refund-CRy_OFTy.js b/assets/Refund-CRy_OFTy.js deleted file mode 100644 index 9340cea6..00000000 --- a/assets/Refund-CRy_OFTy.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-DvyIDT6j.js";import{r as t}from"./terms-LnOasveG.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function d(){return r.jsx(o,{doc:t})}export{d as default}; diff --git a/assets/Refund-CTEPp265.js b/assets/Refund-CTEPp265.js deleted file mode 100644 index 19615eb8..00000000 --- a/assets/Refund-CTEPp265.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-BN-vOeL2.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time, free ${a.trialDays}-day trial before you buy.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Try it free for ",a.trialDays," days, then buy with a ",a.refundDays,"-day money-back guarantee. Plans renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Team, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:["Try before you buy: free ",a.trialDays,"-day trial"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Request a free ",a.trialDays,"-day commercial trial on the"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),". No card is needed and the token simply expires, so there is nothing to cancel or refund. Larger evaluations can use the"," ",a.pilotDays,"-day Pilot, which is covered by the same money-back guarantee."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual), Team and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-CrMuzabH.js b/assets/Refund-CrMuzabH.js deleted file mode 100644 index 2c0c16e7..00000000 --- a/assets/Refund-CrMuzabH.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-WV1aysjN.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time, free ${a.trialDays}-day trial before you buy.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Try it free for ",a.trialDays," days, then buy with a ",a.refundDays,"-day money-back guarantee. Plans renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Team, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:["Try before you buy: free ",a.trialDays,"-day trial"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Request a free ",a.trialDays,"-day commercial trial on the"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),". No card is needed and the token simply expires, so there is nothing to cancel or refund. Larger evaluations can use the"," ",a.pilotDays,"-day Pilot, which is covered by the same money-back guarantee."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual), Team and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-CtROPxer.js b/assets/Refund-CtROPxer.js deleted file mode 100644 index 70c484a4..00000000 --- a/assets/Refund-CtROPxer.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-D-Mi7GTG.js";import{r as t}from"./terms-LnOasveG.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function s(){return r.jsx(o,{doc:t})}export{s as default}; diff --git a/assets/Refund-CzUjP8UP.js b/assets/Refund-CzUjP8UP.js deleted file mode 100644 index c199c38e..00000000 --- a/assets/Refund-CzUjP8UP.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-CqAA-ZXu.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time, free ${a.trialDays}-day trial before you buy.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Try it free for ",a.trialDays," days, then buy with a ",a.refundDays,"-day money-back guarantee. Plans renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Team, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:["Try before you buy: free ",a.trialDays,"-day trial"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Request a free ",a.trialDays,"-day commercial trial on the"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),". No card is needed and the token simply expires, so there is nothing to cancel or refund. Larger evaluations can use the"," ",a.pilotDays,"-day Pilot, which is covered by the same money-back guarantee."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual), Team and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-D6csSD1J.js b/assets/Refund-D6csSD1J.js deleted file mode 100644 index 8f71bb2e..00000000 --- a/assets/Refund-D6csSD1J.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-BUYYSLdX.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Every plan has a ",a.refundDays,"-day money-back guarantee on the first payment. Subscriptions renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual) and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-DJWm-f08.js b/assets/Refund-DJWm-f08.js deleted file mode 100644 index 48476b5b..00000000 --- a/assets/Refund-DJWm-f08.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-BcbVjARk.js";import{N as s}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"Refund Policy · QECTOR",description:"QECTOR Decoder v3 refund policy. License tokens are delivered instantly and are non-refundable; the $499 60-day evaluation is the creditable way to evaluate before committing."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(s,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["QECTOR commercial licenses are digital goods delivered immediately on payment. All sales are final. The ",e.jsx(a,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"$499 evaluation"})," exists so you can validate QECTOR before committing to an annual tier."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"All sales are final"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Every commercial license is an Ed25519-signed token issued and emailed within minutes of successful payment (usually under 10 minutes). Because the licensed rights and the token are delivered in full and immediately, and cannot be returned or revoked once received, commercial licenses are ",e.jsx("strong",{className:"text-primary",children:"non-refundable"}),". This applies to the Commercial Evaluation License, all annual tiers, and the perpetual license."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By completing checkout you acknowledge that delivery begins immediately and that you are purchasing a non-refundable digital license."})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Evaluate first: that is what the $499 tier is for"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["We would rather you test than request a refund. The Commercial Evaluation License is a flat, non-recurring",e.jsx("strong",{className:"text-primary",children:" $499"})," for 60 days with unlimited internal seats, intended for benchmarking, integration testing, and architecture assessment against your own workloads."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• It does not auto-renew and is not a subscription."}),e.jsx("li",{children:"• It is 100% creditable toward any annual tier purchased within 90 days of your evaluation start."}),e.jsx("li",{children:"• Example: $499 evaluation, then Solo/Indie within the window: you pay $800, not $1,299."}),e.jsx("li",{children:"• To claim the credit, email your Stripe invoice number to admin@qector.store and we invoice the difference."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe invoice number and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated license mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same tier for the same organization, and charges made in obvious error, are refunded in full on request. Email admin@qector.store with both Stripe invoice numbers within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cancelling an annual license"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Annual licenses are term licenses, not recurring subscriptions: they do not auto-renew, so there is nothing to cancel. Your rights simply run for the term you paid for, and we contact you before the term ends. Stopping use partway through a term does not generate a partial refund."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you. Where a non-waivable right to cancel a digital purchase exists and you have not yet been issued or used a license token, contact us and we will honour it."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe adds any applicable sales tax, GST/HST, or VAT at checkout based on your billing location. Tax collected on a completed sale is remitted to the relevant authority and is refundable only where that authority allows it; tax-exempt organizations should provide a registration number at checkout rather than seek a refund afterward."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licenses are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(a,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(a,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{m as default}; diff --git a/assets/Refund-DOxk_DuC.js b/assets/Refund-DOxk_DuC.js deleted file mode 100644 index fe9cbe34..00000000 --- a/assets/Refund-DOxk_DuC.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-iVST85F-.js";import{N as s}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"Refund Policy · QECTOR",description:"QECTOR Decoder v3 refund policy. License tokens are delivered instantly and are non-refundable; the $499 60-day evaluation is the creditable way to evaluate before committing."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(s,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["QECTOR commercial licenses are digital goods delivered immediately on payment. All sales are final. The ",e.jsx(a,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"$499 evaluation"})," exists so you can validate QECTOR before committing to an annual tier."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"All sales are final"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Every commercial license is an Ed25519-signed token issued and emailed within minutes of successful payment (usually under 10 minutes). Because the licensed rights and the token are delivered in full and immediately, and cannot be returned or revoked once received, commercial licenses are ",e.jsx("strong",{className:"text-primary",children:"non-refundable"}),". This applies to the Commercial Evaluation License, all annual tiers, and the perpetual license."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By completing checkout you acknowledge that delivery begins immediately and that you are purchasing a non-refundable digital license."})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Evaluate first: that is what the $499 tier is for"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["We would rather you test than request a refund. The Commercial Evaluation License is a flat, non-recurring",e.jsx("strong",{className:"text-primary",children:" $499"})," for 60 days with unlimited internal seats, intended for benchmarking, integration testing, and architecture assessment against your own workloads."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• It does not auto-renew and is not a subscription."}),e.jsx("li",{children:"• It is 100% creditable toward any annual tier purchased within 90 days of your evaluation start."}),e.jsx("li",{children:"• Example: $499 evaluation, then Solo/Indie within the window: you pay $800, not $1,299."}),e.jsx("li",{children:"• To claim the credit, email your Stripe invoice number to admin@qector.store and we invoice the difference."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe invoice number and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated license mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same tier for the same organization, and charges made in obvious error, are refunded in full on request. Email admin@qector.store with both Stripe invoice numbers within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cancelling an annual license"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Annual licenses are term licenses, not recurring subscriptions: they do not auto-renew, so there is nothing to cancel. Your rights simply run for the term you paid for, and we contact you before the term ends. Stopping use partway through a term does not generate a partial refund."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you. Where a non-waivable right to cancel a digital purchase exists and you have not yet been issued or used a license token, contact us and we will honour it."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe adds any applicable sales tax, GST/HST, or VAT at checkout based on your billing location. Tax collected on a completed sale is remitted to the relevant authority and is refundable only where that authority allows it; tax-exempt organizations should provide a registration number at checkout rather than seek a refund afterward."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licenses are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(a,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(a,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{m as default}; diff --git a/assets/Refund-DahbRJTv.js b/assets/Refund-DahbRJTv.js deleted file mode 100644 index c37c08f7..00000000 --- a/assets/Refund-DahbRJTv.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-BXZvemzZ.js";import{r as t}from"./terms-LnOasveG.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function s(){return r.jsx(o,{doc:t})}export{s as default}; diff --git a/assets/Refund-DehBoW1l.js b/assets/Refund-DehBoW1l.js deleted file mode 100644 index 462dabdc..00000000 --- a/assets/Refund-DehBoW1l.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-_BpMZhV3.js";import{N as s}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"Refund Policy · QECTOR",description:"QECTOR Decoder v3 refund policy. License tokens are delivered instantly and are non-refundable; the $499 60-day evaluation is the creditable way to evaluate before committing."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(s,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["QECTOR commercial licenses are digital goods delivered immediately on payment. All sales are final. The ",e.jsx(a,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"$499 evaluation"})," exists so you can validate QECTOR before committing to an annual tier."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"All sales are final"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Every commercial license is an Ed25519-signed token issued and emailed within minutes of successful payment (usually under 10 minutes). Because the licensed rights and the token are delivered in full and immediately, and cannot be returned or revoked once received, commercial licenses are ",e.jsx("strong",{className:"text-primary",children:"non-refundable"}),". This applies to the Commercial Evaluation License, all annual tiers, and the perpetual license."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By completing checkout you acknowledge that delivery begins immediately and that you are purchasing a non-refundable digital license."})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Evaluate first: that is what the $499 tier is for"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["We would rather you test than request a refund. The Commercial Evaluation License is a flat, non-recurring",e.jsx("strong",{className:"text-primary",children:" $499"})," for 60 days with unlimited internal seats, intended for benchmarking, integration testing, and architecture assessment against your own workloads."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• It does not auto-renew and is not a subscription."}),e.jsx("li",{children:"• It is 100% creditable toward any annual tier purchased within 90 days of your evaluation start."}),e.jsx("li",{children:"• Example: $499 evaluation, then Solo/Indie within the window: you pay $800, not $1,299."}),e.jsx("li",{children:"• To claim the credit, email your Stripe invoice number to admin@qector.store and we invoice the difference."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe invoice number and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated license mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same tier for the same organization, and charges made in obvious error, are refunded in full on request. Email admin@qector.store with both Stripe invoice numbers within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cancelling an annual license"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Annual licenses are term licenses, not recurring subscriptions: they do not auto-renew, so there is nothing to cancel. Your rights simply run for the term you paid for, and we contact you before the term ends. Stopping use partway through a term does not generate a partial refund."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you. Where a non-waivable right to cancel a digital purchase exists and you have not yet been issued or used a license token, contact us and we will honour it."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe adds any applicable sales tax, GST/HST, or VAT at checkout based on your billing location. Tax collected on a completed sale is remitted to the relevant authority and is refundable only where that authority allows it; tax-exempt organizations should provide a registration number at checkout rather than seek a refund afterward."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licenses are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(a,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(a,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{m as default}; diff --git a/assets/Refund-DgWFKD0E.js b/assets/Refund-DgWFKD0E.js deleted file mode 100644 index d0b07554..00000000 --- a/assets/Refund-DgWFKD0E.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as t}from"./index-B9kEGiWi.js";import{N as s}from"./NeuralReveal-BflyZYSb.js";import{L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function m(){return e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"Refund Policy · QECTOR",description:"QECTOR Decoder v3 refund policy. License tokens are delivered instantly and are non-refundable; the $499 60-day evaluation is the creditable way to evaluate before committing."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(s,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["QECTOR commercial licenses are digital goods delivered immediately on payment. All sales are final. The ",e.jsx(a,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"$499 evaluation"})," exists so you can validate QECTOR before committing to an annual tier."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"All sales are final"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Every commercial license is an Ed25519-signed token issued and emailed within minutes of successful payment (usually under 10 minutes). Because the licensed rights and the token are delivered in full and immediately, and cannot be returned or revoked once received, commercial licenses are ",e.jsx("strong",{className:"text-primary",children:"non-refundable"}),". This applies to the Commercial Evaluation License, all annual tiers, and the perpetual license."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By completing checkout you acknowledge that delivery begins immediately and that you are purchasing a non-refundable digital license."})]}),e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Evaluate first: that is what the $499 tier is for"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["We would rather you test than request a refund. The Commercial Evaluation License is a flat, non-recurring",e.jsx("strong",{className:"text-primary",children:" $499"})," for 60 days with unlimited internal seats, intended for benchmarking, integration testing, and architecture assessment against your own workloads."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• It does not auto-renew and is not a subscription."}),e.jsx("li",{children:"• It is 100% creditable toward any annual tier purchased within 90 days of your evaluation start."}),e.jsx("li",{children:"• Example: $499 evaluation, then Solo/Indie within the window: you pay $800, not $1,299."}),e.jsx("li",{children:"• To claim the credit, email your Stripe invoice number to admin@qector.store and we invoice the difference."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe invoice number and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated license mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same tier for the same organization, and charges made in obvious error, are refunded in full on request. Email admin@qector.store with both Stripe invoice numbers within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Cancelling an annual license"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Annual licenses are term licenses, not recurring subscriptions: they do not auto-renew, so there is nothing to cancel. Your rights simply run for the term you paid for, and we contact you before the term ends. Stopping use partway through a term does not generate a partial refund."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you. Where a non-waivable right to cancel a digital purchase exists and you have not yet been issued or used a license token, contact us and we will honour it."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe adds any applicable sales tax, GST/HST, or VAT at checkout based on your billing location. Tax collected on a completed sale is remitted to the relevant authority and is refundable only where that authority allows it; tax-exempt organizations should provide a registration number at checkout rather than seek a refund afterward."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licenses are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(a,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(a,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{m as default}; diff --git a/assets/Refund-Dogk61Pr.js b/assets/Refund-Dogk61Pr.js deleted file mode 100644 index 6888d6a6..00000000 --- a/assets/Refund-Dogk61Pr.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CclXHnEm.js";import{r as t}from"./terms-B2iKgo_y.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function d(){return r.jsx(o,{doc:t})}export{d as default}; diff --git a/assets/Refund-M3lrlUb1.js b/assets/Refund-M3lrlUb1.js deleted file mode 100644 index 31f021a0..00000000 --- a/assets/Refund-M3lrlUb1.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-CxWP17m6.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Every plan has a ",a.refundDays,"-day money-back guarantee on the first payment. Subscriptions renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual) and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-Maay4b_R.js b/assets/Refund-Maay4b_R.js deleted file mode 100644 index 156cbda6..00000000 --- a/assets/Refund-Maay4b_R.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-DlmjLVYe.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time, free ${a.trialDays}-day trial before you buy.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Try it free for ",a.trialDays," days, then buy with a ",a.refundDays,"-day money-back guarantee. Plans renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Team, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:["Try before you buy: free ",a.trialDays,"-day trial"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Request a free ",a.trialDays,"-day commercial trial on the"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"pricing page"}),". No card is needed and the token simply expires, so there is nothing to cancel or refund. Larger evaluations can use the"," ",a.pilotDays,"-day Pilot, which is covered by the same money-back guarantee."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual), Team and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/Refund-wy-XPTpv.js b/assets/Refund-wy-XPTpv.js deleted file mode 100644 index c98e63c0..00000000 --- a/assets/Refund-wy-XPTpv.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s,P as a}from"./index-DkYdPRY7.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function x(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Refund Policy · QECTOR",description:`QECTOR Decoder v3 refund policy: ${a.refundDays}-day money-back guarantee on your first payment of any plan, cancel renewals any time.`}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"All prices in USD · Instant digital delivery · Last updated November 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Refund Policy",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["Every plan has a ",a.refundDays,"-day money-back guarantee on the first payment. Subscriptions renew automatically and you can cancel at any time. See"," ",e.jsx(t,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"Pricing"}),"."]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsxs("h2",{className:"text-xl font-bold mb-4",children:[a.refundDays,"-day money-back guarantee"]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If QECTOR is not right for you, email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt within ",a.refundDays," days of your ",e.jsx("strong",{className:"text-primary",children:"first payment"})," of any plan (Pro monthly or annual, Pro Perpetual, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token."]}),e.jsxs("ul",{className:"text-secondary text-sm space-y-1.5",children:[e.jsx("li",{children:"• One guarantee per organisation; it applies to the first purchase, not to later renewals."}),e.jsx("li",{children:"• Refunds go back to the original payment method through Stripe, usually within 5–10 business days."}),e.jsx("li",{children:"• Once refunded, the licence ends and the token must no longer be used."})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Renewals and cancelling"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Pro (monthly or annual) and Lab are subscriptions and ",e.jsx("strong",{className:"text-primary",children:"renew automatically"})," ","until cancelled. We email a reminder 14 days before each annual renewal. Cancel any time from the link in your Stripe receipt or by emailing admin@qector.store; your licence stays valid until the end of the period you paid for."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Delivery problems are not refund matters: we fix them"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["If your token never arrives, arrives corrupted, is tied to the wrong email, or fails offline verification, that is a delivery fault on our side. Do not open a dispute: email"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with your Stripe receipt and we will reissue or correct it, at no cost and with no expiry on that obligation."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). If it has been longer, check your spam folder first: automated licence mail is a common false positive."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Duplicate and mistaken charges"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. Email admin@qector.store with both Stripe receipts within 30 days of the charge."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Statutory rights"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nothing in this policy limits or waives rights that cannot be waived under the consumer-protection law that applies to you, including the Québec Consumer Protection Act where it applies."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Currency and tax"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Any applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address, and is refunded together with the price when a payment is refunded. Businesses can enter a VAT/GST number at checkout."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Seller and contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Licences are sold by ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada. Payments are processed by Stripe; card details never reach QECTOR systems."]}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:"Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7."}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Refund and billing questions:"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),". Typical response time is 1 business day. See also"," ",e.jsx(t,{to:"/terms",className:"text-cyan-300 hover:underline",children:"Terms"})," and"," ",e.jsx(t,{to:"/license",className:"text-cyan-300 hover:underline",children:"License"}),"."]})]})]})})]})}export{x as default}; diff --git a/assets/RefundFR-8Zk51nsW.js b/assets/RefundFR-8Zk51nsW.js deleted file mode 100644 index a343078a..00000000 --- a/assets/RefundFR-8Zk51nsW.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-BXZvemzZ.js";import{b as t}from"./terms-LnOasveG.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/RefundFR-Bvjoj9dF.js b/assets/RefundFR-Bvjoj9dF.js deleted file mode 100644 index 90c520c6..00000000 --- a/assets/RefundFR-Bvjoj9dF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-OlrhtE5C.js";import{b as t}from"./terms-LnOasveG.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/RefundFR-Bw4xCJhz.js b/assets/RefundFR-Bw4xCJhz.js deleted file mode 100644 index b146f179..00000000 --- a/assets/RefundFR-Bw4xCJhz.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-D-Mi7GTG.js";import{b as t}from"./terms-LnOasveG.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/RefundFR-Di2o3oj1.js b/assets/RefundFR-Di2o3oj1.js deleted file mode 100644 index 4ef685e3..00000000 --- a/assets/RefundFR-Di2o3oj1.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CclXHnEm.js";import{b as t}from"./terms-B2iKgo_y.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function d(){return r.jsx(o,{doc:t})}export{d as default}; diff --git a/assets/RefundFR-KUCUHxUI.js b/assets/RefundFR-KUCUHxUI.js deleted file mode 100644 index 11cba67c..00000000 --- a/assets/RefundFR-KUCUHxUI.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-DvyIDT6j.js";import{b as t}from"./terms-LnOasveG.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function d(){return r.jsx(o,{doc:t})}export{d as default}; diff --git a/assets/RefundFR-a4_cfmuo.js b/assets/RefundFR-a4_cfmuo.js deleted file mode 100644 index 7ce5bed9..00000000 --- a/assets/RefundFR-a4_cfmuo.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CFP-uSSS.js";import{b as t}from"./terms-LnOasveG.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/RefundFR-i_PP-hSK.js b/assets/RefundFR-i_PP-hSK.js deleted file mode 100644 index 7ab79492..00000000 --- a/assets/RefundFR-i_PP-hSK.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-k7aoVn24.js";import{b as t}from"./terms-DgnSX4e_.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/Security-BIDsFI0G.js b/assets/Security-BIDsFI0G.js deleted file mode 100644 index a063d4a9..00000000 --- a/assets/Security-BIDsFI0G.js +++ /dev/null @@ -1,5 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as o,C as i,L as t}from"./index-CcwlvHYJ.js";import{N as d}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";const h="https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",x="https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v2.0.1",a="kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=",m="MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=";function s({title:n,children:l,accent:c}){return e.jsxs("div",{className:`card-surface ${c?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:n}),e.jsx("div",{className:"text-secondary text-sm leading-relaxed space-y-3",children:l})]})}const r={target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]"};function f(){return e.jsxs(e.Fragment,{children:[e.jsx(o,{title:"Security & Trust · QECTOR",description:"QECTOR security and procurement pack: no telemetry, offline licence verification, Sigstore provenance on every wheel, signed releases, SBOM, vulnerability disclosure and data handling."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No telemetry · Offline licensing · Signed releases"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Security & Trust",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx(s,{title:"At a glance",accent:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"No telemetry."})," The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Air-gapped licensing."})," Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Verified builds."})," All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Tested before release."})," Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as ",e.jsx("code",{className:"font-mono text-cyan-200",children:"platform-proof.json"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Dependency gate."})," Releases are blocked while a RustSec advisory or licence-policy violation is open."]})]})}),e.jsxs(s,{title:"Verify a decoder wheel",children:[e.jsxs("p",{children:["Download from PyPI or the ",e.jsx("a",{href:h,...r,children:"v1.0.1 GitHub release"}),", then check its checksum and provenance with the GitHub CLI:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS --ignore-missing -gh attestation verify qector_decoder_v3-1.0.1-*.whl \\ - --repo GuillaumeLessard/qector-decoder`}),e.jsx("p",{children:`PyPI also shows each file's attestations under "Verified details".`})]}),e.jsxs(s,{title:"Verify the Claude plugin",children:[e.jsxs("p",{children:["The ",e.jsx("a",{href:x,...r,children:"plugin v2.0.1 release"})," ships ",e.jsx("code",{className:"font-mono text-cyan-200",children:"SHA256SUMS"}),", an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS -python scripts/sign_release.py --verify . \\ - --pubkey ${a}`}),e.jsxs("p",{children:["Every Python dependency of the plugin is pinned by SHA-256 in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"requirements.lock"})," and installed with ",e.jsx("code",{className:"font-mono text-cyan-200",children:"--require-hashes"}),"."]})]}),e.jsxs(s,{title:"Public keys",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 text-primary",children:"Key"}),e.jsx("th",{className:"py-2 text-primary",children:"Value"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Plugin release signing (Ed25519, raw base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:a})]}),e.jsxs("tr",{className:"align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Decoder licence verification (Ed25519, SPKI DER base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:m})]})]})]})}),e.jsx("p",{children:"The licence key is embedded in the package; it only verifies tokens and cannot issue them."})]}),e.jsxs(s,{title:"Data handling",children:[e.jsxs("p",{children:["We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the"," ",e.jsx(t,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"}),", written for Québec's Law 25."]}),e.jsxs("p",{children:["Revoked licences are published at"," ",e.jsx("a",{href:"https://qector.store/stripe/revoked.txt",...r,children:"qector.store/stripe/revoked.txt"}),"; air-gapped sites can copy it to ",e.jsx("code",{className:"font-mono text-cyan-200",children:"~/.qector/revoked.txt"}),"."]})]}),e.jsxs(s,{title:"Report a vulnerability",children:[e.jsxs("p",{children:["E-mail ",e.jsx("a",{href:"mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the subject ",e.jsx("code",{className:"font-mono text-cyan-200",children:"[SECURITY] QECTOR disclosure"}),". Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available."]}),e.jsxs("p",{children:["We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy:"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/blob/main/SECURITY.md",...r,children:"decoder SECURITY.md"}),","," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/blob/main/SECURITY.md",...r,children:"plugin SECURITY.md"}),", and"," ",e.jsx("a",{href:"/.well-known/security.txt",className:"text-cyan-300 hover:underline",children:"security.txt"}),"."]})]}),e.jsx(s,{title:"Procurement",children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Seller:"})," Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contract:"})," the ",e.jsx(t,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," (",e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"français"}),"); Enterprise deals use a signed agreement."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Payment:"})," card or invoice through Stripe, in USD; tax numbers accepted at checkout."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"On request:"})," W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})})]})}export{f as default}; diff --git a/assets/Security-CHoU1bHv.js b/assets/Security-CHoU1bHv.js deleted file mode 100644 index 0f164e38..00000000 --- a/assets/Security-CHoU1bHv.js +++ /dev/null @@ -1,5 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as o,C as i,L as t}from"./index-PdoH5kLF.js";import{N as d}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const h="https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",x="https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v2.0.1",a="kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=",m="MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=";function s({title:n,children:l,accent:c}){return e.jsxs("div",{className:`card-surface ${c?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:n}),e.jsx("div",{className:"text-secondary text-sm leading-relaxed space-y-3",children:l})]})}const r={target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]"};function f(){return e.jsxs(e.Fragment,{children:[e.jsx(o,{title:"Security & Trust · QECTOR",description:"QECTOR security and procurement pack: no telemetry, offline licence verification, Sigstore provenance on every wheel, signed releases, SBOM, vulnerability disclosure and data handling."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No telemetry · Offline licensing · Signed releases"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Security & Trust",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx(s,{title:"At a glance",accent:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"No telemetry."})," The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Air-gapped licensing."})," Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Verified builds."})," All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Tested before release."})," Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as ",e.jsx("code",{className:"font-mono text-cyan-200",children:"platform-proof.json"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Dependency gate."})," Releases are blocked while a RustSec advisory or licence-policy violation is open."]})]})}),e.jsxs(s,{title:"Verify a decoder wheel",children:[e.jsxs("p",{children:["Download from PyPI or the ",e.jsx("a",{href:h,...r,children:"v1.0.1 GitHub release"}),", then check its checksum and provenance with the GitHub CLI:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS --ignore-missing -gh attestation verify qector_decoder_v3-1.0.1-*.whl \\ - --repo GuillaumeLessard/qector-decoder`}),e.jsx("p",{children:`PyPI also shows each file's attestations under "Verified details".`})]}),e.jsxs(s,{title:"Verify the Claude plugin",children:[e.jsxs("p",{children:["The ",e.jsx("a",{href:x,...r,children:"plugin v2.0.1 release"})," ships ",e.jsx("code",{className:"font-mono text-cyan-200",children:"SHA256SUMS"}),", an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS -python scripts/sign_release.py --verify . \\ - --pubkey ${a}`}),e.jsxs("p",{children:["Every Python dependency of the plugin is pinned by SHA-256 in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"requirements.lock"})," and installed with ",e.jsx("code",{className:"font-mono text-cyan-200",children:"--require-hashes"}),"."]})]}),e.jsxs(s,{title:"Public keys",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 text-primary",children:"Key"}),e.jsx("th",{className:"py-2 text-primary",children:"Value"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Plugin release signing (Ed25519, raw base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:a})]}),e.jsxs("tr",{className:"align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Decoder licence verification (Ed25519, SPKI DER base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:m})]})]})]})}),e.jsx("p",{children:"The licence key is embedded in the package; it only verifies tokens and cannot issue them."})]}),e.jsxs(s,{title:"Data handling",children:[e.jsxs("p",{children:["We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the"," ",e.jsx(t,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"}),", written for Québec's Law 25."]}),e.jsxs("p",{children:["Revoked licences are published at"," ",e.jsx("a",{href:"https://qector.store/stripe/revoked.txt",...r,children:"qector.store/stripe/revoked.txt"}),"; air-gapped sites can copy it to ",e.jsx("code",{className:"font-mono text-cyan-200",children:"~/.qector/revoked.txt"}),"."]})]}),e.jsxs(s,{title:"Report a vulnerability",children:[e.jsxs("p",{children:["E-mail ",e.jsx("a",{href:"mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the subject ",e.jsx("code",{className:"font-mono text-cyan-200",children:"[SECURITY] QECTOR disclosure"}),". Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available."]}),e.jsxs("p",{children:["We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy:"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/blob/main/SECURITY.md",...r,children:"decoder SECURITY.md"}),","," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/blob/main/SECURITY.md",...r,children:"plugin SECURITY.md"}),", and"," ",e.jsx("a",{href:"/.well-known/security.txt",className:"text-cyan-300 hover:underline",children:"security.txt"}),"."]})]}),e.jsx(s,{title:"Procurement",children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Seller:"})," Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contract:"})," the ",e.jsx(t,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," (",e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"français"}),"); Enterprise deals use a signed agreement."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Payment:"})," card or invoice through Stripe, in USD; tax numbers accepted at checkout."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"On request:"})," W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})})]})}export{f as default}; diff --git a/assets/Security-CMQacbrM.js b/assets/Security-CMQacbrM.js deleted file mode 100644 index 850cac86..00000000 --- a/assets/Security-CMQacbrM.js +++ /dev/null @@ -1,5 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as o,C as i}from"./index-Bh9DBCb3.js";import{N as d}from"./NeuralReveal-D-EQoOl2.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const h="https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",x="https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v2.0.1",a="kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=",m="MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=";function s({title:n,children:l,accent:c}){return e.jsxs("div",{className:`card-surface ${c?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:n}),e.jsx("div",{className:"text-secondary text-sm leading-relaxed space-y-3",children:l})]})}const r={target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]"};function v(){return e.jsxs(e.Fragment,{children:[e.jsx(o,{title:"Security & Trust · QECTOR",description:"QECTOR security and procurement pack: no telemetry, offline licence verification, Sigstore provenance on every wheel, signed releases, SBOM, vulnerability disclosure and data handling."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No telemetry · Offline licensing · Signed releases"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Security & Trust",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx(s,{title:"At a glance",accent:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"No telemetry."})," The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Air-gapped licensing."})," Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Verified builds."})," All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Tested before release."})," Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as ",e.jsx("code",{className:"font-mono text-cyan-200",children:"platform-proof.json"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Dependency gate."})," Releases are blocked while a RustSec advisory or licence-policy violation is open."]})]})}),e.jsxs(s,{title:"Verify a decoder wheel",children:[e.jsxs("p",{children:["Download from PyPI or the ",e.jsx("a",{href:h,...r,children:"v1.0.1 GitHub release"}),", then check its checksum and provenance with the GitHub CLI:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS --ignore-missing -gh attestation verify qector_decoder_v3-1.0.1-*.whl \\ - --repo GuillaumeLessard/qector-decoder`}),e.jsx("p",{children:`PyPI also shows each file's attestations under "Verified details".`})]}),e.jsxs(s,{title:"Verify the Claude plugin",children:[e.jsxs("p",{children:["The ",e.jsx("a",{href:x,...r,children:"plugin v2.0.1 release"})," ships ",e.jsx("code",{className:"font-mono text-cyan-200",children:"SHA256SUMS"}),", an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS -python scripts/sign_release.py --verify . \\ - --pubkey ${a}`}),e.jsxs("p",{children:["Every Python dependency of the plugin is pinned by SHA-256 in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"requirements.lock"})," and installed with ",e.jsx("code",{className:"font-mono text-cyan-200",children:"--require-hashes"}),"."]})]}),e.jsxs(s,{title:"Public keys",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 text-primary",children:"Key"}),e.jsx("th",{className:"py-2 text-primary",children:"Value"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Plugin release signing (Ed25519, raw base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:a})]}),e.jsxs("tr",{className:"align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Decoder licence verification (Ed25519, SPKI DER base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:m})]})]})]})}),e.jsx("p",{children:"The licence key is embedded in the package; it only verifies tokens and cannot issue them."})]}),e.jsxs(s,{title:"Data handling",children:[e.jsxs("p",{children:["We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the"," ",e.jsx(t,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"}),", written for Québec's Law 25."]}),e.jsxs("p",{children:["Revoked licences are published at"," ",e.jsx("a",{href:"https://qector.store/stripe/revoked.txt",...r,children:"qector.store/stripe/revoked.txt"}),"; air-gapped sites can copy it to ",e.jsx("code",{className:"font-mono text-cyan-200",children:"~/.qector/revoked.txt"}),"."]})]}),e.jsxs(s,{title:"Report a vulnerability",children:[e.jsxs("p",{children:["E-mail ",e.jsx("a",{href:"mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the subject ",e.jsx("code",{className:"font-mono text-cyan-200",children:"[SECURITY] QECTOR disclosure"}),". Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available."]}),e.jsxs("p",{children:["We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy:"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/blob/main/SECURITY.md",...r,children:"decoder SECURITY.md"}),","," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/blob/main/SECURITY.md",...r,children:"plugin SECURITY.md"}),", and"," ",e.jsx("a",{href:"/.well-known/security.txt",className:"text-cyan-300 hover:underline",children:"security.txt"}),"."]})]}),e.jsx(s,{title:"Procurement",children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Seller:"})," Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contract:"})," the ",e.jsx(t,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," (",e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"français"}),"); Enterprise deals use a signed agreement."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Payment:"})," card or invoice through Stripe, in USD; tax numbers accepted at checkout."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"On request:"})," W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})})]})}export{v as default}; diff --git a/assets/Security-Cazz61L-.js b/assets/Security-Cazz61L-.js deleted file mode 100644 index e37c98e4..00000000 --- a/assets/Security-Cazz61L-.js +++ /dev/null @@ -1,5 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as o,C as i,L as t}from"./index-DayaklK-.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const h="https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",x="https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v2.0.1",a="kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=",m="MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=";function s({title:n,children:l,accent:c}){return e.jsxs("div",{className:`card-surface ${c?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:n}),e.jsx("div",{className:"text-secondary text-sm leading-relaxed space-y-3",children:l})]})}const r={target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]"};function f(){return e.jsxs(e.Fragment,{children:[e.jsx(o,{title:"Security & Trust · QECTOR",description:"QECTOR security and procurement pack: no telemetry, offline licence verification, Sigstore provenance on every wheel, signed releases, SBOM, vulnerability disclosure and data handling."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No telemetry · Offline licensing · Signed releases"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Security & Trust",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx(s,{title:"At a glance",accent:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"No telemetry."})," The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Air-gapped licensing."})," Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Verified builds."})," All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Tested before release."})," Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as ",e.jsx("code",{className:"font-mono text-cyan-200",children:"platform-proof.json"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Dependency gate."})," Releases are blocked while a RustSec advisory or licence-policy violation is open."]})]})}),e.jsxs(s,{title:"Verify a decoder wheel",children:[e.jsxs("p",{children:["Download from PyPI or the ",e.jsx("a",{href:h,...r,children:"v1.0.1 GitHub release"}),", then check its checksum and provenance with the GitHub CLI:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS --ignore-missing -gh attestation verify qector_decoder_v3-1.0.1-*.whl \\ - --repo GuillaumeLessard/qector-decoder`}),e.jsx("p",{children:`PyPI also shows each file's attestations under "Verified details".`})]}),e.jsxs(s,{title:"Verify the Claude plugin",children:[e.jsxs("p",{children:["The ",e.jsx("a",{href:x,...r,children:"plugin v2.0.1 release"})," ships ",e.jsx("code",{className:"font-mono text-cyan-200",children:"SHA256SUMS"}),", an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS -python scripts/sign_release.py --verify . \\ - --pubkey ${a}`}),e.jsxs("p",{children:["Every Python dependency of the plugin is pinned by SHA-256 in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"requirements.lock"})," and installed with ",e.jsx("code",{className:"font-mono text-cyan-200",children:"--require-hashes"}),"."]})]}),e.jsxs(s,{title:"Public keys",children:[e.jsx("div",{className:"overflow-x-auto",tabIndex:0,role:"region","aria-label":"Public keys",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 text-primary",children:"Key"}),e.jsx("th",{className:"py-2 text-primary",children:"Value"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Plugin release signing (Ed25519, raw base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:a})]}),e.jsxs("tr",{className:"align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Decoder licence verification (Ed25519, SPKI DER base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:m})]})]})]})}),e.jsx("p",{children:"The licence key is embedded in the package; it only verifies tokens and cannot issue them."})]}),e.jsxs(s,{title:"Data handling",children:[e.jsxs("p",{children:["We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the"," ",e.jsx(t,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"}),", written for Québec's Law 25."]}),e.jsxs("p",{children:["Revoked licences are published at"," ",e.jsx("a",{href:"https://qector.store/stripe/revoked.txt",...r,children:"qector.store/stripe/revoked.txt"}),"; air-gapped sites can copy it to ",e.jsx("code",{className:"font-mono text-cyan-200",children:"~/.qector/revoked.txt"}),"."]})]}),e.jsxs(s,{title:"Report a vulnerability",children:[e.jsxs("p",{children:["E-mail ",e.jsx("a",{href:"mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the subject ",e.jsx("code",{className:"font-mono text-cyan-200",children:"[SECURITY] QECTOR disclosure"}),". Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available."]}),e.jsxs("p",{children:["We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy:"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/blob/main/SECURITY.md",...r,children:"decoder SECURITY.md"}),","," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/blob/main/SECURITY.md",...r,children:"plugin SECURITY.md"}),", and"," ",e.jsx("a",{href:"/.well-known/security.txt",className:"text-cyan-300 hover:underline",children:"security.txt"}),"."]})]}),e.jsx(s,{title:"Procurement",children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Seller:"})," Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contract:"})," the ",e.jsx(t,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," (",e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"français"}),"); Enterprise deals use a signed agreement."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Payment:"})," card or invoice through Stripe, in USD; tax numbers accepted at checkout."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"On request:"})," W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})})]})}export{f as default}; diff --git a/assets/Security-NaiOZQL5.js b/assets/Security-NaiOZQL5.js deleted file mode 100644 index 4903684f..00000000 --- a/assets/Security-NaiOZQL5.js +++ /dev/null @@ -1,5 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as o,C as i,L as t}from"./index-c1PDYu0j.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const h="https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",x="https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v2.0.1",a="kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=",m="MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=";function s({title:n,children:l,accent:c}){return e.jsxs("div",{className:`card-surface ${c?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:n}),e.jsx("div",{className:"text-secondary text-sm leading-relaxed space-y-3",children:l})]})}const r={target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]"};function f(){return e.jsxs(e.Fragment,{children:[e.jsx(o,{title:"Security & Trust · QECTOR",description:"QECTOR security and procurement pack: no telemetry, offline licence verification, Sigstore provenance on every wheel, signed releases, SBOM, vulnerability disclosure and data handling."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No telemetry · Offline licensing · Signed releases"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Security & Trust",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx(s,{title:"At a glance",accent:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"No telemetry."})," The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Air-gapped licensing."})," Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Verified builds."})," All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Tested before release."})," Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as ",e.jsx("code",{className:"font-mono text-cyan-200",children:"platform-proof.json"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Dependency gate."})," Releases are blocked while a RustSec advisory or licence-policy violation is open."]})]})}),e.jsxs(s,{title:"Verify a decoder wheel",children:[e.jsxs("p",{children:["Download from PyPI or the ",e.jsx("a",{href:h,...r,children:"v1.0.1 GitHub release"}),", then check its checksum and provenance with the GitHub CLI:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS --ignore-missing -gh attestation verify qector_decoder_v3-1.0.1-*.whl \\ - --repo GuillaumeLessard/qector-decoder`}),e.jsx("p",{children:`PyPI also shows each file's attestations under "Verified details".`})]}),e.jsxs(s,{title:"Verify the Claude plugin",children:[e.jsxs("p",{children:["The ",e.jsx("a",{href:x,...r,children:"plugin v2.0.1 release"})," ships ",e.jsx("code",{className:"font-mono text-cyan-200",children:"SHA256SUMS"}),", an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS -python scripts/sign_release.py --verify . \\ - --pubkey ${a}`}),e.jsxs("p",{children:["Every Python dependency of the plugin is pinned by SHA-256 in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"requirements.lock"})," and installed with ",e.jsx("code",{className:"font-mono text-cyan-200",children:"--require-hashes"}),"."]})]}),e.jsxs(s,{title:"Public keys",children:[e.jsx("div",{className:"overflow-x-auto",tabIndex:0,role:"region","aria-label":"Public keys",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 text-primary",children:"Key"}),e.jsx("th",{className:"py-2 text-primary",children:"Value"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Plugin release signing (Ed25519, raw base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:a})]}),e.jsxs("tr",{className:"align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Decoder licence verification (Ed25519, SPKI DER base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:m})]})]})]})}),e.jsx("p",{children:"The licence key is embedded in the package; it only verifies tokens and cannot issue them."})]}),e.jsxs(s,{title:"Data handling",children:[e.jsxs("p",{children:["We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the"," ",e.jsx(t,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"}),", written for Québec's Law 25."]}),e.jsxs("p",{children:["Revoked licences are published at"," ",e.jsx("a",{href:"https://qector.store/stripe/revoked.txt",...r,children:"qector.store/stripe/revoked.txt"}),"; air-gapped sites can copy it to ",e.jsx("code",{className:"font-mono text-cyan-200",children:"~/.qector/revoked.txt"}),"."]})]}),e.jsxs(s,{title:"Report a vulnerability",children:[e.jsxs("p",{children:["E-mail ",e.jsx("a",{href:"mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the subject ",e.jsx("code",{className:"font-mono text-cyan-200",children:"[SECURITY] QECTOR disclosure"}),". Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available."]}),e.jsxs("p",{children:["We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy:"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/blob/main/SECURITY.md",...r,children:"decoder SECURITY.md"}),","," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/blob/main/SECURITY.md",...r,children:"plugin SECURITY.md"}),", and"," ",e.jsx("a",{href:"/.well-known/security.txt",className:"text-cyan-300 hover:underline",children:"security.txt"}),"."]})]}),e.jsx(s,{title:"Procurement",children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Seller:"})," Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contract:"})," the ",e.jsx(t,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," (",e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"français"}),"); Enterprise deals use a signed agreement."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Payment:"})," card or invoice through Stripe, in USD; tax numbers accepted at checkout."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"On request:"})," W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})})]})}export{f as default}; diff --git a/assets/Security-_EeEi6gF.js b/assets/Security-_EeEi6gF.js deleted file mode 100644 index 69bece86..00000000 --- a/assets/Security-_EeEi6gF.js +++ /dev/null @@ -1,5 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as o,C as a,L as t}from"./index-CCmwjNGU.js";import{N as d}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const h="https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",x="https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v2.0.1",i="kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=",m="MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=";function s({title:n,children:l,accent:c}){return e.jsxs("div",{className:`card-surface ${c?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:n}),e.jsx("div",{className:"text-secondary text-sm leading-relaxed space-y-3",children:l})]})}const r={target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]"};function f(){return e.jsxs(e.Fragment,{children:[e.jsx(o,{title:"Security & Trust · QECTOR",description:"QECTOR security and procurement pack: no telemetry, offline licence verification, Sigstore provenance on every wheel, signed releases, SBOM, vulnerability disclosure and data handling."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No telemetry · Offline licensing · Signed releases"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Security & Trust",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx(s,{title:"At a glance",accent:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"No telemetry."})," The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Air-gapped licensing."})," Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Verified builds."})," All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Tested before release."})," Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as ",e.jsx("code",{className:"font-mono text-cyan-200",children:"platform-proof.json"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Dependency gate."})," Releases are blocked while a RustSec advisory or licence-policy violation is open."]})]})}),e.jsxs(s,{title:"Verify a decoder wheel",children:[e.jsxs("p",{children:["Download from PyPI or the ",e.jsx("a",{href:h,...r,children:"v1.0.1 GitHub release"}),", then check its checksum and provenance with the GitHub CLI:"]}),e.jsx(a,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS --ignore-missing -gh attestation verify qector_decoder_v3-1.0.1-*.whl \\ - --repo GuillaumeLessard/qector-decoder`}),e.jsx("p",{children:`PyPI also shows each file's attestations under "Verified details".`})]}),e.jsxs(s,{title:"Verify the Claude plugin",children:[e.jsxs("p",{children:["The ",e.jsx("a",{href:x,...r,children:"plugin v2.0.1 release"})," ships ",e.jsx("code",{className:"font-mono text-cyan-200",children:"SHA256SUMS"}),", an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:"]}),e.jsx(a,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS -python scripts/sign_release.py --verify . \\ - --pubkey ${i}`}),e.jsxs("p",{children:["Every Python dependency of the plugin is pinned by SHA-256 in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"requirements.lock"})," and installed with ",e.jsx("code",{className:"font-mono text-cyan-200",children:"--require-hashes"}),"."]})]}),e.jsxs(s,{title:"Public keys",children:[e.jsx("div",{className:"overflow-x-auto",tabIndex:0,role:"region","aria-label":"Public keys",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 text-primary",children:"Key"}),e.jsx("th",{className:"py-2 text-primary",children:"Value"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Plugin release signing (Ed25519, raw base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:i})]}),e.jsxs("tr",{className:"align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Decoder licence verification (Ed25519, SPKI DER base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:m})]})]})]})}),e.jsx("p",{children:"The licence key is embedded in the package; it only verifies tokens and cannot issue them."})]}),e.jsxs(s,{title:"Data handling",children:[e.jsxs("p",{children:["We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the"," ",e.jsx(t,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"}),", written for Québec's Law 25."]}),e.jsxs("p",{children:["Revoked licences are published at"," ",e.jsx("a",{href:"https://qector.store/stripe/revoked.txt",...r,children:"qector.store/stripe/revoked.txt"}),"; air-gapped sites can copy it to ",e.jsx("code",{className:"font-mono text-cyan-200",children:"~/.qector/revoked.txt"}),"."]})]}),e.jsxs(s,{title:"Report a vulnerability",children:[e.jsxs("p",{children:["E-mail ",e.jsx("a",{href:"mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the subject ",e.jsx("code",{className:"font-mono text-cyan-200",children:"[SECURITY] QECTOR disclosure"}),". Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available."]}),e.jsxs("p",{children:["We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy:"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/blob/main/SECURITY.md",...r,children:"decoder SECURITY.md"}),","," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/blob/main/SECURITY.md",...r,children:"plugin SECURITY.md"}),", and"," ",e.jsx("a",{href:"/.well-known/security.txt",className:"text-cyan-300 hover:underline",children:"security.txt"}),"."]})]}),e.jsx(s,{title:"Procurement",children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Seller:"})," Guillaume Lessard, sole proprietor trading as iD01t Productions, 288 boul. des Ormeaux, Longueuil, Québec, Canada J4L 1J4."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contract:"})," the ",e.jsx(t,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," (",e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"français"}),"); Enterprise deals use a signed agreement."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Payment:"})," card or invoice through Stripe, in USD; tax numbers accepted at checkout."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"On request:"})," W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})})]})}export{f as default}; diff --git a/assets/Security-nZQ-1_Kq.js b/assets/Security-nZQ-1_Kq.js deleted file mode 100644 index 87447a7a..00000000 --- a/assets/Security-nZQ-1_Kq.js +++ /dev/null @@ -1,5 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as o,C as i}from"./index-abfjMTlQ.js";import{N as d}from"./NeuralReveal-D-EQoOl2.js";import{L as t}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";const h="https://github.com/GuillaumeLessard/qector-decoder/releases/tag/v1.0.1",x="https://github.com/GuillaumeLessard/qector-claude-plugin/releases/tag/v2.0.1",a="kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=",m="MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=";function s({title:n,children:l,accent:c}){return e.jsxs("div",{className:`card-surface ${c?"border-cyan-300/25":""}`,children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:n}),e.jsx("div",{className:"text-secondary text-sm leading-relaxed space-y-3",children:l})]})}const r={target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 hover:underline [overflow-wrap:anywhere]"};function v(){return e.jsxs(e.Fragment,{children:[e.jsx(o,{title:"Security & Trust · QECTOR",description:"QECTOR security and procurement pack: no telemetry, offline licence verification, Sigstore provenance on every wheel, signed releases, SBOM, vulnerability disclosure and data handling."}),e.jsxs("section",{className:"relative py-24 md:py-28 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex flex-wrap justify-center items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"No telemetry · Offline licensing · Signed releases"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(d,{text:"Security & Trust",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx(s,{title:"At a glance",accent:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"No telemetry."})," The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Air-gapped licensing."})," Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Verified builds."})," All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token)."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Tested before release."})," Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as ",e.jsx("code",{className:"font-mono text-cyan-200",children:"platform-proof.json"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Dependency gate."})," Releases are blocked while a RustSec advisory or licence-policy violation is open."]})]})}),e.jsxs(s,{title:"Verify a decoder wheel",children:[e.jsxs("p",{children:["Download from PyPI or the ",e.jsx("a",{href:h,...r,children:"v1.0.1 GitHub release"}),", then check its checksum and provenance with the GitHub CLI:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS --ignore-missing -gh attestation verify qector_decoder_v3-1.0.1-*.whl \\ - --repo GuillaumeLessard/qector-decoder`}),e.jsx("p",{children:`PyPI also shows each file's attestations under "Verified details".`})]}),e.jsxs(s,{title:"Verify the Claude plugin",children:[e.jsxs("p",{children:["The ",e.jsx("a",{href:x,...r,children:"plugin v2.0.1 release"})," ships ",e.jsx("code",{className:"font-mono text-cyan-200",children:"SHA256SUMS"}),", an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:"]}),e.jsx(i,{language:"bash",filename:"verify",code:`sha256sum -c SHA256SUMS -python scripts/sign_release.py --verify . \\ - --pubkey ${a}`}),e.jsxs("p",{children:["Every Python dependency of the plugin is pinned by SHA-256 in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"requirements.lock"})," and installed with ",e.jsx("code",{className:"font-mono text-cyan-200",children:"--require-hashes"}),"."]})]}),e.jsxs(s,{title:"Public keys",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline",children:[e.jsx("th",{className:"py-2 pr-4 text-primary",children:"Key"}),e.jsx("th",{className:"py-2 text-primary",children:"Value"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b border-gridline/50 align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Plugin release signing (Ed25519, raw base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:a})]}),e.jsxs("tr",{className:"align-top",children:[e.jsx("td",{className:"py-2 pr-4 text-primary",children:"Decoder licence verification (Ed25519, SPKI DER base64)"}),e.jsx("td",{className:"py-2 font-mono text-xs break-all",children:m})]})]})]})}),e.jsx("p",{children:"The licence key is embedded in the package; it only verifies tokens and cannot issue them."})]}),e.jsxs(s,{title:"Data handling",children:[e.jsxs("p",{children:["We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the"," ",e.jsx(t,{to:"/privacy",className:"text-cyan-300 hover:underline",children:"Privacy Policy"}),", written for Québec's Law 25."]}),e.jsxs("p",{children:["Revoked licences are published at"," ",e.jsx("a",{href:"https://qector.store/stripe/revoked.txt",...r,children:"qector.store/stripe/revoked.txt"}),"; air-gapped sites can copy it to ",e.jsx("code",{className:"font-mono text-cyan-200",children:"~/.qector/revoked.txt"}),"."]})]}),e.jsxs(s,{title:"Report a vulnerability",children:[e.jsxs("p",{children:["E-mail ",e.jsx("a",{href:"mailto:admin@qector.store?subject=%5BSECURITY%5D%20QECTOR%20disclosure",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," with the subject ",e.jsx("code",{className:"font-mono text-cyan-200",children:"[SECURITY] QECTOR disclosure"}),". Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available."]}),e.jsxs("p",{children:["We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy:"," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder/blob/main/SECURITY.md",...r,children:"decoder SECURITY.md"}),","," ",e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-claude-plugin/blob/main/SECURITY.md",...r,children:"plugin SECURITY.md"}),", and"," ",e.jsx("a",{href:"/.well-known/security.txt",className:"text-cyan-300 hover:underline",children:"security.txt"}),"."]})]}),e.jsx(s,{title:"Procurement",children:e.jsxs("ul",{className:"space-y-2 list-disc pl-5",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Seller:"})," Guillaume Lessard, sole proprietor trading as iD01t Productions, 2004 De Lorimier, Longueuil, Québec, Canada J4K 3H7."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Contract:"})," the ",e.jsx(t,{to:"/license-agreement",className:"text-cyan-300 hover:underline",children:"Commercial Licence Agreement"})," (",e.jsx(t,{to:"/fr/license-agreement",className:"text-cyan-300 hover:underline",children:"français"}),"); Enterprise deals use a signed agreement."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"Payment:"})," card or invoice through Stripe, in USD; tax numbers accepted at checkout."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"On request:"})," W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})})]})})]})}export{v as default}; diff --git a/assets/Status-9pqPpc0_.js b/assets/Status-9pqPpc0_.js deleted file mode 100644 index f9add5fc..00000000 --- a/assets/Status-9pqPpc0_.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,L as u}from"./index-DayaklK-.js";import{P as y,C as k}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const v={checking:"Checking…",ok:"Operational",degraded:"Degraded",down:"Unavailable"},x={checking:"bg-slate-500",ok:"bg-green-400",degraded:"bg-amber-400",down:"bg-red-400"};async function h(o){const d=performance.now();return[await o(),Math.round(performance.now()-d)]}function S(){const[o,d]=m.useState([{name:"Licence fulfilment",detail:"Issues licence tokens after payment",state:"checking"},{name:"Package index (PyPI)",detail:"qector-decoder-v3 downloads",state:"checking"},{name:"Revocation list",detail:"Published list of revoked licences",state:"checking"}]),[l,g]=m.useState("");m.useEffect(()=>{if(window.__PRERENDER__)return;const t=new AbortController,r=(s,n)=>d(a=>a.map((i,f)=>f===s?{...i,...n}:i));return(async()=>{try{const[s,n]=await h(async()=>(await fetch("/stripe/health",{signal:t.signal,cache:"no-store"})).json()),a=s?.ok&&s?.key_matches_decoder!==!1&&s?.signing_key;r(0,{state:a?"ok":"degraded",note:`v${s?.version??"?"} · ${n} ms${s?.key_matches_decoder?" · signing key matches the decoder":""}`})}catch{t.signal.aborted||r(0,{state:"down",note:"No response. Payments are kept and fulfilled when it recovers."})}try{const[s,n]=await h(async()=>(await fetch("https://pypi.org/pypi/qector-decoder-v3/json",{signal:t.signal})).json()),a=s?.info?.version;r(1,{state:a?"ok":"degraded",note:`latest ${a??"?"} · ${n} ms`})}catch{t.signal.aborted||r(1,{state:"down",note:"PyPI did not respond from your network."})}try{const[s,n]=await h(async()=>(await fetch("/stripe/revoked.txt",{signal:t.signal,cache:"no-store"})).text()),a=s.split(` -`).filter(i=>i.trim()&&!i.startsWith("#")).length;r(2,{state:s.startsWith("#")?"ok":"degraded",note:`${a} revoked · ${n} ms`})}catch{t.signal.aborted||r(2,{state:"down"})}t.signal.aborted||g(new Date().toLocaleString())})(),()=>t.abort()},[]);const c=o.some(t=>t.state==="checking")?"checking":o.every(t=>t.state==="ok")?"ok":o.some(t=>t.state==="down")?"down":"degraded";return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Status · QECTOR",description:"Live status of QECTOR's licence fulfilment, package index and revocation list. Installed software never depends on these: licences verify offline."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Status"}),e.jsxs("p",{className:"inline-flex items-center gap-3 px-4 py-2 rounded-full border border-gridline bg-surface text-primary",role:"status","aria-live":"polite",children:[e.jsx("span",{className:`w-2.5 h-2.5 rounded-full ${x[c]}`,"aria-hidden":"true"}),c==="ok"?"All systems operational":c==="checking"?"Checking…":c==="down"?"Some systems unavailable":"Some systems degraded"]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-6",children:[e.jsx("ul",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl divide-y divide-slate-800/80",children:o.map(t=>e.jsxs("li",{className:"flex items-start justify-between gap-4 p-5",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-primary font-semibold",children:t.name}),e.jsx("p",{className:"text-secondary text-sm",children:t.detail}),t.note&&e.jsx("p",{className:"text-muted-foreground text-xs mt-1 font-mono",children:t.note})]}),e.jsxs("span",{className:"inline-flex items-center gap-2 text-sm text-secondary whitespace-nowrap",children:[e.jsx("span",{className:`w-2 h-2 rounded-full ${x[t.state]}`,"aria-hidden":"true"}),v[t.state]]})]},t.name))}),e.jsxs("p",{className:"text-muted-foreground text-xs text-center",children:[l?`Checked from your browser at ${l}.`:"Checking from your browser…"," Reload to check again."]}),e.jsxs("div",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Your installed software is not affected by outages"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Licence tokens are verified offline against a key inside the package, so decoding never waits on any service on this page. If fulfilment is down when you pay, Stripe keeps the payment event and the token is issued as soon as the service recovers. Current releases: decoder ",e.jsx("span",{className:"font-mono text-cyan-300",children:y}),", Claude plugin"," ",e.jsx("span",{className:"font-mono text-cyan-300",children:k.version}),". Problems? E-mail"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," or see ",e.jsx(u,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security"}),"."]})]})]})})]})}export{S as default}; diff --git a/assets/Status-DCgeKAmb.js b/assets/Status-DCgeKAmb.js deleted file mode 100644 index 30e65bff..00000000 --- a/assets/Status-DCgeKAmb.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as f,L as u}from"./index-c1PDYu0j.js";import{P as y,C as k}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const v={checking:"Checking…",ok:"Operational",degraded:"Degraded",down:"Unavailable"},x={checking:"bg-slate-500",ok:"bg-green-400",degraded:"bg-amber-400",down:"bg-red-400"};async function h(o){const d=performance.now();return[await o(),Math.round(performance.now()-d)]}function C(){const[o,d]=m.useState([{name:"Licence fulfilment",detail:"Issues licence tokens after payment",state:"checking"},{name:"Package index (PyPI)",detail:"qector-decoder-v3 downloads",state:"checking"},{name:"Revocation list",detail:"Published list of revoked licences",state:"checking"}]),[l,g]=m.useState("");m.useEffect(()=>{const t=new AbortController,r=(s,n)=>d(a=>a.map((i,p)=>p===s?{...i,...n}:i));return(async()=>{try{const[s,n]=await h(async()=>(await fetch("/stripe/health",{signal:t.signal,cache:"no-store"})).json()),a=s?.ok&&s?.key_matches_decoder!==!1&&s?.signing_key;r(0,{state:a?"ok":"degraded",note:`v${s?.version??"?"} · ${n} ms${s?.key_matches_decoder?" · signing key matches the decoder":""}`})}catch{t.signal.aborted||r(0,{state:"down",note:"No response. Payments are kept and fulfilled when it recovers."})}try{const[s,n]=await h(async()=>(await fetch("https://pypi.org/pypi/qector-decoder-v3/json",{signal:t.signal})).json()),a=s?.info?.version;r(1,{state:a?"ok":"degraded",note:`latest ${a??"?"} · ${n} ms`})}catch{t.signal.aborted||r(1,{state:"down",note:"PyPI did not respond from your network."})}try{const[s,n]=await h(async()=>(await fetch("/stripe/revoked.txt",{signal:t.signal,cache:"no-store"})).text()),a=s.split(` -`).filter(i=>i.trim()&&!i.startsWith("#")).length;r(2,{state:s.startsWith("#")?"ok":"degraded",note:`${a} revoked · ${n} ms`})}catch{t.signal.aborted||r(2,{state:"down"})}t.signal.aborted||g(new Date().toLocaleString())})(),()=>t.abort()},[]);const c=o.some(t=>t.state==="checking")?"checking":o.every(t=>t.state==="ok")?"ok":o.some(t=>t.state==="down")?"down":"degraded";return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"Status · QECTOR",description:"Live status of QECTOR's licence fulfilment, package index and revocation list. Installed software never depends on these: licences verify offline."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Status"}),e.jsxs("p",{className:"inline-flex items-center gap-3 px-4 py-2 rounded-full border border-gridline bg-surface text-primary",role:"status","aria-live":"polite",children:[e.jsx("span",{className:`w-2.5 h-2.5 rounded-full ${x[c]}`,"aria-hidden":"true"}),c==="ok"?"All systems operational":c==="checking"?"Checking…":c==="down"?"Some systems unavailable":"Some systems degraded"]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-6",children:[e.jsx("ul",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl divide-y divide-slate-800/80",children:o.map(t=>e.jsxs("li",{className:"flex items-start justify-between gap-4 p-5",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-primary font-semibold",children:t.name}),e.jsx("p",{className:"text-secondary text-sm",children:t.detail}),t.note&&e.jsx("p",{className:"text-muted-foreground text-xs mt-1 font-mono",children:t.note})]}),e.jsxs("span",{className:"inline-flex items-center gap-2 text-sm text-secondary whitespace-nowrap",children:[e.jsx("span",{className:`w-2 h-2 rounded-full ${x[t.state]}`,"aria-hidden":"true"}),v[t.state]]})]},t.name))}),e.jsxs("p",{className:"text-muted-foreground text-xs text-center",children:[l?`Checked from your browser at ${l}.`:"Checking from your browser…"," Reload to check again."]}),e.jsxs("div",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Your installed software is not affected by outages"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Licence tokens are verified offline against a key inside the package, so decoding never waits on any service on this page. If fulfilment is down when you pay, Stripe keeps the payment event and the token is issued as soon as the service recovers. Current releases: decoder ",e.jsx("span",{className:"font-mono text-cyan-300",children:y}),", Claude plugin"," ",e.jsx("span",{className:"font-mono text-cyan-300",children:k.version}),". Problems? E-mail"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," or see ",e.jsx(u,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security"}),"."]})]})]})})]})}export{C as default}; diff --git a/assets/Status-TwBfNKPu.js b/assets/Status-TwBfNKPu.js deleted file mode 100644 index f5166c71..00000000 --- a/assets/Status-TwBfNKPu.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as m,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,L as u}from"./index-CCmwjNGU.js";import{P as y,C as k}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const v={checking:"Checking…",ok:"Operational",degraded:"Degraded",down:"Unavailable"},x={checking:"bg-slate-500",ok:"bg-green-400",degraded:"bg-amber-400",down:"bg-red-400"};async function h(o){const d=performance.now();return[await o(),Math.round(performance.now()-d)]}function S(){const[o,d]=m.useState([{name:"Licence fulfilment",detail:"Issues licence tokens after payment",state:"checking"},{name:"Package index (PyPI)",detail:"qector-decoder-v3 downloads",state:"checking"},{name:"Revocation list",detail:"Published list of revoked licences",state:"checking"}]),[l,g]=m.useState("");m.useEffect(()=>{if(window.__PRERENDER__)return;const t=new AbortController,r=(s,n)=>d(a=>a.map((i,f)=>f===s?{...i,...n}:i));return(async()=>{try{const[s,n]=await h(async()=>(await fetch("/stripe/health",{signal:t.signal,cache:"no-store"})).json()),a=s?.ok&&s?.key_matches_decoder!==!1&&s?.signing_key;r(0,{state:a?"ok":"degraded",note:`v${s?.version??"?"} · ${n} ms${s?.key_matches_decoder?" · signing key matches the decoder":""}`})}catch{t.signal.aborted||r(0,{state:"down",note:"No response. Payments are kept and fulfilled when it recovers."})}try{const[s,n]=await h(async()=>(await fetch("https://pypi.org/pypi/qector-decoder-v3/json",{signal:t.signal})).json()),a=s?.info?.version;r(1,{state:a?"ok":"degraded",note:`latest ${a??"?"} · ${n} ms`})}catch{t.signal.aborted||r(1,{state:"down",note:"PyPI did not respond from your network."})}try{const[s,n]=await h(async()=>(await fetch("/stripe/revoked.txt",{signal:t.signal,cache:"no-store"})).text()),a=s.split(` -`).filter(i=>i.trim()&&!i.startsWith("#")).length;r(2,{state:s.startsWith("#")?"ok":"degraded",note:`${a} revoked · ${n} ms`})}catch{t.signal.aborted||r(2,{state:"down"})}t.signal.aborted||g(new Date().toLocaleString())})(),()=>t.abort()},[]);const c=o.some(t=>t.state==="checking")?"checking":o.every(t=>t.state==="ok")?"ok":o.some(t=>t.state==="down")?"down":"degraded";return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"Status · QECTOR",description:"Live status of QECTOR's licence fulfilment, package index and revocation list. Installed software never depends on these: licences verify offline."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Status"}),e.jsxs("p",{className:"inline-flex items-center gap-3 px-4 py-2 rounded-full border border-gridline bg-surface text-primary",role:"status","aria-live":"polite",children:[e.jsx("span",{className:`w-2.5 h-2.5 rounded-full ${x[c]}`,"aria-hidden":"true"}),c==="ok"?"All systems operational":c==="checking"?"Checking…":c==="down"?"Some systems unavailable":"Some systems degraded"]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-6",children:[e.jsx("ul",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl divide-y divide-slate-800/80",children:o.map(t=>e.jsxs("li",{className:"flex items-start justify-between gap-4 p-5",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-primary font-semibold",children:t.name}),e.jsx("p",{className:"text-secondary text-sm",children:t.detail}),t.note&&e.jsx("p",{className:"text-muted-foreground text-xs mt-1 font-mono",children:t.note})]}),e.jsxs("span",{className:"inline-flex items-center gap-2 text-sm text-secondary whitespace-nowrap",children:[e.jsx("span",{className:`w-2 h-2 rounded-full ${x[t.state]}`,"aria-hidden":"true"}),v[t.state]]})]},t.name))}),e.jsxs("p",{className:"text-muted-foreground text-xs text-center",children:[l?`Checked from your browser at ${l}.`:"Checking from your browser…"," Reload to check again."]}),e.jsxs("div",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6",children:[e.jsx("h2",{className:"text-xl font-bold mb-3",children:"Your installed software is not affected by outages"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Licence tokens are verified offline against a key inside the package, so decoding never waits on any service on this page. If fulfilment is down when you pay, Stripe keeps the payment event and the token is issued as soon as the service recovers. Current releases: decoder ",e.jsx("span",{className:"font-mono text-cyan-300",children:y}),", Claude plugin"," ",e.jsx("span",{className:"font-mono text-cyan-300",children:k.version}),". Problems? E-mail"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})," or see ",e.jsx(u,{to:"/security",className:"text-cyan-300 hover:underline",children:"Security"}),"."]})]})]})})]})}export{S as default}; diff --git a/assets/Success-91MT9Ucy.js b/assets/Success-91MT9Ucy.js deleted file mode 100644 index a56aba4f..00000000 --- a/assets/Success-91MT9Ucy.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{g as r,S as i,L as t}from"./index-PdoH5kLF.js";import{N as l}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function h(){const[n]=r(),a=n.get("session_id")??"",s=/^cs_(live|test)_[A-Za-z0-9]{10,}$/.test(a)?a:"";return s?e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(l,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),s&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:s})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(t,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]}):e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Your QECTOR licence · QECTOR",description:"Where to find your QECTOR licence token, manage your subscription or get help.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-2xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Licence help"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Looking for your licence?"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"This page confirms a purchase right after Stripe checkout. If you bought a plan, your licence token is in the e-mail you used at checkout, usually within 10 minutes (check spam)."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(t,{to:"/pricing",className:"btn-gold",children:"View plans"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",className:"btn-cyan",target:"_blank",rel:"noopener noreferrer",children:"Manage subscription"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"E-mail support"})]})]})]})]})}export{h as default}; diff --git a/assets/Success-B1zul-Er.js b/assets/Success-B1zul-Er.js deleted file mode 100644 index 7da57110..00000000 --- a/assets/Success-B1zul-Er.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{g as r,S as i,L as t}from"./index-DayaklK-.js";import{N as l}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function h(){const[n]=r(),a=n.get("session_id")??"",s=/^cs_(live|test)_[A-Za-z0-9]{10,}$/.test(a)?a:"";return s?e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(l,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),s&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:s})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(t,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]}):e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Your QECTOR licence · QECTOR",description:"Where to find your QECTOR licence token, manage your subscription or get help.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-2xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Licence help"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Looking for your licence?"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"This page confirms a purchase right after Stripe checkout. If you bought a plan, your licence token is in the e-mail you used at checkout, usually within 10 minutes (check spam)."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(t,{to:"/pricing",className:"btn-gold",children:"View plans"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",className:"btn-cyan",target:"_blank",rel:"noopener noreferrer",children:"Manage subscription"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"E-mail support"})]})]})]})]})}export{h as default}; diff --git a/assets/Success-B8_Hgbq9.js b/assets/Success-B8_Hgbq9.js deleted file mode 100644 index af0ef0e6..00000000 --- a/assets/Success-B8_Hgbq9.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-Bh9DBCb3.js";import{N as r}from"./NeuralReveal-D-EQoOl2.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-BHRL8Fta.js b/assets/Success-BHRL8Fta.js deleted file mode 100644 index 4db27373..00000000 --- a/assets/Success-BHRL8Fta.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-_BpMZhV3.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[i]=c(),s=i.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'})}),e.jsxs("span",{className:"block mt-2",children:["This should print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-BhHxkaUv.js b/assets/Success-BhHxkaUv.js deleted file mode 100644 index 333eac41..00000000 --- a/assets/Success-BhHxkaUv.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{g as r,S as i,L as t}from"./index-CCmwjNGU.js";import{N as l}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function h(){const[n]=r(),a=n.get("session_id")??"",s=/^cs_(live|test)_[A-Za-z0-9]{10,}$/.test(a)?a:"";return s?e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(l,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),s&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:s})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(t,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]}):e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Your QECTOR licence · QECTOR",description:"Where to find your QECTOR licence token, manage your subscription or get help.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-2xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Licence help"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Looking for your licence?"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"This page confirms a purchase right after Stripe checkout. If you bought a plan, your licence token is in the e-mail you used at checkout, usually within 10 minutes (check spam)."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(t,{to:"/pricing",className:"btn-gold",children:"View plans"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",className:"btn-cyan",target:"_blank",rel:"noopener noreferrer",children:"Manage subscription"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"E-mail support"})]})]})]})]})}export{h as default}; diff --git a/assets/Success-Birxz6hb.js b/assets/Success-Birxz6hb.js deleted file mode 100644 index 7a7b571f..00000000 --- a/assets/Success-Birxz6hb.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-iVST85F-.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[i]=c(),s=i.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'})}),e.jsxs("span",{className:"block mt-2",children:["This should print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-Bv54wCpg.js b/assets/Success-Bv54wCpg.js deleted file mode 100644 index 86cbab85..00000000 --- a/assets/Success-Bv54wCpg.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-BN-vOeL2.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-C-DQgAO-.js b/assets/Success-C-DQgAO-.js deleted file mode 100644 index 545d2535..00000000 --- a/assets/Success-C-DQgAO-.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-abfjMTlQ.js";import{N as r}from"./NeuralReveal-D-EQoOl2.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-CPXIGHaJ.js b/assets/Success-CPXIGHaJ.js deleted file mode 100644 index 87023bb8..00000000 --- a/assets/Success-CPXIGHaJ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-CpdATiEY.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-Ceeso_PI.js b/assets/Success-Ceeso_PI.js deleted file mode 100644 index 29848f55..00000000 --- a/assets/Success-Ceeso_PI.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{g as r,S as i,L as t}from"./index-c1PDYu0j.js";import{N as l}from"./NeuralReveal-uYarhiMA.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";function h(){const[n]=r(),a=n.get("session_id")??"",s=/^cs_(live|test)_[A-Za-z0-9]{10,}$/.test(a)?a:"";return s?e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(l,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),s&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:s})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(t,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]}):e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Your QECTOR licence · QECTOR",description:"Where to find your QECTOR licence token, manage your subscription or get help.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-2xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Licence help"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Looking for your licence?"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"This page confirms a purchase right after Stripe checkout. If you bought a plan, your licence token is in the e-mail you used at checkout, usually within 10 minutes (check spam)."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(t,{to:"/pricing",className:"btn-gold",children:"View plans"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",className:"btn-cyan",target:"_blank",rel:"noopener noreferrer",children:"Manage subscription"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"E-mail support"})]})]})]})]})}export{h as default}; diff --git a/assets/Success-CysFhypv.js b/assets/Success-CysFhypv.js deleted file mode 100644 index c72f012f..00000000 --- a/assets/Success-CysFhypv.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-B9kEGiWi.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[i]=c(),s=i.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'})}),e.jsxs("span",{className:"block mt-2",children:["This should print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-D4idHMxj.js b/assets/Success-D4idHMxj.js deleted file mode 100644 index c6086750..00000000 --- a/assets/Success-D4idHMxj.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-DRAXObZB.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-DoyGmHi-.js b/assets/Success-DoyGmHi-.js deleted file mode 100644 index 19df2a84..00000000 --- a/assets/Success-DoyGmHi-.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-DkYdPRY7.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-DyK9JNg3.js b/assets/Success-DyK9JNg3.js deleted file mode 100644 index 15641a76..00000000 --- a/assets/Success-DyK9JNg3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as n}from"./index-BcbVjARk.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[i]=c(),s=i.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(n,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:'python -c "import qector_decoder_v3 as q; print(q._is_license_active())"'})}),e.jsxs("span",{className:"block mt-2",children:["This should print ",e.jsx("code",{className:"text-cyan-300",children:"True"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-DzdWYiHw.js b/assets/Success-DzdWYiHw.js deleted file mode 100644 index 8d519559..00000000 --- a/assets/Success-DzdWYiHw.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-CxWP17m6.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-Gvo6K55X.js b/assets/Success-Gvo6K55X.js deleted file mode 100644 index 97a3d8d5..00000000 --- a/assets/Success-Gvo6K55X.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-BUYYSLdX.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-HcGQP6Ks.js b/assets/Success-HcGQP6Ks.js deleted file mode 100644 index 5504d0f7..00000000 --- a/assets/Success-HcGQP6Ks.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{g as r,S as i,L as t}from"./index-CcwlvHYJ.js";import{N as l}from"./NeuralReveal-Bsl9IGCr.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function h(){const[n]=r(),a=n.get("session_id")??"",s=/^cs_(live|test)_[A-Za-z0-9]{10,}$/.test(a)?a:"";return s?e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(l,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),s&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:s})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both licence environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(t,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(t,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]}):e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Your QECTOR licence · QECTOR",description:"Where to find your QECTOR licence token, manage your subscription or get help.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-2xl mx-auto",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Licence help"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:"Looking for your licence?"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"This page confirms a purchase right after Stripe checkout. If you bought a plan, your licence token is in the e-mail you used at checkout, usually within 10 minutes (check spam)."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsx(t,{to:"/pricing",className:"btn-gold",children:"View plans"}),e.jsx("a",{href:"https://billing.stripe.com/p/login/7sY9AVdwlgoyfse9bYeUU00",className:"btn-cyan",target:"_blank",rel:"noopener noreferrer",children:"Manage subscription"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"E-mail support"})]})]})]})]})}export{h as default}; diff --git a/assets/Success-S_Pp6vUv.js b/assets/Success-S_Pp6vUv.js deleted file mode 100644 index c31fd16e..00000000 --- a/assets/Success-S_Pp6vUv.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-CqAA-ZXu.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"Pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"Enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"Community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-VMONhcQ1.js b/assets/Success-VMONhcQ1.js deleted file mode 100644 index 4d655799..00000000 --- a/assets/Success-VMONhcQ1.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-WV1aysjN.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/Success-oU7-xJRu.js b/assets/Success-oU7-xJRu.js deleted file mode 100644 index b93113d4..00000000 --- a/assets/Success-oU7-xJRu.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i}from"./index-DlmjLVYe.js";import{N as r}from"./NeuralReveal-BflyZYSb.js";import{D as c,L as a}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";function u(){const[n]=c(),s=n.get("session_id")??"",t=s&&s!=="{CHECKOUT_SESSION_ID}"?s:"";return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Purchase complete · QECTOR",description:"Your QECTOR Decoder v3 license is being issued. Activation instructions and your Stripe reference.",noindex:!0}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"Payment received"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(r,{text:"Thank you",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8",children:["Stripe has confirmed your payment. Your"," ",e.jsx("span",{className:"text-primary font-semibold",children:"Ed25519-signed license token"})," ","is issued automatically and sent to the email address you used at checkout."]}),t&&e.jsxs("div",{className:"max-w-2xl mx-auto p-4 bg-void rounded-xl text-left",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-xs uppercase tracking-wider mb-2",children:"Stripe reference"}),e.jsx("code",{className:"text-secondary text-sm break-all",children:t})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"What happens next"}),e.jsxs("ol",{className:"space-y-4 text-secondary text-sm leading-relaxed",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"1. Check your email."})," The license token arrives within a few minutes. If nothing has appeared after 15 minutes, check spam, then contact us with the reference above."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"2. Activate it."})," Set the token as both v1.0.0 license environment variables:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsxs("code",{className:"text-cyan-300 text-sm break-all",children:['export QECTOR_LICENSE=""',e.jsx("br",{}),'export QECTOR_LICENSE_KEY=""']})}),e.jsxs("span",{className:"block mt-2",children:["Windows PowerShell:"," ",e.jsx("code",{className:"text-cyan-300",children:'$env:QECTOR_LICENSE = ""; $env:QECTOR_LICENSE_KEY = ""'})]})]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-primary",children:"3. Verify."})," Confirm the signature validates: this makes no network call:",e.jsx("div",{className:"mt-2 p-4 bg-void rounded-xl",children:e.jsx("code",{className:"text-cyan-300 text-sm break-all",children:`python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"`})}),e.jsxs("span",{className:"block mt-2",children:["This should print your paid tier (for example ",e.jsx("code",{className:"text-cyan-300",children:"pro"})," or ",e.jsx("code",{className:"text-cyan-300",children:"enterprise"}),"), not ",e.jsx("code",{className:"text-cyan-300",children:"community"}),"."]})]})]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Keep the token safe"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Your token is tied to your checkout email and verifies offline against a public key embedded in the package. There is no license server and no phone-home, so it keeps working on air-gapped machines and inside CI."})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx(a,{to:"/installer",className:"btn-cyan",children:"Install QECTOR"}),e.jsx(a,{to:"/docs",className:"btn-outline",children:"Read the docs"}),e.jsx("a",{href:"mailto:admin@qector.store",className:"btn-outline",children:"Contact support"})]})]})})]})}export{u as default}; diff --git a/assets/TechnicalReference-0kYOhnhq.js b/assets/TechnicalReference-0kYOhnhq.js deleted file mode 100644 index d4ced2ee..00000000 --- a/assets/TechnicalReference-0kYOhnhq.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-DRAXObZB.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-2CV7Djeo.js b/assets/TechnicalReference-2CV7Djeo.js deleted file mode 100644 index 07a4e668..00000000 --- a/assets/TechnicalReference-2CV7Djeo.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-abfjMTlQ.js";import{N as h}from"./NeuralReveal-D-EQoOl2.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-6OShAOCc.js b/assets/TechnicalReference-6OShAOCc.js deleted file mode 100644 index dfe4b8a8..00000000 --- a/assets/TechnicalReference-6OShAOCc.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,C as _}from"./index-CCmwjNGU.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{g as p}from"./vendor-gsap-a3sj5zmn.js";import{q as f,h as y,r as b,s as x,T as N,B as k}from"./vendor-ui-B8TlNU4J.js";const v="1.0.1",w="2026-11-06",q=JSON.parse(`[{"name":"AmbiguityClusterDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.05, ambig_threshold=0.5, max_cluster_size=12)","summary":"C1-02: BP + ambiguity-clustered exact decoding for qLDPC codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"AutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, config: 'BackendConfig | None' = None)","summary":"Workload-aware, self-debugging decoder that routes to CUDA / OpenCL / Rayon / CPU / Fallback.","methods":[{"name":"auto_select","signature":"(checks, n_qubits, batch_size=1)"},{"name":"available_backends","signature":"(self) -> 'list[str]'"},{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"calibrate","signature":"(self, sizes=(64, 256, 1024, 4096, 16384), repeats: 'int' = 3, seed: 'int' = 0)"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"diagnostics","signature":"(self) -> 'dict'"},{"name":"reset_backend_health","signature":"(self) -> 'None'"},{"name":"select","signature":"(self, batch_size: 'int') -> 'str'"}]},{"name":"AutoRouter","kind":"class","signature":"(*, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, error_rate: 'float' = 0.05, code_family: 'Any' = None, use_native_auto: 'bool' = True) -> 'None'","summary":"Construct, cache, and dispatch the policy-selected decoder for a problem.","methods":[{"name":"decode","signature":"(self, checks_or_H: 'Any', syndromes: 'Any', **ctx: 'Any') -> 'np.ndarray'"},{"name":"explain","signature":"(self, checks_or_H: 'Any' = None, syndromes: 'Any' = None, **ctx: 'Any') -> 'dict[str, Any]'"}]},{"name":"BPOSDDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.1, bp_method=None, osd_order=None)","summary":"Belief Propagation + Ordered Statistics Decoding.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"bp_decode","signature":"(self, syndrome, max_iterations=20)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"Backend","kind":"class","signature":"()","summary":"Backend identifiers & Fallback Tiers.","methods":[]},{"name":"BackendConfig","kind":"class","signature":"(rayon_threshold: 'int' = 8, gpu_threshold: 'int' = 4096, allow_gpu: 'bool' = True, prefer: 'str' = 'cuda', force: 'str | None' = None, enable_auto_debug: 'bool' = True) -> None","summary":"Tunable thresholds and policy for :class:\`AutoDecoder\`.","methods":[]},{"name":"BatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Parallel batch decoder using Rayon (Rust data parallelism).","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"parallel_batch_decode","signature":"(self, syndromes)"}]},{"name":"BatchedBpDecoder","kind":"class","signature":"(H: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True) -> 'None'","summary":"Batched belief-propagation decoder over a fixed GF(2) check matrix \`\`H\`\`.","methods":[{"name":"decode_batch","signature":"(self, syndromes: 'Any', *, return_llr: 'bool' = False, early_stop: 'bool' = True) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'"}]},{"name":"BeliefMatching","kind":"class","signature":"(matrices: '_Matrices', max_iter: 'int' = 30, bp_shortcut: 'bool' = False)","summary":"Belief-propagation + minimum-weight perfect matching decoder.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_numpy_h","signature":"(H, error_rate: 'float' = 0.05, max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_stim_circuit","signature":"(circuit, max_iter: 'int' = 20) -> 'BeliefMatching'"}]},{"name":"BenchmarkSuite","kind":"class","signature":"(check_to_qubits, n_qubits=None, n_samples=10000, seed=42)","summary":"Production benchmark suite. Wraps Rust-native benchmarking.","methods":[{"name":"run","signature":"(self)"},{"name":"save","signature":"(self, path, results)"}]},{"name":"BlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Minimum-Weight Perfect Matching (MWPM) decoder via Edmonds' Blossom algorithm.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_weighted","signature":"(self, syndromes, weights)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, weights)"}]},{"name":"BpOsdDecoder","kind":"class","signature":"(H: 'Any', error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, ms_scale: 'float' = 1.0, osd_order: 'int' = 0, bp_method: 'str' = 'sum_product', use_gpu: 'Any' = None, max_latency_ms: 'float | None' = None, damping: 'float' = 0.0, osd_lambda: 'Any' = None)","summary":"BP + ordered-statistics decoder for general GF(2) check matrices.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix: 'Any' = None) -> 'np.ndarray'"}]},{"name":"CPUBatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"SIMD-friendly CPU batch decoder with pooled buffers and SoA transposition.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_par","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"CUDABatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"is_available","signature":"()"},{"name":"reset","signature":"(self, /)"}]},{"name":"CUDABpOsdDecoder","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"}]},{"name":"ColourCodeDecoder","kind":"class","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0, method: 'str' = 'bposd')","summary":"Colour-code decoder: BP-OSD over the undecomposed hypergraph DEM.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"},{"name":"from_stim_circuit","signature":"(circuit: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"}]},{"name":"DecodeResult","kind":"class","signature":"(correction: 'np.ndarray', syndrome: 'np.ndarray', n_qubits: 'int', n_checks: 'int', weight: 'float | None' = None, logical_flips: 'np.ndarray | None' = None, decode_seconds: 'float | None' = None, backend: 'str' = 'cpu', fallback: 'bool' = False, fallback_reason: 'str' = '', syndrome_valid: 'bool | None' = None, metadata: 'dict' = ) -> None","summary":"Result of decoding a single syndrome, with diagnostics and metadata.","methods":[{"name":"as_uint8","signature":"(self) -> 'np.ndarray'"},{"name":"explain","signature":"(self) -> 'str'"},{"name":"to_dict","signature":"(self) -> 'dict'"},{"name":"to_json","signature":"(self, indent: 'int' = 2) -> 'str'"},{"name":"verify","signature":"(self, H: 'np.ndarray') -> 'bool'"}]},{"name":"DecoderName","kind":"class","signature":"()","summary":"String identifiers for the routable decoders.","methods":[]},{"name":"DecoderPool","kind":"class","signature":"(check_to_qubits=None, n_qubits=None, decoder_type: 'str' = 'fast_union_find', n_workers: 'int | None' = None, num_threads: 'int | None' = None)","summary":"Multi-process decoder pool for parallel syndrome decoding.","methods":[{"name":"close","signature":"(self)"},{"name":"decode","signature":"(self, syndromes) -> 'np.ndarray'"}]},{"name":"DetectorGraph","kind":"class","signature":"(check_to_qubits, syndrome, check_positions=None, check_types=None, base_weights=None, n_qubits=None)","summary":"Detector graph used by the GNN and hybrid decoder paths.","methods":[{"name":"update_syndrome","signature":"(self, syndrome)"}]},{"name":"FastUnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Union-Find with a zero-allocation hot path, reusable buffers and a C ABI.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"GNNBeliefMatcher","kind":"class","signature":"(check_to_qubits, n_qubits=None, *, gnn=None, hidden_size: 'int' = 32, n_layers: 'int' = 2, train_samples: 'int' = 0, error_rate: 'float' = 0.05, train_epochs: 'int' = 3, seed=None)","summary":"End-to-end GNN-guided minimum-weight perfect matching decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"GNNPredecoder","kind":"class","signature":"(node_feat_dim=None, edge_feat_dim=None, hidden_size=16, n_layers=2)","summary":"Graph Neural Network Pre-Decoder for dynamic edge weight prediction.","methods":[{"name":"forward","signature":"(self, graph)"},{"name":"load_weights","signature":"(self, path)"},{"name":"new_standard","signature":"(hidden_size=16, n_layers=2)"},{"name":"predict_with_node_probs","signature":"(self, graph)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, graphs, targets, n_epochs)"}]},{"name":"GNNTrainer","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate=0.1)","summary":"End-to-end GNN training pipeline with Blossom teacher model.","methods":[{"name":"generate_dataset","signature":"(self, n_samples)"},{"name":"train","signature":"(self, gnn, n_samples, n_epochs)"},{"name":"train_bp","signature":"(self, gnn, n_samples, n_epochs, max_bp_iter=20)"}]},{"name":"HardwareProfile","kind":"class","signature":"(cuda_rust: 'bool' = False, gpu: 'bool' = False) -> None","summary":"Resolved view of the GPU capability the policy should assume.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, bool]'"},{"name":"detect","signature":"() -> 'HardwareProfile'"}]},{"name":"HybridCascadeDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None, max_accept_weight=None, escalation=None, error_rate=None)","summary":"Hybrid cascading decoder: Union-Find pre-filter + Blossom/BP-OSD escalation.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_timed","signature":"(self, syndromes, max_latency_ms=10.0)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"HybridDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, check_positions=None, check_types=None, base_weights=None, gnn_hidden_size=64, gnn_n_layers=3)","summary":"GNN Pre-Decoder + SparseBlossom hybrid decoder.","methods":[{"name":"batch_decode_hybrid","signature":"(self, syndromes)"},{"name":"batch_decode_standard","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_heuristic","signature":"(self, syndrome)"},{"name":"decode_hybrid","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_standard","signature":"(self, syndrome)"},{"name":"load_weights","signature":"(self, path)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, n_samples, n_epochs, error_rate=0.1)"},{"name":"train_bp","signature":"(self, n_samples, n_epochs, error_rate=0.1, max_bp_iter=20)"}]},{"name":"LERBenchmark","kind":"class","signature":"()","summary":"Logical Error Rate benchmark suite.","methods":[{"name":"run_all","signature":"(self)"}]},{"name":"LookupTableDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Exact lookup-table decoder with UnionFind fallback.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"build_table","signature":"(self, max_entries)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"MAX_WORKERS","kind":"constant","signature":"","summary":"","methods":[]},{"name":"Matching","kind":"class","signature":"(H: 'Any' = None, weights: 'Any' = None, faults_matrix: 'Any' = None)","summary":"Minimum-weight perfect-matching decoder with a PyMatching-style API.","methods":[{"name":"add_boundary_edge","signature":"(self, node: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"add_edge","signature":"(self, node1: 'int', node2: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"check_matrix","signature":"(self) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots: 'Any') -> 'np.ndarray'"},{"name":"decode_to_edges_array","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"edges","signature":"(self) -> 'list[tuple[int | None, int | None, dict]]'"},{"name":"from_check_matrix","signature":"(H: 'Any', weights: 'Any' = None, faults_matrix: 'Any' = None, **_: 'Any') -> 'Matching'"},{"name":"from_detector_error_model","signature":"(dem: 'Any') -> 'Matching'"},{"name":"from_stim_dem","signature":"(dem: 'Any') -> 'Matching'"}]},{"name":"NativeAutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, distance=5, noise_rate=0.01, batch_size=1, is_qldpc=False)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"batch_decode_strided","signature":"(self, /, syndromes, stride=None, require_alignment=False)"},{"name":"decode","signature":"(self, /, syndrome)"}]},{"name":"NeuralPredecoder","kind":"class","signature":"(n_input, n_output, n_hidden1=None, n_hidden2=None)","summary":"Lightweight MLP pre-decoder with Xavier initialization and SGD training.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"predict","signature":"(self, syndrome)"},{"name":"train","signature":"(self, syndromes, corrections, n_epochs, learning_rate=0.01)"}]},{"name":"OpenCLBatchDecoder","kind":"class","signature":"(*a, **k)","summary":"OpenCL batch decoder - requires source build with --features opencl.","methods":[{"name":"is_available","signature":"()"}]},{"name":"PredecodedDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, backend: 'str' = 'blossom')","summary":"Local-matching predecoder + exact/fast residual decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"Recommendation","kind":"class","signature":"(decoder: 'str', reason: 'str', family: 'str', priority: 'str', batch_size: 'int', hardware: 'dict[str, bool]', gpu_batched_bp: 'bool' = False, forced: 'bool' = False, graphlike: 'bool | None' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None) -> None","summary":"A decoder choice plus the reasoning and inputs that produced it.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"}]},{"name":"SlidingWindowDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, window_size=10, decay_factor=0.8, check_types=None, p_data=None, p_meas=None)","summary":"Sliding-window decoder with exponential decay weighting or fault-tolerant space-time decoding.","methods":[{"name":"decode","signature":"(self, syndrome=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"SpaceTimeDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_rounds, p_data, p_meas, n_qubits=None)","summary":"PyO3 wrapper for [\`SpaceTimeDecoder\`]: fault-tolerant temporal decoding via XOR-of-consecutive-rounds detectors matched on a 3D (space x time) graph, as opposed to [\`crate::sliding_window::PySlidingWindowDecoder\`] /…","methods":[{"name":"decode_history","signature":"(self, /)"},{"name":"reset","signature":"(self, /)"},{"name":"update","signature":"(self, /, round_syndrome)"}]},{"name":"SparseBlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Region-growing Sparse Blossom decoder with RadixHeap.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_with_weights","signature":"(self, syndrome, weights)"}]},{"name":"StreamingDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, history_size=10, check_types=None, p_data=None, p_meas=None)","summary":"Streaming decoder that accumulates syndromes over multiple rounds.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_rounds","signature":"(self, rounds)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"StreamingResult","kind":"class","signature":"(corrections: 'np.ndarray', syndromes: 'np.ndarray', telemetry: 'StreamingTelemetry', logical_flips: 'np.ndarray | None' = None) -> None","summary":"Outcome of a full streaming decode.","methods":[{"name":"is_valid","signature":"(self, H: 'Any', *, prefer_gpu: 'bool' = True) -> 'bool'"}]},{"name":"StreamingSession","kind":"class","signature":"(code_or_checks: 'Any', n_qubits: 'int | None' = None, *, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'None'","summary":"Incremental multi-round decode with a sliding commit buffer.","methods":[{"name":"committed_corrections","signature":"(self) -> 'np.ndarray'"},{"name":"committed_syndromes","signature":"(self) -> 'np.ndarray'"},{"name":"flush","signature":"(self) -> 'list[np.ndarray]'"},{"name":"push_round","signature":"(self, syndrome: 'Any') -> 'list[np.ndarray]'"},{"name":"reset","signature":"(self) -> 'None'"},{"name":"run","signature":"(self, syndrome_rounds: 'Any') -> 'StreamingResult'"}]},{"name":"StreamingTelemetry","kind":"class","signature":"(rounds: 'int' = 0, windows: 'int' = 0, committed: 'int' = 0, decode_seconds: 'float' = 0.0, per_window_seconds: 'list[float]' = , gpu: 'dict[str, int]' = , backend: 'dict[str, Any]' = , rounds_valid: 'int | None' = None) -> None","summary":"Real, measured counters for a streaming decode run.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"},{"name":"record_window","signature":"(self, seconds: 'float', rounds: 'int' = 1) -> 'None'"}]},{"name":"TwoStageDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_qubits=None, x_decoder='blossom', z_decoder='blossom')","summary":"C1-03: Correlated two-stage matching for CSS codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"UnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Production-ready Union-Find quantum error correction decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"Workbench","kind":"class","signature":"() -> 'None'","summary":"Controller for the QECTOR Workbench (load → benchmark → export).","methods":[{"name":"cancel_job","signature":"(self, job_id: 'str') -> 'str'"},{"name":"detect_backends","signature":"(self) -> 'dict'"},{"name":"environment_snapshot","signature":"(self) -> 'dict'"},{"name":"export_csv","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_json","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_pdf","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"get_job","signature":"(self, job_id: 'str') -> 'dict'"},{"name":"get_license_info","signature":"(self) -> 'dict'"},{"name":"job_artifact","signature":"(self, job_id: 'str') -> 'dict | None'"},{"name":"list_jobs","signature":"(self) -> 'list[dict]'"},{"name":"load_dem","signature":"(self, source: 'Any') -> 'dict'"},{"name":"load_stim","signature":"(self, source: 'Any') -> 'dict'"},{"name":"run_benchmark","signature":"(self, spec: 'dict', job: 'Job | None' = None) -> 'dict'"},{"name":"set_license_key","signature":"(self, key: 'str') -> 'None'"},{"name":"shutdown","signature":"(self) -> 'None'"},{"name":"submit_job","signature":"(self, spec: 'dict') -> 'str'"},{"name":"wait","signature":"(self, job_id: 'str', timeout: 'float | None' = None) -> 'dict'"}]},{"name":"backend","kind":"module","signature":"","summary":"qector_decoder_v3.backend - Workload-Aware AutoDecoder with Self-Auto-Debug & Multi-Tier Fallback.","methods":[]},{"name":"batched_bp_decode","kind":"function","signature":"(H: 'Any', syndromes: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True, early_stop: 'bool' = True, return_llr: 'bool' = False) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'","summary":"Decode a stack of syndromes with batched belief propagation.","methods":[]},{"name":"belief_matching","kind":"module","signature":"","summary":"qector_decoder_v3.belief_matching - belief-propagation + MWPM (belief-matching).","methods":[]},{"name":"benchmarking","kind":"module","signature":"","summary":"qector_decoder_v3.benchmarking - reproducible, statistically-honest benchmarks.","methods":[]},{"name":"bp_cupy","kind":"module","signature":"","summary":"qector_decoder_v3.bp_cupy - batched, GPU-resident belief propagation.","methods":[]},{"name":"bposd","kind":"module","signature":"","summary":"qector_decoder_v3.bposd - belief propagation + ordered-statistics decoding.","methods":[]},{"name":"changelog","kind":"function","signature":"() -> str","summary":"Return a human-readable changelog string for the loaded package.","methods":[]},{"name":"check_to_edges","kind":"function","signature":"(check_to_qubits)","summary":"Convert check_to_qubits to edge list.","methods":[]},{"name":"clear_decoder_cache","kind":"function","signature":"()","summary":"Clear the in-memory decoder and decoder pool LRU caches.","methods":[]},{"name":"codes","kind":"module","signature":"","summary":"qector_decoder_v3.codes - Code-family helpers.","methods":[]},{"name":"colour_code","kind":"module","signature":"","summary":"C1-04: Colour-code decoder.","methods":[]},{"name":"compute_detector_differences","kind":"function","signature":"(history)","summary":"Computes XOR detector differences across consecutive syndrome rounds: detector_t = raw_t ^ raw_{t-1}.","methods":[]},{"name":"cuda_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"decode_mmap","kind":"function","signature":"(syndrome_path: 'str', output_path: 'str', check_to_qubits, n_qubits: 'int', decoder_type: 'str' = 'cpu_batch', batch_size: 'int' = 65536, n_shots: 'int | None' = None, dtype: '_np.dtype' = dtype('uint8'), verbose: 'bool' = False)","summary":"Out-of-core batch decoding via memory-mapped arrays.","methods":[]},{"name":"decode_with_diagnostics","kind":"function","signature":"(code: 'Any', syndrome: 'Sequence[int]', kind: 'str' = 'blossom', decoder: 'Any' = None, logicals: 'np.ndarray | None' = None) -> 'DecodeResult'","summary":"Decode one syndrome and return a fully-populated :class:\`DecodeResult\`.","methods":[]},{"name":"decode_with_gnn","kind":"function","signature":"(check_to_qubits, n_qubits, syndrome, **kwargs) -> 'np.ndarray'","summary":"One-shot GNN-guided MWPM decode (see :class:\`GNNBeliefMatcher\`).","methods":[]},{"name":"decoder_cache","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_cache - LRU-decoder cache and factory functions.","methods":[]},{"name":"decoder_pool","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_pool - Multi-process decoder pool.","methods":[]},{"name":"dem","kind":"module","signature":"","summary":"qector_decoder_v3.dem - Stim Detector Error Model (DEM) loader.","methods":[]},{"name":"detect_hardware","kind":"function","signature":"() -> 'HardwareProfile'","summary":"Return the live :class:\`HardwareProfile\` (alias for \`\`HardwareProfile.detect\`\`).","methods":[]},{"name":"enforce_distance_cap","kind":"function","signature":"(distance) -> None","summary":"Enforce that *distance* does not exceed the active tier's cap.","methods":[]},{"name":"enforce_unlocked","kind":"function","signature":"() -> None","summary":"Hard-gate decode path when no valid license is active (QECTOR_ENFORCE=1).","methods":[]},{"name":"estimate_distance","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Python wrapper for estimate_distance.","methods":[]},{"name":"flush_usage","kind":"function","signature":"(customer_id: 'str | None' = None, api_key: 'str | None' = None) -> dict","summary":"Flush accumulated decode shots to the Stripe Billing Meter Events API.","methods":[]},{"name":"from_circuit","kind":"function","signature":"(circuit, decoder_type='blossom', **kwargs)","summary":"Build a decoder from a Stim circuit in one call.","methods":[]},{"name":"generate_biconnected_qldpc_checks","kind":"function","signature":"(n_qubits, degree)","summary":"Generate a bipolar / biconnected qLDPC Tanner graph parity check matrix.","methods":[]},{"name":"generate_parity_check_matrix","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Return the binary parity-check matrix \`\`H\`\` for *check_to_qubits*.","methods":[]},{"name":"generate_repetition_code_checks","kind":"function","signature":"(distance)","summary":"Generate a 1D repetition/chain code for testing.","methods":[]},{"name":"generate_ring_code_checks","kind":"function","signature":"(distance)","summary":"Generate a simple 1D ring code for testing.","methods":[]},{"name":"generate_space_time_surface_code_checks","kind":"function","signature":"(distance, rounds)","summary":"Generate 3D space-time surface code checks across multiple rounds.","methods":[]},{"name":"generate_surface_code_checks","kind":"function","signature":"(distance)","summary":"Generate compact periodic (toric) surface-code checks.","methods":[]},{"name":"generate_toy_code_checks","kind":"function","signature":"(distance)","summary":"Generate a toy code (not a proper quantum code) with d*d qubits for backward compatibility.","methods":[]},{"name":"generate_triangular_color_code_4_8_8_checks","kind":"function","signature":"(distance)","summary":"Generate 4.8.8 triangular color code parity check matrix.","methods":[]},{"name":"get_accumulated_shots","kind":"function","signature":"() -> int","summary":"Get total accumulated decode shots.","methods":[]},{"name":"get_backend","kind":"function","signature":"() -> 'GpuBackend'","summary":"Return the cached :class:\`GpuBackend\` capability snapshot (built once).","methods":[]},{"name":"get_decoder","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find')","summary":"Get a decoder, constructing it once and caching for reuse.","methods":[]},{"name":"get_decoder_pool","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find', n_workers: 'int | None' = None)","summary":"Get a multi-process :class:\`DecoderPool\`, constructed once and cached.","methods":[]},{"name":"get_latency_quantiles","kind":"function","signature":"()","summary":"\`get_latency_quantiles() -> tuple[float, float, float] | None\`","methods":[]},{"name":"get_license_info","kind":"function","signature":"() -> dict","summary":"Get active license info dictionary.","methods":[]},{"name":"gpu_available","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff CuPy is importable **and** a CUDA device is usable.","methods":[]},{"name":"gpu_backend","kind":"module","signature":"","summary":"qector_decoder_v3.gpu_backend - the CuPy GPU backend abstraction.","methods":[]},{"name":"has_cuda_rust","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff the Rust \`\`CUDABatchDecoder\`\` reports a usable device.","methods":[]},{"name":"has_cupy","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` if the \`\`cupy\`\` module can be imported.","methods":[]},{"name":"license","kind":"module","signature":"","summary":"","methods":[]},{"name":"opencl_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"predecoder","kind":"module","signature":"","summary":"qector_decoder_v3.predecoder - a fast, faithful matching predecoder.","methods":[]},{"name":"pymatching","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"pymatching_compat","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"qiskit_plugin","kind":"module","signature":"","summary":"QECTOR Qiskit Plugin - optional integration with the Qiskit ecosystem.","methods":[]},{"name":"recommend","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, *, graphlike: 'bool | None' = None) -> 'Recommendation'","summary":"Return a rich :class:\`Recommendation\` for a decoding problem.","methods":[]},{"name":"recommend_decoder","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None) -> 'str'","summary":"Return the *name* of the recommended decoder class (see :func:\`recommend\`).","methods":[]},{"name":"record_shots","kind":"function","signature":"(count: int) -> None","summary":"Record decoding shots into telemetry buffer.","methods":[]},{"name":"rest_api","kind":"module","signature":"","summary":"Minimal REST API for QECTOR.","methods":[]},{"name":"result","kind":"module","signature":"","summary":"qector_decoder_v3.result - Rich decode results, diagnostics and debug output.","methods":[]},{"name":"routing","kind":"module","signature":"","summary":"qector_decoder_v3.routing - intelligent decoder router / auto-selection.","methods":[]},{"name":"run_mcp_server","kind":"function","signature":"()","summary":"Python signature: \`\`\`python run_mcp_server() \`\`\`","methods":[]},{"name":"set_license_key","kind":"function","signature":"(key: str) -> None","summary":"Set the global QECTOR license key for tier enforcement.","methods":[]},{"name":"set_license_key_file","kind":"function","signature":"(path) -> None","summary":"Load a license key from *path* and activate it.","methods":[]},{"name":"sinter_compat","kind":"module","signature":"","summary":"qector_decoder_v3.sinter_compat - plug QECTOR into Sinter.","methods":[]},{"name":"sliding_window_decode","kind":"function","signature":"(syndrome_rounds: 'Any', code: 'Any' = None, *, check_to_qubits: 'Sequence[Sequence[int]] | None' = None, n_qubits: 'int | None' = None, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'StreamingResult'","summary":"Decode a whole multi-round syndrome stream window-by-window.","methods":[]},{"name":"sparse_blossom_radix_neighbors","kind":"function","signature":"(decoder, defects, k=8)","summary":"Return the k-nearest candidate edges (sorted by distance) for \`defects\`.","methods":[]},{"name":"start_metrics_server","kind":"function","signature":"(addr='127.0.0.1:9090')","summary":"Start the Prometheus metrics HTTP server.","methods":[]},{"name":"stim_compat","kind":"module","signature":"","summary":"Stim compatibility layer - Conversion and wrappers for the Stim ecosystem.","methods":[]},{"name":"streaming","kind":"module","signature":"","summary":"qector_decoder_v3.streaming - a higher-level Python streaming / multi-round decode *orchestration* layer.","methods":[]},{"name":"stripe_integration","kind":"module","signature":"","summary":"QECTOR Decoder v3 - Full Stripe API & Webhook License Fulfillment Integration","methods":[]},{"name":"verify_license_token","kind":"function","signature":"(token: 'str', customer_email: 'str' = '') -> 'bool'","summary":"Verifies the license token signature completely offline using Ed25519.","methods":[]},{"name":"workbench","kind":"module","signature":"","summary":"qector_decoder_v3.workbench - the QECTOR Workbench application controller.","methods":[]}]`),m={package:"qector-decoder-v3",version:v,generated:w,items:q},D=["class","function","module"];function C(){const[a,l]=i.useState(""),[t,u]=i.useState("all"),o=m.items,c=i.useMemo(()=>{const r=a.trim().toLowerCase();return o.filter(s=>(t==="all"||s.kind===t)&&(!r||s.name.toLowerCase().includes(r)||s.summary.toLowerCase().includes(r)))},[o,a,t]);return e.jsx("section",{className:"section-padding pb-24","aria-labelledby":"api-index",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{id:"api-index",className:"text-3xl font-bold mb-2",children:"API index"}),e.jsxs("p",{className:"text-secondary text-sm mb-6 max-w-3xl",children:["Generated from the published ",e.jsxs("code",{className:"font-mono text-cyan-200",children:[m.package," ",m.version]})," wheel on ",m.generated,": every public name in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"qector_decoder_v3"}),", with the signature Python reports and the first paragraph of its docstring."," ",o.length," names."]}),e.jsxs("div",{className:"flex flex-wrap gap-3 mb-6",children:[e.jsx("label",{className:"sr-only",htmlFor:"api-q",children:"Filter the API index"}),e.jsx("input",{id:"api-q",type:"search",value:a,onChange:r=>l(r.target.value),placeholder:"Filter by name or description",className:"flex-1 min-w-[14rem] bg-surface border border-gridline rounded-lg px-3 py-2 text-sm text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300/50"}),e.jsx("div",{className:"flex gap-1",role:"group","aria-label":"Kind",children:["all",...D].map(r=>e.jsx("button",{type:"button","aria-pressed":t===r,onClick:()=>u(r),className:`px-3 py-2 rounded-lg text-xs font-semibold capitalize border ${t===r?"border-cyan-300/50 text-cyan-300 bg-cyan-300/10":"border-gridline text-secondary hover:text-primary"}`,children:{all:"All",class:"Classes",function:"Functions",module:"Modules"}[r]},r))})]}),e.jsxs("ul",{className:"space-y-3",children:[c.map(r=>e.jsxs("li",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsx("span",{className:"text-[10px] uppercase tracking-wider font-semibold text-muted-foreground",children:r.kind}),e.jsxs("code",{className:"font-mono text-cyan-300 text-sm break-all",children:[r.name,e.jsx("span",{className:"text-secondary",children:r.signature})]})]}),r.summary&&e.jsx("p",{className:"text-secondary text-sm mt-2 leading-relaxed",children:r.summary}),r.methods.length>0&&e.jsxs("details",{className:"mt-2",children:[e.jsxs("summary",{className:"text-xs text-muted-foreground cursor-pointer hover:text-cyan-300",children:[r.methods.length," public methods"]}),e.jsx("ul",{className:"mt-2 grid md:grid-cols-2 gap-x-6 gap-y-1",children:r.methods.map(s=>e.jsx("li",{children:e.jsxs("code",{className:"font-mono text-xs text-primary break-all",children:[s.name,e.jsx("span",{className:"text-muted-foreground",children:s.signature})]})},s.name))})]})]},r.name)),c.length===0&&e.jsx("li",{className:"text-muted-foreground text-sm",children:"No names match."})]})]})})}function B(){const[a,l]=i.useState(""),[t,u]=i.useState("BlossomDecoder"),o=i.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],r=c.filter(n=>n.name.toLowerCase().includes(a.toLowerCase())),s=n=>{u(t===n?null:n)};return i.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&o.current&&p.fromTo(o.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"17 Decoder Configurations · Stim DEM · Generated API Index"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(g,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. The guided examples below are illustrative; the API index at the end of this page is generated from the published 1.0.1 package."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:n=>l(n.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(f,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(y,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[r.map(n=>e.jsxs("button",{"aria-expanded":t===n.name,onClick:()=>s(n.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===n.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:n.name}),t===n.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(x,{className:"w-4 h-4 text-muted-foreground"})]},n.name)),r.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const n=c.find(d=>d.name===t);return n?e.jsxs("div",{ref:o,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:n.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:n.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(N,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(_,{code:n.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(k,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:n.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(_,{code:n.example,language:"python",filename:`${n.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})}),e.jsx(C,{})]})}export{B as default}; diff --git a/assets/TechnicalReference-B02NOFbc.js b/assets/TechnicalReference-B02NOFbc.js deleted file mode 100644 index e89c571f..00000000 --- a/assets/TechnicalReference-B02NOFbc.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,C as _}from"./index-CcwlvHYJ.js";import{N as g}from"./NeuralReveal-Bsl9IGCr.js";import{g as p}from"./vendor-gsap-a3sj5zmn.js";import{r as f,h as y,s as b,o as x,T as N,B as k}from"./vendor-ui-B0ssGG4c.js";const v="1.0.1",w="2026-11-06",q=JSON.parse(`[{"name":"AmbiguityClusterDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.05, ambig_threshold=0.5, max_cluster_size=12)","summary":"C1-02: BP + ambiguity-clustered exact decoding for qLDPC codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"AutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, config: 'BackendConfig | None' = None)","summary":"Workload-aware, self-debugging decoder that routes to CUDA / OpenCL / Rayon / CPU / Fallback.","methods":[{"name":"auto_select","signature":"(checks, n_qubits, batch_size=1)"},{"name":"available_backends","signature":"(self) -> 'list[str]'"},{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"calibrate","signature":"(self, sizes=(64, 256, 1024, 4096, 16384), repeats: 'int' = 3, seed: 'int' = 0)"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"diagnostics","signature":"(self) -> 'dict'"},{"name":"reset_backend_health","signature":"(self) -> 'None'"},{"name":"select","signature":"(self, batch_size: 'int') -> 'str'"}]},{"name":"AutoRouter","kind":"class","signature":"(*, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, error_rate: 'float' = 0.05, code_family: 'Any' = None, use_native_auto: 'bool' = True) -> 'None'","summary":"Construct, cache, and dispatch the policy-selected decoder for a problem.","methods":[{"name":"decode","signature":"(self, checks_or_H: 'Any', syndromes: 'Any', **ctx: 'Any') -> 'np.ndarray'"},{"name":"explain","signature":"(self, checks_or_H: 'Any' = None, syndromes: 'Any' = None, **ctx: 'Any') -> 'dict[str, Any]'"}]},{"name":"BPOSDDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.1, bp_method=None, osd_order=None)","summary":"Belief Propagation + Ordered Statistics Decoding.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"bp_decode","signature":"(self, syndrome, max_iterations=20)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"Backend","kind":"class","signature":"()","summary":"Backend identifiers & Fallback Tiers.","methods":[]},{"name":"BackendConfig","kind":"class","signature":"(rayon_threshold: 'int' = 8, gpu_threshold: 'int' = 4096, allow_gpu: 'bool' = True, prefer: 'str' = 'cuda', force: 'str | None' = None, enable_auto_debug: 'bool' = True) -> None","summary":"Tunable thresholds and policy for :class:\`AutoDecoder\`.","methods":[]},{"name":"BatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Parallel batch decoder using Rayon (Rust data parallelism).","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"parallel_batch_decode","signature":"(self, syndromes)"}]},{"name":"BatchedBpDecoder","kind":"class","signature":"(H: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True) -> 'None'","summary":"Batched belief-propagation decoder over a fixed GF(2) check matrix \`\`H\`\`.","methods":[{"name":"decode_batch","signature":"(self, syndromes: 'Any', *, return_llr: 'bool' = False, early_stop: 'bool' = True) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'"}]},{"name":"BeliefMatching","kind":"class","signature":"(matrices: '_Matrices', max_iter: 'int' = 30, bp_shortcut: 'bool' = False)","summary":"Belief-propagation + minimum-weight perfect matching decoder.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_numpy_h","signature":"(H, error_rate: 'float' = 0.05, max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_stim_circuit","signature":"(circuit, max_iter: 'int' = 20) -> 'BeliefMatching'"}]},{"name":"BenchmarkSuite","kind":"class","signature":"(check_to_qubits, n_qubits=None, n_samples=10000, seed=42)","summary":"Production benchmark suite. Wraps Rust-native benchmarking.","methods":[{"name":"run","signature":"(self)"},{"name":"save","signature":"(self, path, results)"}]},{"name":"BlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Minimum-Weight Perfect Matching (MWPM) decoder via Edmonds' Blossom algorithm.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_weighted","signature":"(self, syndromes, weights)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, weights)"}]},{"name":"BpOsdDecoder","kind":"class","signature":"(H: 'Any', error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, ms_scale: 'float' = 1.0, osd_order: 'int' = 0, bp_method: 'str' = 'sum_product', use_gpu: 'Any' = None, max_latency_ms: 'float | None' = None, damping: 'float' = 0.0, osd_lambda: 'Any' = None)","summary":"BP + ordered-statistics decoder for general GF(2) check matrices.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix: 'Any' = None) -> 'np.ndarray'"}]},{"name":"CPUBatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"SIMD-friendly CPU batch decoder with pooled buffers and SoA transposition.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_par","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"CUDABatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"is_available","signature":"()"},{"name":"reset","signature":"(self, /)"}]},{"name":"CUDABpOsdDecoder","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"}]},{"name":"ColourCodeDecoder","kind":"class","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0, method: 'str' = 'bposd')","summary":"Colour-code decoder: BP-OSD over the undecomposed hypergraph DEM.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"},{"name":"from_stim_circuit","signature":"(circuit: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"}]},{"name":"DecodeResult","kind":"class","signature":"(correction: 'np.ndarray', syndrome: 'np.ndarray', n_qubits: 'int', n_checks: 'int', weight: 'float | None' = None, logical_flips: 'np.ndarray | None' = None, decode_seconds: 'float | None' = None, backend: 'str' = 'cpu', fallback: 'bool' = False, fallback_reason: 'str' = '', syndrome_valid: 'bool | None' = None, metadata: 'dict' = ) -> None","summary":"Result of decoding a single syndrome, with diagnostics and metadata.","methods":[{"name":"as_uint8","signature":"(self) -> 'np.ndarray'"},{"name":"explain","signature":"(self) -> 'str'"},{"name":"to_dict","signature":"(self) -> 'dict'"},{"name":"to_json","signature":"(self, indent: 'int' = 2) -> 'str'"},{"name":"verify","signature":"(self, H: 'np.ndarray') -> 'bool'"}]},{"name":"DecoderName","kind":"class","signature":"()","summary":"String identifiers for the routable decoders.","methods":[]},{"name":"DecoderPool","kind":"class","signature":"(check_to_qubits=None, n_qubits=None, decoder_type: 'str' = 'fast_union_find', n_workers: 'int | None' = None, num_threads: 'int | None' = None)","summary":"Multi-process decoder pool for parallel syndrome decoding.","methods":[{"name":"close","signature":"(self)"},{"name":"decode","signature":"(self, syndromes) -> 'np.ndarray'"}]},{"name":"DetectorGraph","kind":"class","signature":"(check_to_qubits, syndrome, check_positions=None, check_types=None, base_weights=None, n_qubits=None)","summary":"Detector graph used by the GNN and hybrid decoder paths.","methods":[{"name":"update_syndrome","signature":"(self, syndrome)"}]},{"name":"FastUnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Union-Find with a zero-allocation hot path, reusable buffers and a C ABI.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"GNNBeliefMatcher","kind":"class","signature":"(check_to_qubits, n_qubits=None, *, gnn=None, hidden_size: 'int' = 32, n_layers: 'int' = 2, train_samples: 'int' = 0, error_rate: 'float' = 0.05, train_epochs: 'int' = 3, seed=None)","summary":"End-to-end GNN-guided minimum-weight perfect matching decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"GNNPredecoder","kind":"class","signature":"(node_feat_dim=None, edge_feat_dim=None, hidden_size=16, n_layers=2)","summary":"Graph Neural Network Pre-Decoder for dynamic edge weight prediction.","methods":[{"name":"forward","signature":"(self, graph)"},{"name":"load_weights","signature":"(self, path)"},{"name":"new_standard","signature":"(hidden_size=16, n_layers=2)"},{"name":"predict_with_node_probs","signature":"(self, graph)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, graphs, targets, n_epochs)"}]},{"name":"GNNTrainer","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate=0.1)","summary":"End-to-end GNN training pipeline with Blossom teacher model.","methods":[{"name":"generate_dataset","signature":"(self, n_samples)"},{"name":"train","signature":"(self, gnn, n_samples, n_epochs)"},{"name":"train_bp","signature":"(self, gnn, n_samples, n_epochs, max_bp_iter=20)"}]},{"name":"HardwareProfile","kind":"class","signature":"(cuda_rust: 'bool' = False, gpu: 'bool' = False) -> None","summary":"Resolved view of the GPU capability the policy should assume.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, bool]'"},{"name":"detect","signature":"() -> 'HardwareProfile'"}]},{"name":"HybridCascadeDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None, max_accept_weight=None, escalation=None, error_rate=None)","summary":"Hybrid cascading decoder: Union-Find pre-filter + Blossom/BP-OSD escalation.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_timed","signature":"(self, syndromes, max_latency_ms=10.0)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"HybridDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, check_positions=None, check_types=None, base_weights=None, gnn_hidden_size=64, gnn_n_layers=3)","summary":"GNN Pre-Decoder + SparseBlossom hybrid decoder.","methods":[{"name":"batch_decode_hybrid","signature":"(self, syndromes)"},{"name":"batch_decode_standard","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_heuristic","signature":"(self, syndrome)"},{"name":"decode_hybrid","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_standard","signature":"(self, syndrome)"},{"name":"load_weights","signature":"(self, path)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, n_samples, n_epochs, error_rate=0.1)"},{"name":"train_bp","signature":"(self, n_samples, n_epochs, error_rate=0.1, max_bp_iter=20)"}]},{"name":"LERBenchmark","kind":"class","signature":"()","summary":"Logical Error Rate benchmark suite.","methods":[{"name":"run_all","signature":"(self)"}]},{"name":"LookupTableDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Exact lookup-table decoder with UnionFind fallback.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"build_table","signature":"(self, max_entries)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"MAX_WORKERS","kind":"constant","signature":"","summary":"","methods":[]},{"name":"Matching","kind":"class","signature":"(H: 'Any' = None, weights: 'Any' = None, faults_matrix: 'Any' = None)","summary":"Minimum-weight perfect-matching decoder with a PyMatching-style API.","methods":[{"name":"add_boundary_edge","signature":"(self, node: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"add_edge","signature":"(self, node1: 'int', node2: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"check_matrix","signature":"(self) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots: 'Any') -> 'np.ndarray'"},{"name":"decode_to_edges_array","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"edges","signature":"(self) -> 'list[tuple[int | None, int | None, dict]]'"},{"name":"from_check_matrix","signature":"(H: 'Any', weights: 'Any' = None, faults_matrix: 'Any' = None, **_: 'Any') -> 'Matching'"},{"name":"from_detector_error_model","signature":"(dem: 'Any') -> 'Matching'"},{"name":"from_stim_dem","signature":"(dem: 'Any') -> 'Matching'"}]},{"name":"NativeAutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, distance=5, noise_rate=0.01, batch_size=1, is_qldpc=False)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"batch_decode_strided","signature":"(self, /, syndromes, stride=None, require_alignment=False)"},{"name":"decode","signature":"(self, /, syndrome)"}]},{"name":"NeuralPredecoder","kind":"class","signature":"(n_input, n_output, n_hidden1=None, n_hidden2=None)","summary":"Lightweight MLP pre-decoder with Xavier initialization and SGD training.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"predict","signature":"(self, syndrome)"},{"name":"train","signature":"(self, syndromes, corrections, n_epochs, learning_rate=0.01)"}]},{"name":"OpenCLBatchDecoder","kind":"class","signature":"(*a, **k)","summary":"OpenCL batch decoder - requires source build with --features opencl.","methods":[{"name":"is_available","signature":"()"}]},{"name":"PredecodedDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, backend: 'str' = 'blossom')","summary":"Local-matching predecoder + exact/fast residual decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"Recommendation","kind":"class","signature":"(decoder: 'str', reason: 'str', family: 'str', priority: 'str', batch_size: 'int', hardware: 'dict[str, bool]', gpu_batched_bp: 'bool' = False, forced: 'bool' = False, graphlike: 'bool | None' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None) -> None","summary":"A decoder choice plus the reasoning and inputs that produced it.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"}]},{"name":"SlidingWindowDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, window_size=10, decay_factor=0.8, check_types=None, p_data=None, p_meas=None)","summary":"Sliding-window decoder with exponential decay weighting or fault-tolerant space-time decoding.","methods":[{"name":"decode","signature":"(self, syndrome=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"SpaceTimeDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_rounds, p_data, p_meas, n_qubits=None)","summary":"PyO3 wrapper for [\`SpaceTimeDecoder\`]: fault-tolerant temporal decoding via XOR-of-consecutive-rounds detectors matched on a 3D (space x time) graph, as opposed to [\`crate::sliding_window::PySlidingWindowDecoder\`] /…","methods":[{"name":"decode_history","signature":"(self, /)"},{"name":"reset","signature":"(self, /)"},{"name":"update","signature":"(self, /, round_syndrome)"}]},{"name":"SparseBlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Region-growing Sparse Blossom decoder with RadixHeap.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_with_weights","signature":"(self, syndrome, weights)"}]},{"name":"StreamingDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, history_size=10, check_types=None, p_data=None, p_meas=None)","summary":"Streaming decoder that accumulates syndromes over multiple rounds.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_rounds","signature":"(self, rounds)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"StreamingResult","kind":"class","signature":"(corrections: 'np.ndarray', syndromes: 'np.ndarray', telemetry: 'StreamingTelemetry', logical_flips: 'np.ndarray | None' = None) -> None","summary":"Outcome of a full streaming decode.","methods":[{"name":"is_valid","signature":"(self, H: 'Any', *, prefer_gpu: 'bool' = True) -> 'bool'"}]},{"name":"StreamingSession","kind":"class","signature":"(code_or_checks: 'Any', n_qubits: 'int | None' = None, *, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'None'","summary":"Incremental multi-round decode with a sliding commit buffer.","methods":[{"name":"committed_corrections","signature":"(self) -> 'np.ndarray'"},{"name":"committed_syndromes","signature":"(self) -> 'np.ndarray'"},{"name":"flush","signature":"(self) -> 'list[np.ndarray]'"},{"name":"push_round","signature":"(self, syndrome: 'Any') -> 'list[np.ndarray]'"},{"name":"reset","signature":"(self) -> 'None'"},{"name":"run","signature":"(self, syndrome_rounds: 'Any') -> 'StreamingResult'"}]},{"name":"StreamingTelemetry","kind":"class","signature":"(rounds: 'int' = 0, windows: 'int' = 0, committed: 'int' = 0, decode_seconds: 'float' = 0.0, per_window_seconds: 'list[float]' = , gpu: 'dict[str, int]' = , backend: 'dict[str, Any]' = , rounds_valid: 'int | None' = None) -> None","summary":"Real, measured counters for a streaming decode run.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"},{"name":"record_window","signature":"(self, seconds: 'float', rounds: 'int' = 1) -> 'None'"}]},{"name":"TwoStageDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_qubits=None, x_decoder='blossom', z_decoder='blossom')","summary":"C1-03: Correlated two-stage matching for CSS codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"UnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Production-ready Union-Find quantum error correction decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"Workbench","kind":"class","signature":"() -> 'None'","summary":"Controller for the QECTOR Workbench (load → benchmark → export).","methods":[{"name":"cancel_job","signature":"(self, job_id: 'str') -> 'str'"},{"name":"detect_backends","signature":"(self) -> 'dict'"},{"name":"environment_snapshot","signature":"(self) -> 'dict'"},{"name":"export_csv","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_json","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_pdf","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"get_job","signature":"(self, job_id: 'str') -> 'dict'"},{"name":"get_license_info","signature":"(self) -> 'dict'"},{"name":"job_artifact","signature":"(self, job_id: 'str') -> 'dict | None'"},{"name":"list_jobs","signature":"(self) -> 'list[dict]'"},{"name":"load_dem","signature":"(self, source: 'Any') -> 'dict'"},{"name":"load_stim","signature":"(self, source: 'Any') -> 'dict'"},{"name":"run_benchmark","signature":"(self, spec: 'dict', job: 'Job | None' = None) -> 'dict'"},{"name":"set_license_key","signature":"(self, key: 'str') -> 'None'"},{"name":"shutdown","signature":"(self) -> 'None'"},{"name":"submit_job","signature":"(self, spec: 'dict') -> 'str'"},{"name":"wait","signature":"(self, job_id: 'str', timeout: 'float | None' = None) -> 'dict'"}]},{"name":"backend","kind":"module","signature":"","summary":"qector_decoder_v3.backend - Workload-Aware AutoDecoder with Self-Auto-Debug & Multi-Tier Fallback.","methods":[]},{"name":"batched_bp_decode","kind":"function","signature":"(H: 'Any', syndromes: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True, early_stop: 'bool' = True, return_llr: 'bool' = False) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'","summary":"Decode a stack of syndromes with batched belief propagation.","methods":[]},{"name":"belief_matching","kind":"module","signature":"","summary":"qector_decoder_v3.belief_matching - belief-propagation + MWPM (belief-matching).","methods":[]},{"name":"benchmarking","kind":"module","signature":"","summary":"qector_decoder_v3.benchmarking - reproducible, statistically-honest benchmarks.","methods":[]},{"name":"bp_cupy","kind":"module","signature":"","summary":"qector_decoder_v3.bp_cupy - batched, GPU-resident belief propagation.","methods":[]},{"name":"bposd","kind":"module","signature":"","summary":"qector_decoder_v3.bposd - belief propagation + ordered-statistics decoding.","methods":[]},{"name":"changelog","kind":"function","signature":"() -> str","summary":"Return a human-readable changelog string for the loaded package.","methods":[]},{"name":"check_to_edges","kind":"function","signature":"(check_to_qubits)","summary":"Convert check_to_qubits to edge list.","methods":[]},{"name":"clear_decoder_cache","kind":"function","signature":"()","summary":"Clear the in-memory decoder and decoder pool LRU caches.","methods":[]},{"name":"codes","kind":"module","signature":"","summary":"qector_decoder_v3.codes - Code-family helpers.","methods":[]},{"name":"colour_code","kind":"module","signature":"","summary":"C1-04: Colour-code decoder.","methods":[]},{"name":"compute_detector_differences","kind":"function","signature":"(history)","summary":"Computes XOR detector differences across consecutive syndrome rounds: detector_t = raw_t ^ raw_{t-1}.","methods":[]},{"name":"cuda_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"decode_mmap","kind":"function","signature":"(syndrome_path: 'str', output_path: 'str', check_to_qubits, n_qubits: 'int', decoder_type: 'str' = 'cpu_batch', batch_size: 'int' = 65536, n_shots: 'int | None' = None, dtype: '_np.dtype' = dtype('uint8'), verbose: 'bool' = False)","summary":"Out-of-core batch decoding via memory-mapped arrays.","methods":[]},{"name":"decode_with_diagnostics","kind":"function","signature":"(code: 'Any', syndrome: 'Sequence[int]', kind: 'str' = 'blossom', decoder: 'Any' = None, logicals: 'np.ndarray | None' = None) -> 'DecodeResult'","summary":"Decode one syndrome and return a fully-populated :class:\`DecodeResult\`.","methods":[]},{"name":"decode_with_gnn","kind":"function","signature":"(check_to_qubits, n_qubits, syndrome, **kwargs) -> 'np.ndarray'","summary":"One-shot GNN-guided MWPM decode (see :class:\`GNNBeliefMatcher\`).","methods":[]},{"name":"decoder_cache","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_cache - LRU-decoder cache and factory functions.","methods":[]},{"name":"decoder_pool","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_pool - Multi-process decoder pool.","methods":[]},{"name":"dem","kind":"module","signature":"","summary":"qector_decoder_v3.dem - Stim Detector Error Model (DEM) loader.","methods":[]},{"name":"detect_hardware","kind":"function","signature":"() -> 'HardwareProfile'","summary":"Return the live :class:\`HardwareProfile\` (alias for \`\`HardwareProfile.detect\`\`).","methods":[]},{"name":"enforce_distance_cap","kind":"function","signature":"(distance) -> None","summary":"Enforce that *distance* does not exceed the active tier's cap.","methods":[]},{"name":"enforce_unlocked","kind":"function","signature":"() -> None","summary":"Hard-gate decode path when no valid license is active (QECTOR_ENFORCE=1).","methods":[]},{"name":"estimate_distance","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Python wrapper for estimate_distance.","methods":[]},{"name":"flush_usage","kind":"function","signature":"(customer_id: 'str | None' = None, api_key: 'str | None' = None) -> dict","summary":"Flush accumulated decode shots to the Stripe Billing Meter Events API.","methods":[]},{"name":"from_circuit","kind":"function","signature":"(circuit, decoder_type='blossom', **kwargs)","summary":"Build a decoder from a Stim circuit in one call.","methods":[]},{"name":"generate_biconnected_qldpc_checks","kind":"function","signature":"(n_qubits, degree)","summary":"Generate a bipolar / biconnected qLDPC Tanner graph parity check matrix.","methods":[]},{"name":"generate_parity_check_matrix","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Return the binary parity-check matrix \`\`H\`\` for *check_to_qubits*.","methods":[]},{"name":"generate_repetition_code_checks","kind":"function","signature":"(distance)","summary":"Generate a 1D repetition/chain code for testing.","methods":[]},{"name":"generate_ring_code_checks","kind":"function","signature":"(distance)","summary":"Generate a simple 1D ring code for testing.","methods":[]},{"name":"generate_space_time_surface_code_checks","kind":"function","signature":"(distance, rounds)","summary":"Generate 3D space-time surface code checks across multiple rounds.","methods":[]},{"name":"generate_surface_code_checks","kind":"function","signature":"(distance)","summary":"Generate compact periodic (toric) surface-code checks.","methods":[]},{"name":"generate_toy_code_checks","kind":"function","signature":"(distance)","summary":"Generate a toy code (not a proper quantum code) with d*d qubits for backward compatibility.","methods":[]},{"name":"generate_triangular_color_code_4_8_8_checks","kind":"function","signature":"(distance)","summary":"Generate 4.8.8 triangular color code parity check matrix.","methods":[]},{"name":"get_accumulated_shots","kind":"function","signature":"() -> int","summary":"Get total accumulated decode shots.","methods":[]},{"name":"get_backend","kind":"function","signature":"() -> 'GpuBackend'","summary":"Return the cached :class:\`GpuBackend\` capability snapshot (built once).","methods":[]},{"name":"get_decoder","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find')","summary":"Get a decoder, constructing it once and caching for reuse.","methods":[]},{"name":"get_decoder_pool","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find', n_workers: 'int | None' = None)","summary":"Get a multi-process :class:\`DecoderPool\`, constructed once and cached.","methods":[]},{"name":"get_latency_quantiles","kind":"function","signature":"()","summary":"\`get_latency_quantiles() -> tuple[float, float, float] | None\`","methods":[]},{"name":"get_license_info","kind":"function","signature":"() -> dict","summary":"Get active license info dictionary.","methods":[]},{"name":"gpu_available","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff CuPy is importable **and** a CUDA device is usable.","methods":[]},{"name":"gpu_backend","kind":"module","signature":"","summary":"qector_decoder_v3.gpu_backend - the CuPy GPU backend abstraction.","methods":[]},{"name":"has_cuda_rust","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff the Rust \`\`CUDABatchDecoder\`\` reports a usable device.","methods":[]},{"name":"has_cupy","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` if the \`\`cupy\`\` module can be imported.","methods":[]},{"name":"license","kind":"module","signature":"","summary":"","methods":[]},{"name":"opencl_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"predecoder","kind":"module","signature":"","summary":"qector_decoder_v3.predecoder - a fast, faithful matching predecoder.","methods":[]},{"name":"pymatching","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"pymatching_compat","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"qiskit_plugin","kind":"module","signature":"","summary":"QECTOR Qiskit Plugin - optional integration with the Qiskit ecosystem.","methods":[]},{"name":"recommend","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, *, graphlike: 'bool | None' = None) -> 'Recommendation'","summary":"Return a rich :class:\`Recommendation\` for a decoding problem.","methods":[]},{"name":"recommend_decoder","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None) -> 'str'","summary":"Return the *name* of the recommended decoder class (see :func:\`recommend\`).","methods":[]},{"name":"record_shots","kind":"function","signature":"(count: int) -> None","summary":"Record decoding shots into telemetry buffer.","methods":[]},{"name":"rest_api","kind":"module","signature":"","summary":"Minimal REST API for QECTOR.","methods":[]},{"name":"result","kind":"module","signature":"","summary":"qector_decoder_v3.result - Rich decode results, diagnostics and debug output.","methods":[]},{"name":"routing","kind":"module","signature":"","summary":"qector_decoder_v3.routing - intelligent decoder router / auto-selection.","methods":[]},{"name":"run_mcp_server","kind":"function","signature":"()","summary":"Python signature: \`\`\`python run_mcp_server() \`\`\`","methods":[]},{"name":"set_license_key","kind":"function","signature":"(key: str) -> None","summary":"Set the global QECTOR license key for tier enforcement.","methods":[]},{"name":"set_license_key_file","kind":"function","signature":"(path) -> None","summary":"Load a license key from *path* and activate it.","methods":[]},{"name":"sinter_compat","kind":"module","signature":"","summary":"qector_decoder_v3.sinter_compat - plug QECTOR into Sinter.","methods":[]},{"name":"sliding_window_decode","kind":"function","signature":"(syndrome_rounds: 'Any', code: 'Any' = None, *, check_to_qubits: 'Sequence[Sequence[int]] | None' = None, n_qubits: 'int | None' = None, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'StreamingResult'","summary":"Decode a whole multi-round syndrome stream window-by-window.","methods":[]},{"name":"sparse_blossom_radix_neighbors","kind":"function","signature":"(decoder, defects, k=8)","summary":"Return the k-nearest candidate edges (sorted by distance) for \`defects\`.","methods":[]},{"name":"start_metrics_server","kind":"function","signature":"(addr='127.0.0.1:9090')","summary":"Start the Prometheus metrics HTTP server.","methods":[]},{"name":"stim_compat","kind":"module","signature":"","summary":"Stim compatibility layer - Conversion and wrappers for the Stim ecosystem.","methods":[]},{"name":"streaming","kind":"module","signature":"","summary":"qector_decoder_v3.streaming - a higher-level Python streaming / multi-round decode *orchestration* layer.","methods":[]},{"name":"stripe_integration","kind":"module","signature":"","summary":"QECTOR Decoder v3 - Full Stripe API & Webhook License Fulfillment Integration","methods":[]},{"name":"verify_license_token","kind":"function","signature":"(token: 'str', customer_email: 'str' = '') -> 'bool'","summary":"Verifies the license token signature completely offline using Ed25519.","methods":[]},{"name":"workbench","kind":"module","signature":"","summary":"qector_decoder_v3.workbench - the QECTOR Workbench application controller.","methods":[]}]`),m={package:"qector-decoder-v3",version:v,generated:w,items:q},D=["class","function","module"];function C(){const[a,l]=i.useState(""),[t,u]=i.useState("all"),o=m.items,c=i.useMemo(()=>{const r=a.trim().toLowerCase();return o.filter(s=>(t==="all"||s.kind===t)&&(!r||s.name.toLowerCase().includes(r)||s.summary.toLowerCase().includes(r)))},[o,a,t]);return e.jsx("section",{className:"section-padding pb-24","aria-labelledby":"api-index",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{id:"api-index",className:"text-3xl font-bold mb-2",children:"API index"}),e.jsxs("p",{className:"text-secondary text-sm mb-6 max-w-3xl",children:["Generated from the published ",e.jsxs("code",{className:"font-mono text-cyan-200",children:[m.package," ",m.version]})," wheel on ",m.generated,": every public name in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"qector_decoder_v3"}),", with the signature Python reports and the first paragraph of its docstring."," ",o.length," names."]}),e.jsxs("div",{className:"flex flex-wrap gap-3 mb-6",children:[e.jsx("label",{className:"sr-only",htmlFor:"api-q",children:"Filter the API index"}),e.jsx("input",{id:"api-q",type:"search",value:a,onChange:r=>l(r.target.value),placeholder:"Filter by name or description",className:"flex-1 min-w-[14rem] bg-surface border border-gridline rounded-lg px-3 py-2 text-sm text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300/50"}),e.jsx("div",{className:"flex gap-1",role:"group","aria-label":"Kind",children:["all",...D].map(r=>e.jsx("button",{type:"button","aria-pressed":t===r,onClick:()=>u(r),className:`px-3 py-2 rounded-lg text-xs font-semibold capitalize border ${t===r?"border-cyan-300/50 text-cyan-300 bg-cyan-300/10":"border-gridline text-secondary hover:text-primary"}`,children:{all:"All",class:"Classes",function:"Functions",module:"Modules"}[r]},r))})]}),e.jsxs("ul",{className:"space-y-3",children:[c.map(r=>e.jsxs("li",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsx("span",{className:"text-[10px] uppercase tracking-wider font-semibold text-muted-foreground",children:r.kind}),e.jsxs("code",{className:"font-mono text-cyan-300 text-sm break-all",children:[r.name,e.jsx("span",{className:"text-secondary",children:r.signature})]})]}),r.summary&&e.jsx("p",{className:"text-secondary text-sm mt-2 leading-relaxed",children:r.summary}),r.methods.length>0&&e.jsxs("details",{className:"mt-2",children:[e.jsxs("summary",{className:"text-xs text-muted-foreground cursor-pointer hover:text-cyan-300",children:[r.methods.length," public methods"]}),e.jsx("ul",{className:"mt-2 grid md:grid-cols-2 gap-x-6 gap-y-1",children:r.methods.map(s=>e.jsx("li",{children:e.jsxs("code",{className:"font-mono text-xs text-primary break-all",children:[s.name,e.jsx("span",{className:"text-muted-foreground",children:s.signature})]})},s.name))})]})]},r.name)),c.length===0&&e.jsx("li",{className:"text-muted-foreground text-sm",children:"No names match."})]})]})})}function B(){const[a,l]=i.useState(""),[t,u]=i.useState("BlossomDecoder"),o=i.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],r=c.filter(n=>n.name.toLowerCase().includes(a.toLowerCase())),s=n=>{u(t===n?null:n)};return i.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&o.current&&p.fromTo(o.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"17 Decoder Configurations · Stim DEM · Generated API Index"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(g,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. The guided examples below are illustrative; the API index at the end of this page is generated from the published 1.0.1 package."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:n=>l(n.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(f,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(y,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[r.map(n=>e.jsxs("button",{"aria-expanded":t===n.name,onClick:()=>s(n.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===n.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:n.name}),t===n.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(x,{className:"w-4 h-4 text-muted-foreground"})]},n.name)),r.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const n=c.find(d=>d.name===t);return n?e.jsxs("div",{ref:o,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:n.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:n.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(N,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(_,{code:n.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(k,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:n.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(_,{code:n.example,language:"python",filename:`${n.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})}),e.jsx(C,{})]})}export{B as default}; diff --git a/assets/TechnicalReference-BKOcLLqZ.js b/assets/TechnicalReference-BKOcLLqZ.js deleted file mode 100644 index 25415456..00000000 --- a/assets/TechnicalReference-BKOcLLqZ.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,C as _}from"./index-c1PDYu0j.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{g as p}from"./vendor-gsap-a3sj5zmn.js";import{q as f,h as y,r as b,s as x,T as N,B as k}from"./vendor-ui-B8TlNU4J.js";const v="1.0.1",w="2026-11-06",q=JSON.parse(`[{"name":"AmbiguityClusterDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.05, ambig_threshold=0.5, max_cluster_size=12)","summary":"C1-02: BP + ambiguity-clustered exact decoding for qLDPC codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"AutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, config: 'BackendConfig | None' = None)","summary":"Workload-aware, self-debugging decoder that routes to CUDA / OpenCL / Rayon / CPU / Fallback.","methods":[{"name":"auto_select","signature":"(checks, n_qubits, batch_size=1)"},{"name":"available_backends","signature":"(self) -> 'list[str]'"},{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"calibrate","signature":"(self, sizes=(64, 256, 1024, 4096, 16384), repeats: 'int' = 3, seed: 'int' = 0)"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"diagnostics","signature":"(self) -> 'dict'"},{"name":"reset_backend_health","signature":"(self) -> 'None'"},{"name":"select","signature":"(self, batch_size: 'int') -> 'str'"}]},{"name":"AutoRouter","kind":"class","signature":"(*, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, error_rate: 'float' = 0.05, code_family: 'Any' = None, use_native_auto: 'bool' = True) -> 'None'","summary":"Construct, cache, and dispatch the policy-selected decoder for a problem.","methods":[{"name":"decode","signature":"(self, checks_or_H: 'Any', syndromes: 'Any', **ctx: 'Any') -> 'np.ndarray'"},{"name":"explain","signature":"(self, checks_or_H: 'Any' = None, syndromes: 'Any' = None, **ctx: 'Any') -> 'dict[str, Any]'"}]},{"name":"BPOSDDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.1, bp_method=None, osd_order=None)","summary":"Belief Propagation + Ordered Statistics Decoding.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"bp_decode","signature":"(self, syndrome, max_iterations=20)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"Backend","kind":"class","signature":"()","summary":"Backend identifiers & Fallback Tiers.","methods":[]},{"name":"BackendConfig","kind":"class","signature":"(rayon_threshold: 'int' = 8, gpu_threshold: 'int' = 4096, allow_gpu: 'bool' = True, prefer: 'str' = 'cuda', force: 'str | None' = None, enable_auto_debug: 'bool' = True) -> None","summary":"Tunable thresholds and policy for :class:\`AutoDecoder\`.","methods":[]},{"name":"BatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Parallel batch decoder using Rayon (Rust data parallelism).","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"parallel_batch_decode","signature":"(self, syndromes)"}]},{"name":"BatchedBpDecoder","kind":"class","signature":"(H: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True) -> 'None'","summary":"Batched belief-propagation decoder over a fixed GF(2) check matrix \`\`H\`\`.","methods":[{"name":"decode_batch","signature":"(self, syndromes: 'Any', *, return_llr: 'bool' = False, early_stop: 'bool' = True) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'"}]},{"name":"BeliefMatching","kind":"class","signature":"(matrices: '_Matrices', max_iter: 'int' = 30, bp_shortcut: 'bool' = False)","summary":"Belief-propagation + minimum-weight perfect matching decoder.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_numpy_h","signature":"(H, error_rate: 'float' = 0.05, max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_stim_circuit","signature":"(circuit, max_iter: 'int' = 20) -> 'BeliefMatching'"}]},{"name":"BenchmarkSuite","kind":"class","signature":"(check_to_qubits, n_qubits=None, n_samples=10000, seed=42)","summary":"Production benchmark suite. Wraps Rust-native benchmarking.","methods":[{"name":"run","signature":"(self)"},{"name":"save","signature":"(self, path, results)"}]},{"name":"BlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Minimum-Weight Perfect Matching (MWPM) decoder via Edmonds' Blossom algorithm.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_weighted","signature":"(self, syndromes, weights)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, weights)"}]},{"name":"BpOsdDecoder","kind":"class","signature":"(H: 'Any', error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, ms_scale: 'float' = 1.0, osd_order: 'int' = 0, bp_method: 'str' = 'sum_product', use_gpu: 'Any' = None, max_latency_ms: 'float | None' = None, damping: 'float' = 0.0, osd_lambda: 'Any' = None)","summary":"BP + ordered-statistics decoder for general GF(2) check matrices.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix: 'Any' = None) -> 'np.ndarray'"}]},{"name":"CPUBatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"SIMD-friendly CPU batch decoder with pooled buffers and SoA transposition.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_par","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"CUDABatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"is_available","signature":"()"},{"name":"reset","signature":"(self, /)"}]},{"name":"CUDABpOsdDecoder","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"}]},{"name":"ColourCodeDecoder","kind":"class","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0, method: 'str' = 'bposd')","summary":"Colour-code decoder: BP-OSD over the undecomposed hypergraph DEM.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"},{"name":"from_stim_circuit","signature":"(circuit: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"}]},{"name":"DecodeResult","kind":"class","signature":"(correction: 'np.ndarray', syndrome: 'np.ndarray', n_qubits: 'int', n_checks: 'int', weight: 'float | None' = None, logical_flips: 'np.ndarray | None' = None, decode_seconds: 'float | None' = None, backend: 'str' = 'cpu', fallback: 'bool' = False, fallback_reason: 'str' = '', syndrome_valid: 'bool | None' = None, metadata: 'dict' = ) -> None","summary":"Result of decoding a single syndrome, with diagnostics and metadata.","methods":[{"name":"as_uint8","signature":"(self) -> 'np.ndarray'"},{"name":"explain","signature":"(self) -> 'str'"},{"name":"to_dict","signature":"(self) -> 'dict'"},{"name":"to_json","signature":"(self, indent: 'int' = 2) -> 'str'"},{"name":"verify","signature":"(self, H: 'np.ndarray') -> 'bool'"}]},{"name":"DecoderName","kind":"class","signature":"()","summary":"String identifiers for the routable decoders.","methods":[]},{"name":"DecoderPool","kind":"class","signature":"(check_to_qubits=None, n_qubits=None, decoder_type: 'str' = 'fast_union_find', n_workers: 'int | None' = None, num_threads: 'int | None' = None)","summary":"Multi-process decoder pool for parallel syndrome decoding.","methods":[{"name":"close","signature":"(self)"},{"name":"decode","signature":"(self, syndromes) -> 'np.ndarray'"}]},{"name":"DetectorGraph","kind":"class","signature":"(check_to_qubits, syndrome, check_positions=None, check_types=None, base_weights=None, n_qubits=None)","summary":"Detector graph used by the GNN and hybrid decoder paths.","methods":[{"name":"update_syndrome","signature":"(self, syndrome)"}]},{"name":"FastUnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Union-Find with a zero-allocation hot path, reusable buffers and a C ABI.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"GNNBeliefMatcher","kind":"class","signature":"(check_to_qubits, n_qubits=None, *, gnn=None, hidden_size: 'int' = 32, n_layers: 'int' = 2, train_samples: 'int' = 0, error_rate: 'float' = 0.05, train_epochs: 'int' = 3, seed=None)","summary":"End-to-end GNN-guided minimum-weight perfect matching decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"GNNPredecoder","kind":"class","signature":"(node_feat_dim=None, edge_feat_dim=None, hidden_size=16, n_layers=2)","summary":"Graph Neural Network Pre-Decoder for dynamic edge weight prediction.","methods":[{"name":"forward","signature":"(self, graph)"},{"name":"load_weights","signature":"(self, path)"},{"name":"new_standard","signature":"(hidden_size=16, n_layers=2)"},{"name":"predict_with_node_probs","signature":"(self, graph)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, graphs, targets, n_epochs)"}]},{"name":"GNNTrainer","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate=0.1)","summary":"End-to-end GNN training pipeline with Blossom teacher model.","methods":[{"name":"generate_dataset","signature":"(self, n_samples)"},{"name":"train","signature":"(self, gnn, n_samples, n_epochs)"},{"name":"train_bp","signature":"(self, gnn, n_samples, n_epochs, max_bp_iter=20)"}]},{"name":"HardwareProfile","kind":"class","signature":"(cuda_rust: 'bool' = False, gpu: 'bool' = False) -> None","summary":"Resolved view of the GPU capability the policy should assume.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, bool]'"},{"name":"detect","signature":"() -> 'HardwareProfile'"}]},{"name":"HybridCascadeDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None, max_accept_weight=None, escalation=None, error_rate=None)","summary":"Hybrid cascading decoder: Union-Find pre-filter + Blossom/BP-OSD escalation.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_timed","signature":"(self, syndromes, max_latency_ms=10.0)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"HybridDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, check_positions=None, check_types=None, base_weights=None, gnn_hidden_size=64, gnn_n_layers=3)","summary":"GNN Pre-Decoder + SparseBlossom hybrid decoder.","methods":[{"name":"batch_decode_hybrid","signature":"(self, syndromes)"},{"name":"batch_decode_standard","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_heuristic","signature":"(self, syndrome)"},{"name":"decode_hybrid","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_standard","signature":"(self, syndrome)"},{"name":"load_weights","signature":"(self, path)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, n_samples, n_epochs, error_rate=0.1)"},{"name":"train_bp","signature":"(self, n_samples, n_epochs, error_rate=0.1, max_bp_iter=20)"}]},{"name":"LERBenchmark","kind":"class","signature":"()","summary":"Logical Error Rate benchmark suite.","methods":[{"name":"run_all","signature":"(self)"}]},{"name":"LookupTableDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Exact lookup-table decoder with UnionFind fallback.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"build_table","signature":"(self, max_entries)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"MAX_WORKERS","kind":"constant","signature":"","summary":"","methods":[]},{"name":"Matching","kind":"class","signature":"(H: 'Any' = None, weights: 'Any' = None, faults_matrix: 'Any' = None)","summary":"Minimum-weight perfect-matching decoder with a PyMatching-style API.","methods":[{"name":"add_boundary_edge","signature":"(self, node: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"add_edge","signature":"(self, node1: 'int', node2: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"check_matrix","signature":"(self) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots: 'Any') -> 'np.ndarray'"},{"name":"decode_to_edges_array","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"edges","signature":"(self) -> 'list[tuple[int | None, int | None, dict]]'"},{"name":"from_check_matrix","signature":"(H: 'Any', weights: 'Any' = None, faults_matrix: 'Any' = None, **_: 'Any') -> 'Matching'"},{"name":"from_detector_error_model","signature":"(dem: 'Any') -> 'Matching'"},{"name":"from_stim_dem","signature":"(dem: 'Any') -> 'Matching'"}]},{"name":"NativeAutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, distance=5, noise_rate=0.01, batch_size=1, is_qldpc=False)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"batch_decode_strided","signature":"(self, /, syndromes, stride=None, require_alignment=False)"},{"name":"decode","signature":"(self, /, syndrome)"}]},{"name":"NeuralPredecoder","kind":"class","signature":"(n_input, n_output, n_hidden1=None, n_hidden2=None)","summary":"Lightweight MLP pre-decoder with Xavier initialization and SGD training.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"predict","signature":"(self, syndrome)"},{"name":"train","signature":"(self, syndromes, corrections, n_epochs, learning_rate=0.01)"}]},{"name":"OpenCLBatchDecoder","kind":"class","signature":"(*a, **k)","summary":"OpenCL batch decoder - requires source build with --features opencl.","methods":[{"name":"is_available","signature":"()"}]},{"name":"PredecodedDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, backend: 'str' = 'blossom')","summary":"Local-matching predecoder + exact/fast residual decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"Recommendation","kind":"class","signature":"(decoder: 'str', reason: 'str', family: 'str', priority: 'str', batch_size: 'int', hardware: 'dict[str, bool]', gpu_batched_bp: 'bool' = False, forced: 'bool' = False, graphlike: 'bool | None' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None) -> None","summary":"A decoder choice plus the reasoning and inputs that produced it.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"}]},{"name":"SlidingWindowDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, window_size=10, decay_factor=0.8, check_types=None, p_data=None, p_meas=None)","summary":"Sliding-window decoder with exponential decay weighting or fault-tolerant space-time decoding.","methods":[{"name":"decode","signature":"(self, syndrome=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"SpaceTimeDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_rounds, p_data, p_meas, n_qubits=None)","summary":"PyO3 wrapper for [\`SpaceTimeDecoder\`]: fault-tolerant temporal decoding via XOR-of-consecutive-rounds detectors matched on a 3D (space x time) graph, as opposed to [\`crate::sliding_window::PySlidingWindowDecoder\`] /…","methods":[{"name":"decode_history","signature":"(self, /)"},{"name":"reset","signature":"(self, /)"},{"name":"update","signature":"(self, /, round_syndrome)"}]},{"name":"SparseBlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Region-growing Sparse Blossom decoder with RadixHeap.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_with_weights","signature":"(self, syndrome, weights)"}]},{"name":"StreamingDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, history_size=10, check_types=None, p_data=None, p_meas=None)","summary":"Streaming decoder that accumulates syndromes over multiple rounds.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_rounds","signature":"(self, rounds)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"StreamingResult","kind":"class","signature":"(corrections: 'np.ndarray', syndromes: 'np.ndarray', telemetry: 'StreamingTelemetry', logical_flips: 'np.ndarray | None' = None) -> None","summary":"Outcome of a full streaming decode.","methods":[{"name":"is_valid","signature":"(self, H: 'Any', *, prefer_gpu: 'bool' = True) -> 'bool'"}]},{"name":"StreamingSession","kind":"class","signature":"(code_or_checks: 'Any', n_qubits: 'int | None' = None, *, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'None'","summary":"Incremental multi-round decode with a sliding commit buffer.","methods":[{"name":"committed_corrections","signature":"(self) -> 'np.ndarray'"},{"name":"committed_syndromes","signature":"(self) -> 'np.ndarray'"},{"name":"flush","signature":"(self) -> 'list[np.ndarray]'"},{"name":"push_round","signature":"(self, syndrome: 'Any') -> 'list[np.ndarray]'"},{"name":"reset","signature":"(self) -> 'None'"},{"name":"run","signature":"(self, syndrome_rounds: 'Any') -> 'StreamingResult'"}]},{"name":"StreamingTelemetry","kind":"class","signature":"(rounds: 'int' = 0, windows: 'int' = 0, committed: 'int' = 0, decode_seconds: 'float' = 0.0, per_window_seconds: 'list[float]' = , gpu: 'dict[str, int]' = , backend: 'dict[str, Any]' = , rounds_valid: 'int | None' = None) -> None","summary":"Real, measured counters for a streaming decode run.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"},{"name":"record_window","signature":"(self, seconds: 'float', rounds: 'int' = 1) -> 'None'"}]},{"name":"TwoStageDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_qubits=None, x_decoder='blossom', z_decoder='blossom')","summary":"C1-03: Correlated two-stage matching for CSS codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"UnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Production-ready Union-Find quantum error correction decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"Workbench","kind":"class","signature":"() -> 'None'","summary":"Controller for the QECTOR Workbench (load → benchmark → export).","methods":[{"name":"cancel_job","signature":"(self, job_id: 'str') -> 'str'"},{"name":"detect_backends","signature":"(self) -> 'dict'"},{"name":"environment_snapshot","signature":"(self) -> 'dict'"},{"name":"export_csv","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_json","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_pdf","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"get_job","signature":"(self, job_id: 'str') -> 'dict'"},{"name":"get_license_info","signature":"(self) -> 'dict'"},{"name":"job_artifact","signature":"(self, job_id: 'str') -> 'dict | None'"},{"name":"list_jobs","signature":"(self) -> 'list[dict]'"},{"name":"load_dem","signature":"(self, source: 'Any') -> 'dict'"},{"name":"load_stim","signature":"(self, source: 'Any') -> 'dict'"},{"name":"run_benchmark","signature":"(self, spec: 'dict', job: 'Job | None' = None) -> 'dict'"},{"name":"set_license_key","signature":"(self, key: 'str') -> 'None'"},{"name":"shutdown","signature":"(self) -> 'None'"},{"name":"submit_job","signature":"(self, spec: 'dict') -> 'str'"},{"name":"wait","signature":"(self, job_id: 'str', timeout: 'float | None' = None) -> 'dict'"}]},{"name":"backend","kind":"module","signature":"","summary":"qector_decoder_v3.backend - Workload-Aware AutoDecoder with Self-Auto-Debug & Multi-Tier Fallback.","methods":[]},{"name":"batched_bp_decode","kind":"function","signature":"(H: 'Any', syndromes: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True, early_stop: 'bool' = True, return_llr: 'bool' = False) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'","summary":"Decode a stack of syndromes with batched belief propagation.","methods":[]},{"name":"belief_matching","kind":"module","signature":"","summary":"qector_decoder_v3.belief_matching - belief-propagation + MWPM (belief-matching).","methods":[]},{"name":"benchmarking","kind":"module","signature":"","summary":"qector_decoder_v3.benchmarking - reproducible, statistically-honest benchmarks.","methods":[]},{"name":"bp_cupy","kind":"module","signature":"","summary":"qector_decoder_v3.bp_cupy - batched, GPU-resident belief propagation.","methods":[]},{"name":"bposd","kind":"module","signature":"","summary":"qector_decoder_v3.bposd - belief propagation + ordered-statistics decoding.","methods":[]},{"name":"changelog","kind":"function","signature":"() -> str","summary":"Return a human-readable changelog string for the loaded package.","methods":[]},{"name":"check_to_edges","kind":"function","signature":"(check_to_qubits)","summary":"Convert check_to_qubits to edge list.","methods":[]},{"name":"clear_decoder_cache","kind":"function","signature":"()","summary":"Clear the in-memory decoder and decoder pool LRU caches.","methods":[]},{"name":"codes","kind":"module","signature":"","summary":"qector_decoder_v3.codes - Code-family helpers.","methods":[]},{"name":"colour_code","kind":"module","signature":"","summary":"C1-04: Colour-code decoder.","methods":[]},{"name":"compute_detector_differences","kind":"function","signature":"(history)","summary":"Computes XOR detector differences across consecutive syndrome rounds: detector_t = raw_t ^ raw_{t-1}.","methods":[]},{"name":"cuda_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"decode_mmap","kind":"function","signature":"(syndrome_path: 'str', output_path: 'str', check_to_qubits, n_qubits: 'int', decoder_type: 'str' = 'cpu_batch', batch_size: 'int' = 65536, n_shots: 'int | None' = None, dtype: '_np.dtype' = dtype('uint8'), verbose: 'bool' = False)","summary":"Out-of-core batch decoding via memory-mapped arrays.","methods":[]},{"name":"decode_with_diagnostics","kind":"function","signature":"(code: 'Any', syndrome: 'Sequence[int]', kind: 'str' = 'blossom', decoder: 'Any' = None, logicals: 'np.ndarray | None' = None) -> 'DecodeResult'","summary":"Decode one syndrome and return a fully-populated :class:\`DecodeResult\`.","methods":[]},{"name":"decode_with_gnn","kind":"function","signature":"(check_to_qubits, n_qubits, syndrome, **kwargs) -> 'np.ndarray'","summary":"One-shot GNN-guided MWPM decode (see :class:\`GNNBeliefMatcher\`).","methods":[]},{"name":"decoder_cache","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_cache - LRU-decoder cache and factory functions.","methods":[]},{"name":"decoder_pool","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_pool - Multi-process decoder pool.","methods":[]},{"name":"dem","kind":"module","signature":"","summary":"qector_decoder_v3.dem - Stim Detector Error Model (DEM) loader.","methods":[]},{"name":"detect_hardware","kind":"function","signature":"() -> 'HardwareProfile'","summary":"Return the live :class:\`HardwareProfile\` (alias for \`\`HardwareProfile.detect\`\`).","methods":[]},{"name":"enforce_distance_cap","kind":"function","signature":"(distance) -> None","summary":"Enforce that *distance* does not exceed the active tier's cap.","methods":[]},{"name":"enforce_unlocked","kind":"function","signature":"() -> None","summary":"Hard-gate decode path when no valid license is active (QECTOR_ENFORCE=1).","methods":[]},{"name":"estimate_distance","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Python wrapper for estimate_distance.","methods":[]},{"name":"flush_usage","kind":"function","signature":"(customer_id: 'str | None' = None, api_key: 'str | None' = None) -> dict","summary":"Flush accumulated decode shots to the Stripe Billing Meter Events API.","methods":[]},{"name":"from_circuit","kind":"function","signature":"(circuit, decoder_type='blossom', **kwargs)","summary":"Build a decoder from a Stim circuit in one call.","methods":[]},{"name":"generate_biconnected_qldpc_checks","kind":"function","signature":"(n_qubits, degree)","summary":"Generate a bipolar / biconnected qLDPC Tanner graph parity check matrix.","methods":[]},{"name":"generate_parity_check_matrix","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Return the binary parity-check matrix \`\`H\`\` for *check_to_qubits*.","methods":[]},{"name":"generate_repetition_code_checks","kind":"function","signature":"(distance)","summary":"Generate a 1D repetition/chain code for testing.","methods":[]},{"name":"generate_ring_code_checks","kind":"function","signature":"(distance)","summary":"Generate a simple 1D ring code for testing.","methods":[]},{"name":"generate_space_time_surface_code_checks","kind":"function","signature":"(distance, rounds)","summary":"Generate 3D space-time surface code checks across multiple rounds.","methods":[]},{"name":"generate_surface_code_checks","kind":"function","signature":"(distance)","summary":"Generate compact periodic (toric) surface-code checks.","methods":[]},{"name":"generate_toy_code_checks","kind":"function","signature":"(distance)","summary":"Generate a toy code (not a proper quantum code) with d*d qubits for backward compatibility.","methods":[]},{"name":"generate_triangular_color_code_4_8_8_checks","kind":"function","signature":"(distance)","summary":"Generate 4.8.8 triangular color code parity check matrix.","methods":[]},{"name":"get_accumulated_shots","kind":"function","signature":"() -> int","summary":"Get total accumulated decode shots.","methods":[]},{"name":"get_backend","kind":"function","signature":"() -> 'GpuBackend'","summary":"Return the cached :class:\`GpuBackend\` capability snapshot (built once).","methods":[]},{"name":"get_decoder","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find')","summary":"Get a decoder, constructing it once and caching for reuse.","methods":[]},{"name":"get_decoder_pool","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find', n_workers: 'int | None' = None)","summary":"Get a multi-process :class:\`DecoderPool\`, constructed once and cached.","methods":[]},{"name":"get_latency_quantiles","kind":"function","signature":"()","summary":"\`get_latency_quantiles() -> tuple[float, float, float] | None\`","methods":[]},{"name":"get_license_info","kind":"function","signature":"() -> dict","summary":"Get active license info dictionary.","methods":[]},{"name":"gpu_available","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff CuPy is importable **and** a CUDA device is usable.","methods":[]},{"name":"gpu_backend","kind":"module","signature":"","summary":"qector_decoder_v3.gpu_backend - the CuPy GPU backend abstraction.","methods":[]},{"name":"has_cuda_rust","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff the Rust \`\`CUDABatchDecoder\`\` reports a usable device.","methods":[]},{"name":"has_cupy","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` if the \`\`cupy\`\` module can be imported.","methods":[]},{"name":"license","kind":"module","signature":"","summary":"","methods":[]},{"name":"opencl_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"predecoder","kind":"module","signature":"","summary":"qector_decoder_v3.predecoder - a fast, faithful matching predecoder.","methods":[]},{"name":"pymatching","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"pymatching_compat","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"qiskit_plugin","kind":"module","signature":"","summary":"QECTOR Qiskit Plugin - optional integration with the Qiskit ecosystem.","methods":[]},{"name":"recommend","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, *, graphlike: 'bool | None' = None) -> 'Recommendation'","summary":"Return a rich :class:\`Recommendation\` for a decoding problem.","methods":[]},{"name":"recommend_decoder","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None) -> 'str'","summary":"Return the *name* of the recommended decoder class (see :func:\`recommend\`).","methods":[]},{"name":"record_shots","kind":"function","signature":"(count: int) -> None","summary":"Record decoding shots into telemetry buffer.","methods":[]},{"name":"rest_api","kind":"module","signature":"","summary":"Minimal REST API for QECTOR.","methods":[]},{"name":"result","kind":"module","signature":"","summary":"qector_decoder_v3.result - Rich decode results, diagnostics and debug output.","methods":[]},{"name":"routing","kind":"module","signature":"","summary":"qector_decoder_v3.routing - intelligent decoder router / auto-selection.","methods":[]},{"name":"run_mcp_server","kind":"function","signature":"()","summary":"Python signature: \`\`\`python run_mcp_server() \`\`\`","methods":[]},{"name":"set_license_key","kind":"function","signature":"(key: str) -> None","summary":"Set the global QECTOR license key for tier enforcement.","methods":[]},{"name":"set_license_key_file","kind":"function","signature":"(path) -> None","summary":"Load a license key from *path* and activate it.","methods":[]},{"name":"sinter_compat","kind":"module","signature":"","summary":"qector_decoder_v3.sinter_compat - plug QECTOR into Sinter.","methods":[]},{"name":"sliding_window_decode","kind":"function","signature":"(syndrome_rounds: 'Any', code: 'Any' = None, *, check_to_qubits: 'Sequence[Sequence[int]] | None' = None, n_qubits: 'int | None' = None, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'StreamingResult'","summary":"Decode a whole multi-round syndrome stream window-by-window.","methods":[]},{"name":"sparse_blossom_radix_neighbors","kind":"function","signature":"(decoder, defects, k=8)","summary":"Return the k-nearest candidate edges (sorted by distance) for \`defects\`.","methods":[]},{"name":"start_metrics_server","kind":"function","signature":"(addr='127.0.0.1:9090')","summary":"Start the Prometheus metrics HTTP server.","methods":[]},{"name":"stim_compat","kind":"module","signature":"","summary":"Stim compatibility layer - Conversion and wrappers for the Stim ecosystem.","methods":[]},{"name":"streaming","kind":"module","signature":"","summary":"qector_decoder_v3.streaming - a higher-level Python streaming / multi-round decode *orchestration* layer.","methods":[]},{"name":"stripe_integration","kind":"module","signature":"","summary":"QECTOR Decoder v3 - Full Stripe API & Webhook License Fulfillment Integration","methods":[]},{"name":"verify_license_token","kind":"function","signature":"(token: 'str', customer_email: 'str' = '') -> 'bool'","summary":"Verifies the license token signature completely offline using Ed25519.","methods":[]},{"name":"workbench","kind":"module","signature":"","summary":"qector_decoder_v3.workbench - the QECTOR Workbench application controller.","methods":[]}]`),m={package:"qector-decoder-v3",version:v,generated:w,items:q},D=["class","function","module"];function C(){const[a,l]=i.useState(""),[t,u]=i.useState("all"),o=m.items,c=i.useMemo(()=>{const r=a.trim().toLowerCase();return o.filter(s=>(t==="all"||s.kind===t)&&(!r||s.name.toLowerCase().includes(r)||s.summary.toLowerCase().includes(r)))},[o,a,t]);return e.jsx("section",{className:"section-padding pb-24","aria-labelledby":"api-index",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{id:"api-index",className:"text-3xl font-bold mb-2",children:"API index"}),e.jsxs("p",{className:"text-secondary text-sm mb-6 max-w-3xl",children:["Generated from the published ",e.jsxs("code",{className:"font-mono text-cyan-200",children:[m.package," ",m.version]})," wheel on ",m.generated,": every public name in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"qector_decoder_v3"}),", with the signature Python reports and the first paragraph of its docstring."," ",o.length," names."]}),e.jsxs("div",{className:"flex flex-wrap gap-3 mb-6",children:[e.jsx("label",{className:"sr-only",htmlFor:"api-q",children:"Filter the API index"}),e.jsx("input",{id:"api-q",type:"search",value:a,onChange:r=>l(r.target.value),placeholder:"Filter by name or description",className:"flex-1 min-w-[14rem] bg-surface border border-gridline rounded-lg px-3 py-2 text-sm text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300/50"}),e.jsx("div",{className:"flex gap-1",role:"group","aria-label":"Kind",children:["all",...D].map(r=>e.jsx("button",{type:"button","aria-pressed":t===r,onClick:()=>u(r),className:`px-3 py-2 rounded-lg text-xs font-semibold capitalize border ${t===r?"border-cyan-300/50 text-cyan-300 bg-cyan-300/10":"border-gridline text-secondary hover:text-primary"}`,children:{all:"All",class:"Classes",function:"Functions",module:"Modules"}[r]},r))})]}),e.jsxs("ul",{className:"space-y-3",children:[c.map(r=>e.jsxs("li",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsx("span",{className:"text-[10px] uppercase tracking-wider font-semibold text-muted-foreground",children:r.kind}),e.jsxs("code",{className:"font-mono text-cyan-300 text-sm break-all",children:[r.name,e.jsx("span",{className:"text-secondary",children:r.signature})]})]}),r.summary&&e.jsx("p",{className:"text-secondary text-sm mt-2 leading-relaxed",children:r.summary}),r.methods.length>0&&e.jsxs("details",{className:"mt-2",children:[e.jsxs("summary",{className:"text-xs text-muted-foreground cursor-pointer hover:text-cyan-300",children:[r.methods.length," public methods"]}),e.jsx("ul",{className:"mt-2 grid md:grid-cols-2 gap-x-6 gap-y-1",children:r.methods.map(s=>e.jsx("li",{children:e.jsxs("code",{className:"font-mono text-xs text-primary break-all",children:[s.name,e.jsx("span",{className:"text-muted-foreground",children:s.signature})]})},s.name))})]})]},r.name)),c.length===0&&e.jsx("li",{className:"text-muted-foreground text-sm",children:"No names match."})]})]})})}function B(){const[a,l]=i.useState(""),[t,u]=i.useState("BlossomDecoder"),o=i.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],r=c.filter(n=>n.name.toLowerCase().includes(a.toLowerCase())),s=n=>{u(t===n?null:n)};return i.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&o.current&&p.fromTo(o.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"17 Decoder Configurations · Stim DEM · Generated API Index"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(g,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. The guided examples below are illustrative; the API index at the end of this page is generated from the published 1.0.1 package."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:n=>l(n.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(f,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(y,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[r.map(n=>e.jsxs("button",{"aria-expanded":t===n.name,onClick:()=>s(n.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===n.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:n.name}),t===n.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(x,{className:"w-4 h-4 text-muted-foreground"})]},n.name)),r.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const n=c.find(d=>d.name===t);return n?e.jsxs("div",{ref:o,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:n.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:n.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(N,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(_,{code:n.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(k,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:n.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(_,{code:n.example,language:"python",filename:`${n.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})}),e.jsx(C,{})]})}export{B as default}; diff --git a/assets/TechnicalReference-BV2uErpt.js b/assets/TechnicalReference-BV2uErpt.js deleted file mode 100644 index e29812a8..00000000 --- a/assets/TechnicalReference-BV2uErpt.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-CpdATiEY.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-BcuWSg0l.js b/assets/TechnicalReference-BcuWSg0l.js deleted file mode 100644 index cc0df46f..00000000 --- a/assets/TechnicalReference-BcuWSg0l.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-Bh9DBCb3.js";import{N as h}from"./NeuralReveal-D-EQoOl2.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-BgUx638a.js b/assets/TechnicalReference-BgUx638a.js deleted file mode 100644 index c63e787e..00000000 --- a/assets/TechnicalReference-BgUx638a.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-DlmjLVYe.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-Bu46t5Vm.js b/assets/TechnicalReference-Bu46t5Vm.js deleted file mode 100644 index f29840b0..00000000 --- a/assets/TechnicalReference-Bu46t5Vm.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-DkYdPRY7.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-C9HpEUdH.js b/assets/TechnicalReference-C9HpEUdH.js deleted file mode 100644 index 5d6ded99..00000000 --- a/assets/TechnicalReference-C9HpEUdH.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-BcbVjARk.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-CBJ6Ke79.js b/assets/TechnicalReference-CBJ6Ke79.js deleted file mode 100644 index f7a7f860..00000000 --- a/assets/TechnicalReference-CBJ6Ke79.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-BN-vOeL2.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-CGYLPxss.js b/assets/TechnicalReference-CGYLPxss.js deleted file mode 100644 index 59be61dc..00000000 --- a/assets/TechnicalReference-CGYLPxss.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-BUYYSLdX.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-CSIZ4Dc5.js b/assets/TechnicalReference-CSIZ4Dc5.js deleted file mode 100644 index 0f1f7fec..00000000 --- a/assets/TechnicalReference-CSIZ4Dc5.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-CxWP17m6.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-CUtSwYSY.js b/assets/TechnicalReference-CUtSwYSY.js deleted file mode 100644 index 9f39f54a..00000000 --- a/assets/TechnicalReference-CUtSwYSY.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,C as _}from"./index-DayaklK-.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{g as p}from"./vendor-gsap-a3sj5zmn.js";import{q as f,h as y,r as b,s as x,T as N,B as k}from"./vendor-ui-B8TlNU4J.js";const v="1.0.1",w="2026-11-06",q=JSON.parse(`[{"name":"AmbiguityClusterDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.05, ambig_threshold=0.5, max_cluster_size=12)","summary":"C1-02: BP + ambiguity-clustered exact decoding for qLDPC codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"AutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, config: 'BackendConfig | None' = None)","summary":"Workload-aware, self-debugging decoder that routes to CUDA / OpenCL / Rayon / CPU / Fallback.","methods":[{"name":"auto_select","signature":"(checks, n_qubits, batch_size=1)"},{"name":"available_backends","signature":"(self) -> 'list[str]'"},{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"calibrate","signature":"(self, sizes=(64, 256, 1024, 4096, 16384), repeats: 'int' = 3, seed: 'int' = 0)"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"diagnostics","signature":"(self) -> 'dict'"},{"name":"reset_backend_health","signature":"(self) -> 'None'"},{"name":"select","signature":"(self, batch_size: 'int') -> 'str'"}]},{"name":"AutoRouter","kind":"class","signature":"(*, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, error_rate: 'float' = 0.05, code_family: 'Any' = None, use_native_auto: 'bool' = True) -> 'None'","summary":"Construct, cache, and dispatch the policy-selected decoder for a problem.","methods":[{"name":"decode","signature":"(self, checks_or_H: 'Any', syndromes: 'Any', **ctx: 'Any') -> 'np.ndarray'"},{"name":"explain","signature":"(self, checks_or_H: 'Any' = None, syndromes: 'Any' = None, **ctx: 'Any') -> 'dict[str, Any]'"}]},{"name":"BPOSDDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.1, bp_method=None, osd_order=None)","summary":"Belief Propagation + Ordered Statistics Decoding.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"bp_decode","signature":"(self, syndrome, max_iterations=20)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"Backend","kind":"class","signature":"()","summary":"Backend identifiers & Fallback Tiers.","methods":[]},{"name":"BackendConfig","kind":"class","signature":"(rayon_threshold: 'int' = 8, gpu_threshold: 'int' = 4096, allow_gpu: 'bool' = True, prefer: 'str' = 'cuda', force: 'str | None' = None, enable_auto_debug: 'bool' = True) -> None","summary":"Tunable thresholds and policy for :class:\`AutoDecoder\`.","methods":[]},{"name":"BatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Parallel batch decoder using Rayon (Rust data parallelism).","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"parallel_batch_decode","signature":"(self, syndromes)"}]},{"name":"BatchedBpDecoder","kind":"class","signature":"(H: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True) -> 'None'","summary":"Batched belief-propagation decoder over a fixed GF(2) check matrix \`\`H\`\`.","methods":[{"name":"decode_batch","signature":"(self, syndromes: 'Any', *, return_llr: 'bool' = False, early_stop: 'bool' = True) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'"}]},{"name":"BeliefMatching","kind":"class","signature":"(matrices: '_Matrices', max_iter: 'int' = 30, bp_shortcut: 'bool' = False)","summary":"Belief-propagation + minimum-weight perfect matching decoder.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_numpy_h","signature":"(H, error_rate: 'float' = 0.05, max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_stim_circuit","signature":"(circuit, max_iter: 'int' = 20) -> 'BeliefMatching'"}]},{"name":"BenchmarkSuite","kind":"class","signature":"(check_to_qubits, n_qubits=None, n_samples=10000, seed=42)","summary":"Production benchmark suite. Wraps Rust-native benchmarking.","methods":[{"name":"run","signature":"(self)"},{"name":"save","signature":"(self, path, results)"}]},{"name":"BlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Minimum-Weight Perfect Matching (MWPM) decoder via Edmonds' Blossom algorithm.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_weighted","signature":"(self, syndromes, weights)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, weights)"}]},{"name":"BpOsdDecoder","kind":"class","signature":"(H: 'Any', error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, ms_scale: 'float' = 1.0, osd_order: 'int' = 0, bp_method: 'str' = 'sum_product', use_gpu: 'Any' = None, max_latency_ms: 'float | None' = None, damping: 'float' = 0.0, osd_lambda: 'Any' = None)","summary":"BP + ordered-statistics decoder for general GF(2) check matrices.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix: 'Any' = None) -> 'np.ndarray'"}]},{"name":"CPUBatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"SIMD-friendly CPU batch decoder with pooled buffers and SoA transposition.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_par","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"CUDABatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"is_available","signature":"()"},{"name":"reset","signature":"(self, /)"}]},{"name":"CUDABpOsdDecoder","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"}]},{"name":"ColourCodeDecoder","kind":"class","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0, method: 'str' = 'bposd')","summary":"Colour-code decoder: BP-OSD over the undecomposed hypergraph DEM.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"},{"name":"from_stim_circuit","signature":"(circuit: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"}]},{"name":"DecodeResult","kind":"class","signature":"(correction: 'np.ndarray', syndrome: 'np.ndarray', n_qubits: 'int', n_checks: 'int', weight: 'float | None' = None, logical_flips: 'np.ndarray | None' = None, decode_seconds: 'float | None' = None, backend: 'str' = 'cpu', fallback: 'bool' = False, fallback_reason: 'str' = '', syndrome_valid: 'bool | None' = None, metadata: 'dict' = ) -> None","summary":"Result of decoding a single syndrome, with diagnostics and metadata.","methods":[{"name":"as_uint8","signature":"(self) -> 'np.ndarray'"},{"name":"explain","signature":"(self) -> 'str'"},{"name":"to_dict","signature":"(self) -> 'dict'"},{"name":"to_json","signature":"(self, indent: 'int' = 2) -> 'str'"},{"name":"verify","signature":"(self, H: 'np.ndarray') -> 'bool'"}]},{"name":"DecoderName","kind":"class","signature":"()","summary":"String identifiers for the routable decoders.","methods":[]},{"name":"DecoderPool","kind":"class","signature":"(check_to_qubits=None, n_qubits=None, decoder_type: 'str' = 'fast_union_find', n_workers: 'int | None' = None, num_threads: 'int | None' = None)","summary":"Multi-process decoder pool for parallel syndrome decoding.","methods":[{"name":"close","signature":"(self)"},{"name":"decode","signature":"(self, syndromes) -> 'np.ndarray'"}]},{"name":"DetectorGraph","kind":"class","signature":"(check_to_qubits, syndrome, check_positions=None, check_types=None, base_weights=None, n_qubits=None)","summary":"Detector graph used by the GNN and hybrid decoder paths.","methods":[{"name":"update_syndrome","signature":"(self, syndrome)"}]},{"name":"FastUnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Union-Find with a zero-allocation hot path, reusable buffers and a C ABI.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"GNNBeliefMatcher","kind":"class","signature":"(check_to_qubits, n_qubits=None, *, gnn=None, hidden_size: 'int' = 32, n_layers: 'int' = 2, train_samples: 'int' = 0, error_rate: 'float' = 0.05, train_epochs: 'int' = 3, seed=None)","summary":"End-to-end GNN-guided minimum-weight perfect matching decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"GNNPredecoder","kind":"class","signature":"(node_feat_dim=None, edge_feat_dim=None, hidden_size=16, n_layers=2)","summary":"Graph Neural Network Pre-Decoder for dynamic edge weight prediction.","methods":[{"name":"forward","signature":"(self, graph)"},{"name":"load_weights","signature":"(self, path)"},{"name":"new_standard","signature":"(hidden_size=16, n_layers=2)"},{"name":"predict_with_node_probs","signature":"(self, graph)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, graphs, targets, n_epochs)"}]},{"name":"GNNTrainer","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate=0.1)","summary":"End-to-end GNN training pipeline with Blossom teacher model.","methods":[{"name":"generate_dataset","signature":"(self, n_samples)"},{"name":"train","signature":"(self, gnn, n_samples, n_epochs)"},{"name":"train_bp","signature":"(self, gnn, n_samples, n_epochs, max_bp_iter=20)"}]},{"name":"HardwareProfile","kind":"class","signature":"(cuda_rust: 'bool' = False, gpu: 'bool' = False) -> None","summary":"Resolved view of the GPU capability the policy should assume.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, bool]'"},{"name":"detect","signature":"() -> 'HardwareProfile'"}]},{"name":"HybridCascadeDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None, max_accept_weight=None, escalation=None, error_rate=None)","summary":"Hybrid cascading decoder: Union-Find pre-filter + Blossom/BP-OSD escalation.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_timed","signature":"(self, syndromes, max_latency_ms=10.0)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"HybridDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, check_positions=None, check_types=None, base_weights=None, gnn_hidden_size=64, gnn_n_layers=3)","summary":"GNN Pre-Decoder + SparseBlossom hybrid decoder.","methods":[{"name":"batch_decode_hybrid","signature":"(self, syndromes)"},{"name":"batch_decode_standard","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_heuristic","signature":"(self, syndrome)"},{"name":"decode_hybrid","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_standard","signature":"(self, syndrome)"},{"name":"load_weights","signature":"(self, path)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, n_samples, n_epochs, error_rate=0.1)"},{"name":"train_bp","signature":"(self, n_samples, n_epochs, error_rate=0.1, max_bp_iter=20)"}]},{"name":"LERBenchmark","kind":"class","signature":"()","summary":"Logical Error Rate benchmark suite.","methods":[{"name":"run_all","signature":"(self)"}]},{"name":"LookupTableDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Exact lookup-table decoder with UnionFind fallback.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"build_table","signature":"(self, max_entries)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"MAX_WORKERS","kind":"constant","signature":"","summary":"","methods":[]},{"name":"Matching","kind":"class","signature":"(H: 'Any' = None, weights: 'Any' = None, faults_matrix: 'Any' = None)","summary":"Minimum-weight perfect-matching decoder with a PyMatching-style API.","methods":[{"name":"add_boundary_edge","signature":"(self, node: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"add_edge","signature":"(self, node1: 'int', node2: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"check_matrix","signature":"(self) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots: 'Any') -> 'np.ndarray'"},{"name":"decode_to_edges_array","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"edges","signature":"(self) -> 'list[tuple[int | None, int | None, dict]]'"},{"name":"from_check_matrix","signature":"(H: 'Any', weights: 'Any' = None, faults_matrix: 'Any' = None, **_: 'Any') -> 'Matching'"},{"name":"from_detector_error_model","signature":"(dem: 'Any') -> 'Matching'"},{"name":"from_stim_dem","signature":"(dem: 'Any') -> 'Matching'"}]},{"name":"NativeAutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, distance=5, noise_rate=0.01, batch_size=1, is_qldpc=False)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"batch_decode_strided","signature":"(self, /, syndromes, stride=None, require_alignment=False)"},{"name":"decode","signature":"(self, /, syndrome)"}]},{"name":"NeuralPredecoder","kind":"class","signature":"(n_input, n_output, n_hidden1=None, n_hidden2=None)","summary":"Lightweight MLP pre-decoder with Xavier initialization and SGD training.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"predict","signature":"(self, syndrome)"},{"name":"train","signature":"(self, syndromes, corrections, n_epochs, learning_rate=0.01)"}]},{"name":"OpenCLBatchDecoder","kind":"class","signature":"(*a, **k)","summary":"OpenCL batch decoder - requires source build with --features opencl.","methods":[{"name":"is_available","signature":"()"}]},{"name":"PredecodedDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, backend: 'str' = 'blossom')","summary":"Local-matching predecoder + exact/fast residual decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"Recommendation","kind":"class","signature":"(decoder: 'str', reason: 'str', family: 'str', priority: 'str', batch_size: 'int', hardware: 'dict[str, bool]', gpu_batched_bp: 'bool' = False, forced: 'bool' = False, graphlike: 'bool | None' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None) -> None","summary":"A decoder choice plus the reasoning and inputs that produced it.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"}]},{"name":"SlidingWindowDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, window_size=10, decay_factor=0.8, check_types=None, p_data=None, p_meas=None)","summary":"Sliding-window decoder with exponential decay weighting or fault-tolerant space-time decoding.","methods":[{"name":"decode","signature":"(self, syndrome=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"SpaceTimeDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_rounds, p_data, p_meas, n_qubits=None)","summary":"PyO3 wrapper for [\`SpaceTimeDecoder\`]: fault-tolerant temporal decoding via XOR-of-consecutive-rounds detectors matched on a 3D (space x time) graph, as opposed to [\`crate::sliding_window::PySlidingWindowDecoder\`] /…","methods":[{"name":"decode_history","signature":"(self, /)"},{"name":"reset","signature":"(self, /)"},{"name":"update","signature":"(self, /, round_syndrome)"}]},{"name":"SparseBlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Region-growing Sparse Blossom decoder with RadixHeap.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_with_weights","signature":"(self, syndrome, weights)"}]},{"name":"StreamingDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, history_size=10, check_types=None, p_data=None, p_meas=None)","summary":"Streaming decoder that accumulates syndromes over multiple rounds.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_rounds","signature":"(self, rounds)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"StreamingResult","kind":"class","signature":"(corrections: 'np.ndarray', syndromes: 'np.ndarray', telemetry: 'StreamingTelemetry', logical_flips: 'np.ndarray | None' = None) -> None","summary":"Outcome of a full streaming decode.","methods":[{"name":"is_valid","signature":"(self, H: 'Any', *, prefer_gpu: 'bool' = True) -> 'bool'"}]},{"name":"StreamingSession","kind":"class","signature":"(code_or_checks: 'Any', n_qubits: 'int | None' = None, *, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'None'","summary":"Incremental multi-round decode with a sliding commit buffer.","methods":[{"name":"committed_corrections","signature":"(self) -> 'np.ndarray'"},{"name":"committed_syndromes","signature":"(self) -> 'np.ndarray'"},{"name":"flush","signature":"(self) -> 'list[np.ndarray]'"},{"name":"push_round","signature":"(self, syndrome: 'Any') -> 'list[np.ndarray]'"},{"name":"reset","signature":"(self) -> 'None'"},{"name":"run","signature":"(self, syndrome_rounds: 'Any') -> 'StreamingResult'"}]},{"name":"StreamingTelemetry","kind":"class","signature":"(rounds: 'int' = 0, windows: 'int' = 0, committed: 'int' = 0, decode_seconds: 'float' = 0.0, per_window_seconds: 'list[float]' = , gpu: 'dict[str, int]' = , backend: 'dict[str, Any]' = , rounds_valid: 'int | None' = None) -> None","summary":"Real, measured counters for a streaming decode run.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"},{"name":"record_window","signature":"(self, seconds: 'float', rounds: 'int' = 1) -> 'None'"}]},{"name":"TwoStageDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_qubits=None, x_decoder='blossom', z_decoder='blossom')","summary":"C1-03: Correlated two-stage matching for CSS codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"UnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Production-ready Union-Find quantum error correction decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"Workbench","kind":"class","signature":"() -> 'None'","summary":"Controller for the QECTOR Workbench (load → benchmark → export).","methods":[{"name":"cancel_job","signature":"(self, job_id: 'str') -> 'str'"},{"name":"detect_backends","signature":"(self) -> 'dict'"},{"name":"environment_snapshot","signature":"(self) -> 'dict'"},{"name":"export_csv","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_json","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_pdf","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"get_job","signature":"(self, job_id: 'str') -> 'dict'"},{"name":"get_license_info","signature":"(self) -> 'dict'"},{"name":"job_artifact","signature":"(self, job_id: 'str') -> 'dict | None'"},{"name":"list_jobs","signature":"(self) -> 'list[dict]'"},{"name":"load_dem","signature":"(self, source: 'Any') -> 'dict'"},{"name":"load_stim","signature":"(self, source: 'Any') -> 'dict'"},{"name":"run_benchmark","signature":"(self, spec: 'dict', job: 'Job | None' = None) -> 'dict'"},{"name":"set_license_key","signature":"(self, key: 'str') -> 'None'"},{"name":"shutdown","signature":"(self) -> 'None'"},{"name":"submit_job","signature":"(self, spec: 'dict') -> 'str'"},{"name":"wait","signature":"(self, job_id: 'str', timeout: 'float | None' = None) -> 'dict'"}]},{"name":"backend","kind":"module","signature":"","summary":"qector_decoder_v3.backend - Workload-Aware AutoDecoder with Self-Auto-Debug & Multi-Tier Fallback.","methods":[]},{"name":"batched_bp_decode","kind":"function","signature":"(H: 'Any', syndromes: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True, early_stop: 'bool' = True, return_llr: 'bool' = False) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'","summary":"Decode a stack of syndromes with batched belief propagation.","methods":[]},{"name":"belief_matching","kind":"module","signature":"","summary":"qector_decoder_v3.belief_matching - belief-propagation + MWPM (belief-matching).","methods":[]},{"name":"benchmarking","kind":"module","signature":"","summary":"qector_decoder_v3.benchmarking - reproducible, statistically-honest benchmarks.","methods":[]},{"name":"bp_cupy","kind":"module","signature":"","summary":"qector_decoder_v3.bp_cupy - batched, GPU-resident belief propagation.","methods":[]},{"name":"bposd","kind":"module","signature":"","summary":"qector_decoder_v3.bposd - belief propagation + ordered-statistics decoding.","methods":[]},{"name":"changelog","kind":"function","signature":"() -> str","summary":"Return a human-readable changelog string for the loaded package.","methods":[]},{"name":"check_to_edges","kind":"function","signature":"(check_to_qubits)","summary":"Convert check_to_qubits to edge list.","methods":[]},{"name":"clear_decoder_cache","kind":"function","signature":"()","summary":"Clear the in-memory decoder and decoder pool LRU caches.","methods":[]},{"name":"codes","kind":"module","signature":"","summary":"qector_decoder_v3.codes - Code-family helpers.","methods":[]},{"name":"colour_code","kind":"module","signature":"","summary":"C1-04: Colour-code decoder.","methods":[]},{"name":"compute_detector_differences","kind":"function","signature":"(history)","summary":"Computes XOR detector differences across consecutive syndrome rounds: detector_t = raw_t ^ raw_{t-1}.","methods":[]},{"name":"cuda_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"decode_mmap","kind":"function","signature":"(syndrome_path: 'str', output_path: 'str', check_to_qubits, n_qubits: 'int', decoder_type: 'str' = 'cpu_batch', batch_size: 'int' = 65536, n_shots: 'int | None' = None, dtype: '_np.dtype' = dtype('uint8'), verbose: 'bool' = False)","summary":"Out-of-core batch decoding via memory-mapped arrays.","methods":[]},{"name":"decode_with_diagnostics","kind":"function","signature":"(code: 'Any', syndrome: 'Sequence[int]', kind: 'str' = 'blossom', decoder: 'Any' = None, logicals: 'np.ndarray | None' = None) -> 'DecodeResult'","summary":"Decode one syndrome and return a fully-populated :class:\`DecodeResult\`.","methods":[]},{"name":"decode_with_gnn","kind":"function","signature":"(check_to_qubits, n_qubits, syndrome, **kwargs) -> 'np.ndarray'","summary":"One-shot GNN-guided MWPM decode (see :class:\`GNNBeliefMatcher\`).","methods":[]},{"name":"decoder_cache","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_cache - LRU-decoder cache and factory functions.","methods":[]},{"name":"decoder_pool","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_pool - Multi-process decoder pool.","methods":[]},{"name":"dem","kind":"module","signature":"","summary":"qector_decoder_v3.dem - Stim Detector Error Model (DEM) loader.","methods":[]},{"name":"detect_hardware","kind":"function","signature":"() -> 'HardwareProfile'","summary":"Return the live :class:\`HardwareProfile\` (alias for \`\`HardwareProfile.detect\`\`).","methods":[]},{"name":"enforce_distance_cap","kind":"function","signature":"(distance) -> None","summary":"Enforce that *distance* does not exceed the active tier's cap.","methods":[]},{"name":"enforce_unlocked","kind":"function","signature":"() -> None","summary":"Hard-gate decode path when no valid license is active (QECTOR_ENFORCE=1).","methods":[]},{"name":"estimate_distance","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Python wrapper for estimate_distance.","methods":[]},{"name":"flush_usage","kind":"function","signature":"(customer_id: 'str | None' = None, api_key: 'str | None' = None) -> dict","summary":"Flush accumulated decode shots to the Stripe Billing Meter Events API.","methods":[]},{"name":"from_circuit","kind":"function","signature":"(circuit, decoder_type='blossom', **kwargs)","summary":"Build a decoder from a Stim circuit in one call.","methods":[]},{"name":"generate_biconnected_qldpc_checks","kind":"function","signature":"(n_qubits, degree)","summary":"Generate a bipolar / biconnected qLDPC Tanner graph parity check matrix.","methods":[]},{"name":"generate_parity_check_matrix","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Return the binary parity-check matrix \`\`H\`\` for *check_to_qubits*.","methods":[]},{"name":"generate_repetition_code_checks","kind":"function","signature":"(distance)","summary":"Generate a 1D repetition/chain code for testing.","methods":[]},{"name":"generate_ring_code_checks","kind":"function","signature":"(distance)","summary":"Generate a simple 1D ring code for testing.","methods":[]},{"name":"generate_space_time_surface_code_checks","kind":"function","signature":"(distance, rounds)","summary":"Generate 3D space-time surface code checks across multiple rounds.","methods":[]},{"name":"generate_surface_code_checks","kind":"function","signature":"(distance)","summary":"Generate compact periodic (toric) surface-code checks.","methods":[]},{"name":"generate_toy_code_checks","kind":"function","signature":"(distance)","summary":"Generate a toy code (not a proper quantum code) with d*d qubits for backward compatibility.","methods":[]},{"name":"generate_triangular_color_code_4_8_8_checks","kind":"function","signature":"(distance)","summary":"Generate 4.8.8 triangular color code parity check matrix.","methods":[]},{"name":"get_accumulated_shots","kind":"function","signature":"() -> int","summary":"Get total accumulated decode shots.","methods":[]},{"name":"get_backend","kind":"function","signature":"() -> 'GpuBackend'","summary":"Return the cached :class:\`GpuBackend\` capability snapshot (built once).","methods":[]},{"name":"get_decoder","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find')","summary":"Get a decoder, constructing it once and caching for reuse.","methods":[]},{"name":"get_decoder_pool","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find', n_workers: 'int | None' = None)","summary":"Get a multi-process :class:\`DecoderPool\`, constructed once and cached.","methods":[]},{"name":"get_latency_quantiles","kind":"function","signature":"()","summary":"\`get_latency_quantiles() -> tuple[float, float, float] | None\`","methods":[]},{"name":"get_license_info","kind":"function","signature":"() -> dict","summary":"Get active license info dictionary.","methods":[]},{"name":"gpu_available","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff CuPy is importable **and** a CUDA device is usable.","methods":[]},{"name":"gpu_backend","kind":"module","signature":"","summary":"qector_decoder_v3.gpu_backend - the CuPy GPU backend abstraction.","methods":[]},{"name":"has_cuda_rust","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff the Rust \`\`CUDABatchDecoder\`\` reports a usable device.","methods":[]},{"name":"has_cupy","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` if the \`\`cupy\`\` module can be imported.","methods":[]},{"name":"license","kind":"module","signature":"","summary":"","methods":[]},{"name":"opencl_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"predecoder","kind":"module","signature":"","summary":"qector_decoder_v3.predecoder - a fast, faithful matching predecoder.","methods":[]},{"name":"pymatching","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"pymatching_compat","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"qiskit_plugin","kind":"module","signature":"","summary":"QECTOR Qiskit Plugin - optional integration with the Qiskit ecosystem.","methods":[]},{"name":"recommend","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, *, graphlike: 'bool | None' = None) -> 'Recommendation'","summary":"Return a rich :class:\`Recommendation\` for a decoding problem.","methods":[]},{"name":"recommend_decoder","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None) -> 'str'","summary":"Return the *name* of the recommended decoder class (see :func:\`recommend\`).","methods":[]},{"name":"record_shots","kind":"function","signature":"(count: int) -> None","summary":"Record decoding shots into telemetry buffer.","methods":[]},{"name":"rest_api","kind":"module","signature":"","summary":"Minimal REST API for QECTOR.","methods":[]},{"name":"result","kind":"module","signature":"","summary":"qector_decoder_v3.result - Rich decode results, diagnostics and debug output.","methods":[]},{"name":"routing","kind":"module","signature":"","summary":"qector_decoder_v3.routing - intelligent decoder router / auto-selection.","methods":[]},{"name":"run_mcp_server","kind":"function","signature":"()","summary":"Python signature: \`\`\`python run_mcp_server() \`\`\`","methods":[]},{"name":"set_license_key","kind":"function","signature":"(key: str) -> None","summary":"Set the global QECTOR license key for tier enforcement.","methods":[]},{"name":"set_license_key_file","kind":"function","signature":"(path) -> None","summary":"Load a license key from *path* and activate it.","methods":[]},{"name":"sinter_compat","kind":"module","signature":"","summary":"qector_decoder_v3.sinter_compat - plug QECTOR into Sinter.","methods":[]},{"name":"sliding_window_decode","kind":"function","signature":"(syndrome_rounds: 'Any', code: 'Any' = None, *, check_to_qubits: 'Sequence[Sequence[int]] | None' = None, n_qubits: 'int | None' = None, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'StreamingResult'","summary":"Decode a whole multi-round syndrome stream window-by-window.","methods":[]},{"name":"sparse_blossom_radix_neighbors","kind":"function","signature":"(decoder, defects, k=8)","summary":"Return the k-nearest candidate edges (sorted by distance) for \`defects\`.","methods":[]},{"name":"start_metrics_server","kind":"function","signature":"(addr='127.0.0.1:9090')","summary":"Start the Prometheus metrics HTTP server.","methods":[]},{"name":"stim_compat","kind":"module","signature":"","summary":"Stim compatibility layer - Conversion and wrappers for the Stim ecosystem.","methods":[]},{"name":"streaming","kind":"module","signature":"","summary":"qector_decoder_v3.streaming - a higher-level Python streaming / multi-round decode *orchestration* layer.","methods":[]},{"name":"stripe_integration","kind":"module","signature":"","summary":"QECTOR Decoder v3 - Full Stripe API & Webhook License Fulfillment Integration","methods":[]},{"name":"verify_license_token","kind":"function","signature":"(token: 'str', customer_email: 'str' = '') -> 'bool'","summary":"Verifies the license token signature completely offline using Ed25519.","methods":[]},{"name":"workbench","kind":"module","signature":"","summary":"qector_decoder_v3.workbench - the QECTOR Workbench application controller.","methods":[]}]`),m={package:"qector-decoder-v3",version:v,generated:w,items:q},D=["class","function","module"];function C(){const[a,l]=i.useState(""),[t,u]=i.useState("all"),o=m.items,c=i.useMemo(()=>{const r=a.trim().toLowerCase();return o.filter(s=>(t==="all"||s.kind===t)&&(!r||s.name.toLowerCase().includes(r)||s.summary.toLowerCase().includes(r)))},[o,a,t]);return e.jsx("section",{className:"section-padding pb-24","aria-labelledby":"api-index",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{id:"api-index",className:"text-3xl font-bold mb-2",children:"API index"}),e.jsxs("p",{className:"text-secondary text-sm mb-6 max-w-3xl",children:["Generated from the published ",e.jsxs("code",{className:"font-mono text-cyan-200",children:[m.package," ",m.version]})," wheel on ",m.generated,": every public name in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"qector_decoder_v3"}),", with the signature Python reports and the first paragraph of its docstring."," ",o.length," names."]}),e.jsxs("div",{className:"flex flex-wrap gap-3 mb-6",children:[e.jsx("label",{className:"sr-only",htmlFor:"api-q",children:"Filter the API index"}),e.jsx("input",{id:"api-q",type:"search",value:a,onChange:r=>l(r.target.value),placeholder:"Filter by name or description",className:"flex-1 min-w-[14rem] bg-surface border border-gridline rounded-lg px-3 py-2 text-sm text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300/50"}),e.jsx("div",{className:"flex gap-1",role:"group","aria-label":"Kind",children:["all",...D].map(r=>e.jsx("button",{type:"button","aria-pressed":t===r,onClick:()=>u(r),className:`px-3 py-2 rounded-lg text-xs font-semibold capitalize border ${t===r?"border-cyan-300/50 text-cyan-300 bg-cyan-300/10":"border-gridline text-secondary hover:text-primary"}`,children:{all:"All",class:"Classes",function:"Functions",module:"Modules"}[r]},r))})]}),e.jsxs("ul",{className:"space-y-3",children:[c.map(r=>e.jsxs("li",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsx("span",{className:"text-[10px] uppercase tracking-wider font-semibold text-muted-foreground",children:r.kind}),e.jsxs("code",{className:"font-mono text-cyan-300 text-sm break-all",children:[r.name,e.jsx("span",{className:"text-secondary",children:r.signature})]})]}),r.summary&&e.jsx("p",{className:"text-secondary text-sm mt-2 leading-relaxed",children:r.summary}),r.methods.length>0&&e.jsxs("details",{className:"mt-2",children:[e.jsxs("summary",{className:"text-xs text-muted-foreground cursor-pointer hover:text-cyan-300",children:[r.methods.length," public methods"]}),e.jsx("ul",{className:"mt-2 grid md:grid-cols-2 gap-x-6 gap-y-1",children:r.methods.map(s=>e.jsx("li",{children:e.jsxs("code",{className:"font-mono text-xs text-primary break-all",children:[s.name,e.jsx("span",{className:"text-muted-foreground",children:s.signature})]})},s.name))})]})]},r.name)),c.length===0&&e.jsx("li",{className:"text-muted-foreground text-sm",children:"No names match."})]})]})})}function B(){const[a,l]=i.useState(""),[t,u]=i.useState("BlossomDecoder"),o=i.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],r=c.filter(n=>n.name.toLowerCase().includes(a.toLowerCase())),s=n=>{u(t===n?null:n)};return i.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&o.current&&p.fromTo(o.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"17 Decoder Configurations · Stim DEM · Generated API Index"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(g,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. The guided examples below are illustrative; the API index at the end of this page is generated from the published 1.0.1 package."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:n=>l(n.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(f,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(y,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[r.map(n=>e.jsxs("button",{"aria-expanded":t===n.name,onClick:()=>s(n.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===n.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:n.name}),t===n.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(x,{className:"w-4 h-4 text-muted-foreground"})]},n.name)),r.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const n=c.find(d=>d.name===t);return n?e.jsxs("div",{ref:o,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:n.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:n.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(N,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(_,{code:n.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(k,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:n.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(_,{code:n.example,language:"python",filename:`${n.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})}),e.jsx(C,{})]})}export{B as default}; diff --git a/assets/TechnicalReference-CXFs7c1x.js b/assets/TechnicalReference-CXFs7c1x.js deleted file mode 100644 index a1893e98..00000000 --- a/assets/TechnicalReference-CXFs7c1x.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as i,j as e}from"./vendor-react-BiHfrq0e.js";import{S as h,C as _}from"./index-PdoH5kLF.js";import{N as g}from"./NeuralReveal-Bsl9IGCr.js";import{g as p}from"./vendor-gsap-a3sj5zmn.js";import{q as f,h as y,r as b,s as x,T as N,B as k}from"./vendor-ui-B8TlNU4J.js";const v="1.0.1",w="2026-11-06",q=JSON.parse(`[{"name":"AmbiguityClusterDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.05, ambig_threshold=0.5, max_cluster_size=12)","summary":"C1-02: BP + ambiguity-clustered exact decoding for qLDPC codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"AutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, config: 'BackendConfig | None' = None)","summary":"Workload-aware, self-debugging decoder that routes to CUDA / OpenCL / Rayon / CPU / Fallback.","methods":[{"name":"auto_select","signature":"(checks, n_qubits, batch_size=1)"},{"name":"available_backends","signature":"(self) -> 'list[str]'"},{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"calibrate","signature":"(self, sizes=(64, 256, 1024, 4096, 16384), repeats: 'int' = 3, seed: 'int' = 0)"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"diagnostics","signature":"(self) -> 'dict'"},{"name":"reset_backend_health","signature":"(self) -> 'None'"},{"name":"select","signature":"(self, batch_size: 'int') -> 'str'"}]},{"name":"AutoRouter","kind":"class","signature":"(*, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, error_rate: 'float' = 0.05, code_family: 'Any' = None, use_native_auto: 'bool' = True) -> 'None'","summary":"Construct, cache, and dispatch the policy-selected decoder for a problem.","methods":[{"name":"decode","signature":"(self, checks_or_H: 'Any', syndromes: 'Any', **ctx: 'Any') -> 'np.ndarray'"},{"name":"explain","signature":"(self, checks_or_H: 'Any' = None, syndromes: 'Any' = None, **ctx: 'Any') -> 'dict[str, Any]'"}]},{"name":"BPOSDDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, error_rate=0.1, bp_method=None, osd_order=None)","summary":"Belief Propagation + Ordered Statistics Decoding.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"bp_decode","signature":"(self, syndrome, max_iterations=20)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"Backend","kind":"class","signature":"()","summary":"Backend identifiers & Fallback Tiers.","methods":[]},{"name":"BackendConfig","kind":"class","signature":"(rayon_threshold: 'int' = 8, gpu_threshold: 'int' = 4096, allow_gpu: 'bool' = True, prefer: 'str' = 'cuda', force: 'str | None' = None, enable_auto_debug: 'bool' = True) -> None","summary":"Tunable thresholds and policy for :class:\`AutoDecoder\`.","methods":[]},{"name":"BatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Parallel batch decoder using Rayon (Rust data parallelism).","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"parallel_batch_decode","signature":"(self, syndromes)"}]},{"name":"BatchedBpDecoder","kind":"class","signature":"(H: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True) -> 'None'","summary":"Batched belief-propagation decoder over a fixed GF(2) check matrix \`\`H\`\`.","methods":[{"name":"decode_batch","signature":"(self, syndromes: 'Any', *, return_llr: 'bool' = False, early_stop: 'bool' = True) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'"}]},{"name":"BeliefMatching","kind":"class","signature":"(matrices: '_Matrices', max_iter: 'int' = 30, bp_shortcut: 'bool' = False)","summary":"Belief-propagation + minimum-weight perfect matching decoder.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_numpy_h","signature":"(H, error_rate: 'float' = 0.05, max_iter: 'int' = 20) -> 'BeliefMatching'"},{"name":"from_stim_circuit","signature":"(circuit, max_iter: 'int' = 20) -> 'BeliefMatching'"}]},{"name":"BenchmarkSuite","kind":"class","signature":"(check_to_qubits, n_qubits=None, n_samples=10000, seed=42)","summary":"Production benchmark suite. Wraps Rust-native benchmarking.","methods":[{"name":"run","signature":"(self)"},{"name":"save","signature":"(self, path, results)"}]},{"name":"BlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Minimum-Weight Perfect Matching (MWPM) decoder via Edmonds' Blossom algorithm.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_weighted","signature":"(self, syndromes, weights)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, weights)"}]},{"name":"BpOsdDecoder","kind":"class","signature":"(H: 'Any', error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, ms_scale: 'float' = 1.0, osd_order: 'int' = 0, bp_method: 'str' = 'sum_product', use_gpu: 'Any' = None, max_latency_ms: 'float | None' = None, damping: 'float' = 0.0, osd_lambda: 'Any' = None)","summary":"BP + ordered-statistics decoder for general GF(2) check matrices.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix: 'Any' = None) -> 'np.ndarray'"}]},{"name":"CPUBatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"SIMD-friendly CPU batch decoder with pooled buffers and SoA transposition.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_par","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"CUDABatchDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"is_available","signature":"()"},{"name":"reset","signature":"(self, /)"}]},{"name":"CUDABpOsdDecoder","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"}]},{"name":"ColourCodeDecoder","kind":"class","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0, method: 'str' = 'bposd')","summary":"Colour-code decoder: BP-OSD over the undecomposed hypergraph DEM.","methods":[{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode_correction","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"decode_observables","signature":"(self, syndrome) -> 'np.ndarray'"},{"name":"from_detector_error_model","signature":"(dem: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"},{"name":"from_stim_circuit","signature":"(circuit: 'Any', max_iter: 'int' = 30, osd_order: 'int' = 0) -> 'ColourCodeDecoder'"}]},{"name":"DecodeResult","kind":"class","signature":"(correction: 'np.ndarray', syndrome: 'np.ndarray', n_qubits: 'int', n_checks: 'int', weight: 'float | None' = None, logical_flips: 'np.ndarray | None' = None, decode_seconds: 'float | None' = None, backend: 'str' = 'cpu', fallback: 'bool' = False, fallback_reason: 'str' = '', syndrome_valid: 'bool | None' = None, metadata: 'dict' = ) -> None","summary":"Result of decoding a single syndrome, with diagnostics and metadata.","methods":[{"name":"as_uint8","signature":"(self) -> 'np.ndarray'"},{"name":"explain","signature":"(self) -> 'str'"},{"name":"to_dict","signature":"(self) -> 'dict'"},{"name":"to_json","signature":"(self, indent: 'int' = 2) -> 'str'"},{"name":"verify","signature":"(self, H: 'np.ndarray') -> 'bool'"}]},{"name":"DecoderName","kind":"class","signature":"()","summary":"String identifiers for the routable decoders.","methods":[]},{"name":"DecoderPool","kind":"class","signature":"(check_to_qubits=None, n_qubits=None, decoder_type: 'str' = 'fast_union_find', n_workers: 'int | None' = None, num_threads: 'int | None' = None)","summary":"Multi-process decoder pool for parallel syndrome decoding.","methods":[{"name":"close","signature":"(self)"},{"name":"decode","signature":"(self, syndromes) -> 'np.ndarray'"}]},{"name":"DetectorGraph","kind":"class","signature":"(check_to_qubits, syndrome, check_positions=None, check_types=None, base_weights=None, n_qubits=None)","summary":"Detector graph used by the GNN and hybrid decoder paths.","methods":[{"name":"update_syndrome","signature":"(self, syndrome)"}]},{"name":"FastUnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Union-Find with a zero-allocation hot path, reusable buffers and a C ABI.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"GNNBeliefMatcher","kind":"class","signature":"(check_to_qubits, n_qubits=None, *, gnn=None, hidden_size: 'int' = 32, n_layers: 'int' = 2, train_samples: 'int' = 0, error_rate: 'float' = 0.05, train_epochs: 'int' = 3, seed=None)","summary":"End-to-end GNN-guided minimum-weight perfect matching decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"GNNPredecoder","kind":"class","signature":"(node_feat_dim=None, edge_feat_dim=None, hidden_size=16, n_layers=2)","summary":"Graph Neural Network Pre-Decoder for dynamic edge weight prediction.","methods":[{"name":"forward","signature":"(self, graph)"},{"name":"load_weights","signature":"(self, path)"},{"name":"new_standard","signature":"(hidden_size=16, n_layers=2)"},{"name":"predict_with_node_probs","signature":"(self, graph)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, graphs, targets, n_epochs)"}]},{"name":"GNNTrainer","kind":"class","signature":"(check_to_qubits, n_qubits, error_rate=0.1)","summary":"End-to-end GNN training pipeline with Blossom teacher model.","methods":[{"name":"generate_dataset","signature":"(self, n_samples)"},{"name":"train","signature":"(self, gnn, n_samples, n_epochs)"},{"name":"train_bp","signature":"(self, gnn, n_samples, n_epochs, max_bp_iter=20)"}]},{"name":"HardwareProfile","kind":"class","signature":"(cuda_rust: 'bool' = False, gpu: 'bool' = False) -> None","summary":"Resolved view of the GPU capability the policy should assume.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, bool]'"},{"name":"detect","signature":"() -> 'HardwareProfile'"}]},{"name":"HybridCascadeDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None, max_accept_weight=None, escalation=None, error_rate=None)","summary":"Hybrid cascading decoder: Union-Find pre-filter + Blossom/BP-OSD escalation.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"batch_decode_timed","signature":"(self, syndromes, max_latency_ms=10.0)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_timed","signature":"(self, syndrome, max_latency_ms=10.0)"}]},{"name":"HybridDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, check_positions=None, check_types=None, base_weights=None, gnn_hidden_size=64, gnn_n_layers=3)","summary":"GNN Pre-Decoder + SparseBlossom hybrid decoder.","methods":[{"name":"batch_decode_hybrid","signature":"(self, syndromes)"},{"name":"batch_decode_standard","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_heuristic","signature":"(self, syndrome)"},{"name":"decode_hybrid","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_standard","signature":"(self, syndrome)"},{"name":"load_weights","signature":"(self, path)"},{"name":"save_weights","signature":"(self, path)"},{"name":"train","signature":"(self, n_samples, n_epochs, error_rate=0.1)"},{"name":"train_bp","signature":"(self, n_samples, n_epochs, error_rate=0.1, max_bp_iter=20)"}]},{"name":"LERBenchmark","kind":"class","signature":"()","summary":"Logical Error Rate benchmark suite.","methods":[{"name":"run_all","signature":"(self)"}]},{"name":"LookupTableDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None)","summary":"Exact lookup-table decoder with UnionFind fallback.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"build_table","signature":"(self, max_entries)"},{"name":"decode","signature":"(self, syndrome)"}]},{"name":"MAX_WORKERS","kind":"constant","signature":"","summary":"","methods":[]},{"name":"Matching","kind":"class","signature":"(H: 'Any' = None, weights: 'Any' = None, faults_matrix: 'Any' = None)","summary":"Minimum-weight perfect-matching decoder with a PyMatching-style API.","methods":[{"name":"add_boundary_edge","signature":"(self, node: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"add_edge","signature":"(self, node1: 'int', node2: 'int', fault_ids: 'Any' = None, weight: 'float' = 1.0, **_: 'Any') -> 'None'"},{"name":"check_matrix","signature":"(self) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"decode_batch","signature":"(self, shots: 'Any') -> 'np.ndarray'"},{"name":"decode_to_edges_array","signature":"(self, syndrome: 'Sequence[int]') -> 'np.ndarray'"},{"name":"edges","signature":"(self) -> 'list[tuple[int | None, int | None, dict]]'"},{"name":"from_check_matrix","signature":"(H: 'Any', weights: 'Any' = None, faults_matrix: 'Any' = None, **_: 'Any') -> 'Matching'"},{"name":"from_detector_error_model","signature":"(dem: 'Any') -> 'Matching'"},{"name":"from_stim_dem","signature":"(dem: 'Any') -> 'Matching'"}]},{"name":"NativeAutoDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, distance=5, noise_rate=0.01, batch_size=1, is_qldpc=False)","summary":"","methods":[{"name":"batch_decode","signature":"(self, /, syndromes)"},{"name":"batch_decode_strided","signature":"(self, /, syndromes, stride=None, require_alignment=False)"},{"name":"decode","signature":"(self, /, syndrome)"}]},{"name":"NeuralPredecoder","kind":"class","signature":"(n_input, n_output, n_hidden1=None, n_hidden2=None)","summary":"Lightweight MLP pre-decoder with Xavier initialization and SGD training.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"predict","signature":"(self, syndrome)"},{"name":"train","signature":"(self, syndromes, corrections, n_epochs, learning_rate=0.01)"}]},{"name":"OpenCLBatchDecoder","kind":"class","signature":"(*a, **k)","summary":"OpenCL batch decoder - requires source build with --features opencl.","methods":[{"name":"is_available","signature":"()"}]},{"name":"PredecodedDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, backend: 'str' = 'blossom')","summary":"Local-matching predecoder + exact/fast residual decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes) -> 'np.ndarray'"},{"name":"decode","signature":"(self, syndrome) -> 'np.ndarray'"}]},{"name":"Recommendation","kind":"class","signature":"(decoder: 'str', reason: 'str', family: 'str', priority: 'str', batch_size: 'int', hardware: 'dict[str, bool]', gpu_batched_bp: 'bool' = False, forced: 'bool' = False, graphlike: 'bool | None' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None) -> None","summary":"A decoder choice plus the reasoning and inputs that produced it.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"}]},{"name":"SlidingWindowDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, window_size=10, decay_factor=0.8, check_types=None, p_data=None, p_meas=None)","summary":"Sliding-window decoder with exponential decay weighting or fault-tolerant space-time decoding.","methods":[{"name":"decode","signature":"(self, syndrome=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"SpaceTimeDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_rounds, p_data, p_meas, n_qubits=None)","summary":"PyO3 wrapper for [\`SpaceTimeDecoder\`]: fault-tolerant temporal decoding via XOR-of-consecutive-rounds detectors matched on a 3D (space x time) graph, as opposed to [\`crate::sliding_window::PySlidingWindowDecoder\`] /…","methods":[{"name":"decode_history","signature":"(self, /)"},{"name":"reset","signature":"(self, /)"},{"name":"update","signature":"(self, /, round_syndrome)"}]},{"name":"SparseBlossomDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Region-growing Sparse Blossom decoder with RadixHeap.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_with_weights","signature":"(self, syndrome, weights)"}]},{"name":"StreamingDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, history_size=10, check_types=None, p_data=None, p_meas=None)","summary":"Streaming decoder that accumulates syndromes over multiple rounds.","methods":[{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"decode_rounds","signature":"(self, rounds)"},{"name":"detector_history","signature":"(self)"},{"name":"flush","signature":"(self)"},{"name":"update","signature":"(self, round_syndrome)"}]},{"name":"StreamingResult","kind":"class","signature":"(corrections: 'np.ndarray', syndromes: 'np.ndarray', telemetry: 'StreamingTelemetry', logical_flips: 'np.ndarray | None' = None) -> None","summary":"Outcome of a full streaming decode.","methods":[{"name":"is_valid","signature":"(self, H: 'Any', *, prefer_gpu: 'bool' = True) -> 'bool'"}]},{"name":"StreamingSession","kind":"class","signature":"(code_or_checks: 'Any', n_qubits: 'int | None' = None, *, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'None'","summary":"Incremental multi-round decode with a sliding commit buffer.","methods":[{"name":"committed_corrections","signature":"(self) -> 'np.ndarray'"},{"name":"committed_syndromes","signature":"(self) -> 'np.ndarray'"},{"name":"flush","signature":"(self) -> 'list[np.ndarray]'"},{"name":"push_round","signature":"(self, syndrome: 'Any') -> 'list[np.ndarray]'"},{"name":"reset","signature":"(self) -> 'None'"},{"name":"run","signature":"(self, syndrome_rounds: 'Any') -> 'StreamingResult'"}]},{"name":"StreamingTelemetry","kind":"class","signature":"(rounds: 'int' = 0, windows: 'int' = 0, committed: 'int' = 0, decode_seconds: 'float' = 0.0, per_window_seconds: 'list[float]' = , gpu: 'dict[str, int]' = , backend: 'dict[str, Any]' = , rounds_valid: 'int | None' = None) -> None","summary":"Real, measured counters for a streaming decode run.","methods":[{"name":"as_dict","signature":"(self) -> 'dict[str, Any]'"},{"name":"record_window","signature":"(self, seconds: 'float', rounds: 'int' = 1) -> 'None'"}]},{"name":"TwoStageDecoder","kind":"class","signature":"(check_to_qubits, check_types, n_qubits=None, x_decoder='blossom', z_decoder='blossom')","summary":"C1-03: Correlated two-stage matching for CSS codes.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"}]},{"name":"UnionFindDecoder","kind":"class","signature":"(check_to_qubits, n_qubits=None, edge_weights=None)","summary":"Production-ready Union-Find quantum error correction decoder.","methods":[{"name":"batch_decode","signature":"(self, syndromes)"},{"name":"decode","signature":"(self, syndrome)"},{"name":"decode_batch_flat","signature":"(self, flat_syndromes, num_shots, stride=None)"},{"name":"decode_batch_into_flat","signature":"(self, flat_syndromes, num_shots, corrections, stride=None)"},{"name":"decode_correction","signature":"(self, syndrome)"},{"name":"decode_observables","signature":"(self, syndrome, observables_matrix=None)"},{"name":"set_edge_weights","signature":"(self, edge_weights)"}]},{"name":"Workbench","kind":"class","signature":"() -> 'None'","summary":"Controller for the QECTOR Workbench (load → benchmark → export).","methods":[{"name":"cancel_job","signature":"(self, job_id: 'str') -> 'str'"},{"name":"detect_backends","signature":"(self) -> 'dict'"},{"name":"environment_snapshot","signature":"(self) -> 'dict'"},{"name":"export_csv","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_json","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"export_pdf","signature":"(self, artifact: 'dict', path: 'str') -> 'str'"},{"name":"get_job","signature":"(self, job_id: 'str') -> 'dict'"},{"name":"get_license_info","signature":"(self) -> 'dict'"},{"name":"job_artifact","signature":"(self, job_id: 'str') -> 'dict | None'"},{"name":"list_jobs","signature":"(self) -> 'list[dict]'"},{"name":"load_dem","signature":"(self, source: 'Any') -> 'dict'"},{"name":"load_stim","signature":"(self, source: 'Any') -> 'dict'"},{"name":"run_benchmark","signature":"(self, spec: 'dict', job: 'Job | None' = None) -> 'dict'"},{"name":"set_license_key","signature":"(self, key: 'str') -> 'None'"},{"name":"shutdown","signature":"(self) -> 'None'"},{"name":"submit_job","signature":"(self, spec: 'dict') -> 'str'"},{"name":"wait","signature":"(self, job_id: 'str', timeout: 'float | None' = None) -> 'dict'"}]},{"name":"backend","kind":"module","signature":"","summary":"qector_decoder_v3.backend - Workload-Aware AutoDecoder with Self-Auto-Debug & Multi-Tier Fallback.","methods":[]},{"name":"batched_bp_decode","kind":"function","signature":"(H: 'Any', syndromes: 'Any', *, error_rate: 'float' = 0.05, priors: 'Any' = None, max_iter: 'int' = 30, alpha: 'float' = 1.0, bp_method: 'str' = 'min_sum', prefer_gpu: 'bool' = True, early_stop: 'bool' = True, return_llr: 'bool' = False) -> 'tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]'","summary":"Decode a stack of syndromes with batched belief propagation.","methods":[]},{"name":"belief_matching","kind":"module","signature":"","summary":"qector_decoder_v3.belief_matching - belief-propagation + MWPM (belief-matching).","methods":[]},{"name":"benchmarking","kind":"module","signature":"","summary":"qector_decoder_v3.benchmarking - reproducible, statistically-honest benchmarks.","methods":[]},{"name":"bp_cupy","kind":"module","signature":"","summary":"qector_decoder_v3.bp_cupy - batched, GPU-resident belief propagation.","methods":[]},{"name":"bposd","kind":"module","signature":"","summary":"qector_decoder_v3.bposd - belief propagation + ordered-statistics decoding.","methods":[]},{"name":"changelog","kind":"function","signature":"() -> str","summary":"Return a human-readable changelog string for the loaded package.","methods":[]},{"name":"check_to_edges","kind":"function","signature":"(check_to_qubits)","summary":"Convert check_to_qubits to edge list.","methods":[]},{"name":"clear_decoder_cache","kind":"function","signature":"()","summary":"Clear the in-memory decoder and decoder pool LRU caches.","methods":[]},{"name":"codes","kind":"module","signature":"","summary":"qector_decoder_v3.codes - Code-family helpers.","methods":[]},{"name":"colour_code","kind":"module","signature":"","summary":"C1-04: Colour-code decoder.","methods":[]},{"name":"compute_detector_differences","kind":"function","signature":"(history)","summary":"Computes XOR detector differences across consecutive syndrome rounds: detector_t = raw_t ^ raw_{t-1}.","methods":[]},{"name":"cuda_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"decode_mmap","kind":"function","signature":"(syndrome_path: 'str', output_path: 'str', check_to_qubits, n_qubits: 'int', decoder_type: 'str' = 'cpu_batch', batch_size: 'int' = 65536, n_shots: 'int | None' = None, dtype: '_np.dtype' = dtype('uint8'), verbose: 'bool' = False)","summary":"Out-of-core batch decoding via memory-mapped arrays.","methods":[]},{"name":"decode_with_diagnostics","kind":"function","signature":"(code: 'Any', syndrome: 'Sequence[int]', kind: 'str' = 'blossom', decoder: 'Any' = None, logicals: 'np.ndarray | None' = None) -> 'DecodeResult'","summary":"Decode one syndrome and return a fully-populated :class:\`DecodeResult\`.","methods":[]},{"name":"decode_with_gnn","kind":"function","signature":"(check_to_qubits, n_qubits, syndrome, **kwargs) -> 'np.ndarray'","summary":"One-shot GNN-guided MWPM decode (see :class:\`GNNBeliefMatcher\`).","methods":[]},{"name":"decoder_cache","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_cache - LRU-decoder cache and factory functions.","methods":[]},{"name":"decoder_pool","kind":"module","signature":"","summary":"qector_decoder_v3.decoder_pool - Multi-process decoder pool.","methods":[]},{"name":"dem","kind":"module","signature":"","summary":"qector_decoder_v3.dem - Stim Detector Error Model (DEM) loader.","methods":[]},{"name":"detect_hardware","kind":"function","signature":"() -> 'HardwareProfile'","summary":"Return the live :class:\`HardwareProfile\` (alias for \`\`HardwareProfile.detect\`\`).","methods":[]},{"name":"enforce_distance_cap","kind":"function","signature":"(distance) -> None","summary":"Enforce that *distance* does not exceed the active tier's cap.","methods":[]},{"name":"enforce_unlocked","kind":"function","signature":"() -> None","summary":"Hard-gate decode path when no valid license is active (QECTOR_ENFORCE=1).","methods":[]},{"name":"estimate_distance","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Python wrapper for estimate_distance.","methods":[]},{"name":"flush_usage","kind":"function","signature":"(customer_id: 'str | None' = None, api_key: 'str | None' = None) -> dict","summary":"Flush accumulated decode shots to the Stripe Billing Meter Events API.","methods":[]},{"name":"from_circuit","kind":"function","signature":"(circuit, decoder_type='blossom', **kwargs)","summary":"Build a decoder from a Stim circuit in one call.","methods":[]},{"name":"generate_biconnected_qldpc_checks","kind":"function","signature":"(n_qubits, degree)","summary":"Generate a bipolar / biconnected qLDPC Tanner graph parity check matrix.","methods":[]},{"name":"generate_parity_check_matrix","kind":"function","signature":"(check_to_qubits, n_qubits=None)","summary":"Return the binary parity-check matrix \`\`H\`\` for *check_to_qubits*.","methods":[]},{"name":"generate_repetition_code_checks","kind":"function","signature":"(distance)","summary":"Generate a 1D repetition/chain code for testing.","methods":[]},{"name":"generate_ring_code_checks","kind":"function","signature":"(distance)","summary":"Generate a simple 1D ring code for testing.","methods":[]},{"name":"generate_space_time_surface_code_checks","kind":"function","signature":"(distance, rounds)","summary":"Generate 3D space-time surface code checks across multiple rounds.","methods":[]},{"name":"generate_surface_code_checks","kind":"function","signature":"(distance)","summary":"Generate compact periodic (toric) surface-code checks.","methods":[]},{"name":"generate_toy_code_checks","kind":"function","signature":"(distance)","summary":"Generate a toy code (not a proper quantum code) with d*d qubits for backward compatibility.","methods":[]},{"name":"generate_triangular_color_code_4_8_8_checks","kind":"function","signature":"(distance)","summary":"Generate 4.8.8 triangular color code parity check matrix.","methods":[]},{"name":"get_accumulated_shots","kind":"function","signature":"() -> int","summary":"Get total accumulated decode shots.","methods":[]},{"name":"get_backend","kind":"function","signature":"() -> 'GpuBackend'","summary":"Return the cached :class:\`GpuBackend\` capability snapshot (built once).","methods":[]},{"name":"get_decoder","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find')","summary":"Get a decoder, constructing it once and caching for reuse.","methods":[]},{"name":"get_decoder_pool","kind":"function","signature":"(checks_tuple: 'tuple[tuple[int, ...]]', n_qubits: 'int', decoder_type: 'str' = 'union_find', n_workers: 'int | None' = None)","summary":"Get a multi-process :class:\`DecoderPool\`, constructed once and cached.","methods":[]},{"name":"get_latency_quantiles","kind":"function","signature":"()","summary":"\`get_latency_quantiles() -> tuple[float, float, float] | None\`","methods":[]},{"name":"get_license_info","kind":"function","signature":"() -> dict","summary":"Get active license info dictionary.","methods":[]},{"name":"gpu_available","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff CuPy is importable **and** a CUDA device is usable.","methods":[]},{"name":"gpu_backend","kind":"module","signature":"","summary":"qector_decoder_v3.gpu_backend - the CuPy GPU backend abstraction.","methods":[]},{"name":"has_cuda_rust","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` iff the Rust \`\`CUDABatchDecoder\`\` reports a usable device.","methods":[]},{"name":"has_cupy","kind":"function","signature":"() -> 'bool'","summary":"Return \`\`True\`\` if the \`\`cupy\`\` module can be imported.","methods":[]},{"name":"license","kind":"module","signature":"","summary":"","methods":[]},{"name":"opencl_is_available","kind":"function","signature":"()","summary":"","methods":[]},{"name":"predecoder","kind":"module","signature":"","summary":"qector_decoder_v3.predecoder - a fast, faithful matching predecoder.","methods":[]},{"name":"pymatching","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"pymatching_compat","kind":"module","signature":"","summary":"qector_decoder_v3.pymatching_compat - a PyMatching-compatible \`\`Matching\`\` API.","methods":[]},{"name":"qiskit_plugin","kind":"module","signature":"","summary":"QECTOR Qiskit Plugin - optional integration with the Qiskit ecosystem.","methods":[]},{"name":"recommend","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None, *, graphlike: 'bool | None' = None) -> 'Recommendation'","summary":"Return a rich :class:\`Recommendation\` for a decoding problem.","methods":[]},{"name":"recommend_decoder","kind":"function","signature":"(code_family: 'Any' = None, distance: 'int | None' = None, n_qubits: 'int | None' = None, batch_size: 'int' = 1, priority: 'str' = 'balanced', hardware: 'HardwareLike' = None) -> 'str'","summary":"Return the *name* of the recommended decoder class (see :func:\`recommend\`).","methods":[]},{"name":"record_shots","kind":"function","signature":"(count: int) -> None","summary":"Record decoding shots into telemetry buffer.","methods":[]},{"name":"rest_api","kind":"module","signature":"","summary":"Minimal REST API for QECTOR.","methods":[]},{"name":"result","kind":"module","signature":"","summary":"qector_decoder_v3.result - Rich decode results, diagnostics and debug output.","methods":[]},{"name":"routing","kind":"module","signature":"","summary":"qector_decoder_v3.routing - intelligent decoder router / auto-selection.","methods":[]},{"name":"run_mcp_server","kind":"function","signature":"()","summary":"Python signature: \`\`\`python run_mcp_server() \`\`\`","methods":[]},{"name":"set_license_key","kind":"function","signature":"(key: str) -> None","summary":"Set the global QECTOR license key for tier enforcement.","methods":[]},{"name":"set_license_key_file","kind":"function","signature":"(path) -> None","summary":"Load a license key from *path* and activate it.","methods":[]},{"name":"sinter_compat","kind":"module","signature":"","summary":"qector_decoder_v3.sinter_compat - plug QECTOR into Sinter.","methods":[]},{"name":"sliding_window_decode","kind":"function","signature":"(syndrome_rounds: 'Any', code: 'Any' = None, *, check_to_qubits: 'Sequence[Sequence[int]] | None' = None, n_qubits: 'int | None' = None, window_size: 'int' = 8, decoder: 'Any | None' = None, logicals: 'Any' = None, prefer_gpu: 'bool | None' = None) -> 'StreamingResult'","summary":"Decode a whole multi-round syndrome stream window-by-window.","methods":[]},{"name":"sparse_blossom_radix_neighbors","kind":"function","signature":"(decoder, defects, k=8)","summary":"Return the k-nearest candidate edges (sorted by distance) for \`defects\`.","methods":[]},{"name":"start_metrics_server","kind":"function","signature":"(addr='127.0.0.1:9090')","summary":"Start the Prometheus metrics HTTP server.","methods":[]},{"name":"stim_compat","kind":"module","signature":"","summary":"Stim compatibility layer - Conversion and wrappers for the Stim ecosystem.","methods":[]},{"name":"streaming","kind":"module","signature":"","summary":"qector_decoder_v3.streaming - a higher-level Python streaming / multi-round decode *orchestration* layer.","methods":[]},{"name":"stripe_integration","kind":"module","signature":"","summary":"QECTOR Decoder v3 - Full Stripe API & Webhook License Fulfillment Integration","methods":[]},{"name":"verify_license_token","kind":"function","signature":"(token: 'str', customer_email: 'str' = '') -> 'bool'","summary":"Verifies the license token signature completely offline using Ed25519.","methods":[]},{"name":"workbench","kind":"module","signature":"","summary":"qector_decoder_v3.workbench - the QECTOR Workbench application controller.","methods":[]}]`),m={package:"qector-decoder-v3",version:v,generated:w,items:q},D=["class","function","module"];function C(){const[a,l]=i.useState(""),[t,u]=i.useState("all"),o=m.items,c=i.useMemo(()=>{const r=a.trim().toLowerCase();return o.filter(s=>(t==="all"||s.kind===t)&&(!r||s.name.toLowerCase().includes(r)||s.summary.toLowerCase().includes(r)))},[o,a,t]);return e.jsx("section",{className:"section-padding pb-24","aria-labelledby":"api-index",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("h2",{id:"api-index",className:"text-3xl font-bold mb-2",children:"API index"}),e.jsxs("p",{className:"text-secondary text-sm mb-6 max-w-3xl",children:["Generated from the published ",e.jsxs("code",{className:"font-mono text-cyan-200",children:[m.package," ",m.version]})," wheel on ",m.generated,": every public name in ",e.jsx("code",{className:"font-mono text-cyan-200",children:"qector_decoder_v3"}),", with the signature Python reports and the first paragraph of its docstring."," ",o.length," names."]}),e.jsxs("div",{className:"flex flex-wrap gap-3 mb-6",children:[e.jsx("label",{className:"sr-only",htmlFor:"api-q",children:"Filter the API index"}),e.jsx("input",{id:"api-q",type:"search",value:a,onChange:r=>l(r.target.value),placeholder:"Filter by name or description",className:"flex-1 min-w-[14rem] bg-surface border border-gridline rounded-lg px-3 py-2 text-sm text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300/50"}),e.jsx("div",{className:"flex gap-1",role:"group","aria-label":"Kind",children:["all",...D].map(r=>e.jsx("button",{type:"button","aria-pressed":t===r,onClick:()=>u(r),className:`px-3 py-2 rounded-lg text-xs font-semibold capitalize border ${t===r?"border-cyan-300/50 text-cyan-300 bg-cyan-300/10":"border-gridline text-secondary hover:text-primary"}`,children:{all:"All",class:"Classes",function:"Functions",module:"Modules"}[r]},r))})]}),e.jsxs("ul",{className:"space-y-3",children:[c.map(r=>e.jsxs("li",{className:"bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsx("span",{className:"text-[10px] uppercase tracking-wider font-semibold text-muted-foreground",children:r.kind}),e.jsxs("code",{className:"font-mono text-cyan-300 text-sm break-all",children:[r.name,e.jsx("span",{className:"text-secondary",children:r.signature})]})]}),r.summary&&e.jsx("p",{className:"text-secondary text-sm mt-2 leading-relaxed",children:r.summary}),r.methods.length>0&&e.jsxs("details",{className:"mt-2",children:[e.jsxs("summary",{className:"text-xs text-muted-foreground cursor-pointer hover:text-cyan-300",children:[r.methods.length," public methods"]}),e.jsx("ul",{className:"mt-2 grid md:grid-cols-2 gap-x-6 gap-y-1",children:r.methods.map(s=>e.jsx("li",{children:e.jsxs("code",{className:"font-mono text-xs text-primary break-all",children:[s.name,e.jsx("span",{className:"text-muted-foreground",children:s.signature})]})},s.name))})]})]},r.name)),c.length===0&&e.jsx("li",{className:"text-muted-foreground text-sm",children:"No names match."})]})]})})}function B(){const[a,l]=i.useState(""),[t,u]=i.useState("BlossomDecoder"),o=i.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],r=c.filter(n=>n.name.toLowerCase().includes(a.toLowerCase())),s=n=>{u(t===n?null:n)};return i.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&o.current&&p.fromTo(o.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(h,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"17 Decoder Configurations · Stim DEM · Generated API Index"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(g,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. The guided examples below are illustrative; the API index at the end of this page is generated from the published 1.0.1 package."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:n=>l(n.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(f,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(y,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[r.map(n=>e.jsxs("button",{"aria-expanded":t===n.name,onClick:()=>s(n.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===n.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:n.name}),t===n.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(x,{className:"w-4 h-4 text-muted-foreground"})]},n.name)),r.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const n=c.find(d=>d.name===t);return n?e.jsxs("div",{ref:o,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:n.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:n.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(N,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(_,{code:n.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(k,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:n.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(_,{code:n.example,language:"python",filename:`${n.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})}),e.jsx(C,{})]})}export{B as default}; diff --git a/assets/TechnicalReference-D9UxbEdI.js b/assets/TechnicalReference-D9UxbEdI.js deleted file mode 100644 index 3c40c45d..00000000 --- a/assets/TechnicalReference-D9UxbEdI.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-WV1aysjN.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-DNqYMsCV.js b/assets/TechnicalReference-DNqYMsCV.js deleted file mode 100644 index a77ac141..00000000 --- a/assets/TechnicalReference-DNqYMsCV.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-B9kEGiWi.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-eXSmTrhC.js b/assets/TechnicalReference-eXSmTrhC.js deleted file mode 100644 index 68b68616..00000000 --- a/assets/TechnicalReference-eXSmTrhC.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-CqAA-ZXu.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-jpw-R7Cj.js b/assets/TechnicalReference-jpw-R7Cj.js deleted file mode 100644 index 88b1b5c4..00000000 --- a/assets/TechnicalReference-jpw-R7Cj.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-iVST85F-.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/TechnicalReference-p4g91Uag.js b/assets/TechnicalReference-p4g91Uag.js deleted file mode 100644 index 98a20ee1..00000000 --- a/assets/TechnicalReference-p4g91Uag.js +++ /dev/null @@ -1,30 +0,0 @@ -import{r as o,j as e}from"./vendor-react-BiHfrq0e.js";import{S as u,C as n}from"./index-_BpMZhV3.js";import{N as h}from"./NeuralReveal-BflyZYSb.js";import{g as f}from"./vendor-gsap-a3sj5zmn.js";import{r as x,h as g,s as b,o as y,T as _,B as v}from"./vendor-ui-B0ssGG4c.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";function R(){const[a,l]=o.useState(""),[t,m]=o.useState("BlossomDecoder"),s=o.useRef(null),c=[{name:"BlossomDecoder",signature:"BlossomDecoder(dem: stim.DetectorErrorModel, *, adaptive_k: bool = True, timeout: Optional[float] = None)",desc:"Minimum-weight perfect matching (MWPM) decoder for CSS stabilizer codes. Uses an exact matching solver to pair syndrome checks.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"adaptive_k",type:"bool",default:"True",desc:"Enable Union-Find pre-filtering to compress graph"},{name:"timeout",type:"float",default:"None",desc:"Max seconds allowed to match a syndrome"}],example:`import qector_decoder_v3 as qd -decoder = qd.BlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"BeliefMatchingDecoder",signature:'BeliefMatchingDecoder(dem: stim.DetectorErrorModel, *, bp_iters: int = 30, max_paths: int = 10, bp_method: str = "product_sum")',desc:"Accuracy-oriented decoder. Uses Belief Propagation (BP) preprocessing to compute edge probabilities, and then runs matching on a reweighted Blossom graph. Use when accuracy matters more than latency.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"bp_iters",type:"int",default:"30",desc:"Max iterations for Belief Propagation"},{name:"max_paths",type:"int",default:"10",desc:"Max alternative paths for match reweighting"},{name:"bp_method",type:"str",default:'"product_sum"',desc:"BP update equation to resolve constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.BeliefMatchingDecoder(dem, bp_iters=30) -correction = decoder.decode(syndrome)`},{name:"BpOsdDecoder",signature:'BpOsdDecoder(dem: stim.DetectorErrorModel, *, osd_order: int = 40, osd_method: str = "osd_cs")',desc:"Belief Propagation + Ordered Statistics Decoding. A common approach for qLDPC codes, where matching graphs are undefined. Handles non-CSS stabilizer layouts.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"osd_order",type:"int",default:"40",desc:"OSD search order limit"},{name:"osd_method",type:"str",default:'"osd_cs"',desc:"OSD resolution method"}],example:`import qector_decoder_v3 as qd -decoder = qd.BpOsdDecoder(dem, osd_order=40) -correction = decoder.decode(syndrome)`},{name:"UnionFindDecoder",signature:"UnionFindDecoder(dem: stim.DetectorErrorModel, *, use_combined: bool = True)",desc:"Near-linear time approximate decoder. Resolves syndromes by cluster growth and path compression. Scaling is O(N), making it ideal for large distance offline simulations.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"use_combined",type:"bool",default:"True",desc:"Enable combined cluster growth constraints"}],example:`import qector_decoder_v3 as qd -decoder = qd.UnionFindDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"CPUBatchDecoder",signature:"CPUBatchDecoder(dem: stim.DetectorErrorModel, *, num_threads: int = 0)",desc:"Multi-threaded CPU batch decoder. Leverages Rayon parallelism across CPU cores to decode thousands of syndromes concurrently.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"num_threads",type:"int",default:"0",desc:"Number of worker threads (0 = auto-detect physical cores)"}],example:`import qector_decoder_v3 as qd -decoder = qd.CPUBatchDecoder(dem, num_threads=8) -corrections = decoder.decode_batch(syndromes_matrix)`},{name:"GpuBatchDecoder / CUDABatchDecoder / OpenCLBatchDecoder",signature:"CUDABatchDecoder(dem: stim.DetectorErrorModel, *, batch_size: int = 2048)",desc:"Native GPU batch decoders. Implements CUDA and OpenCL device pipelines to solve thousands of syndromes in parallel. Check availability with CUDABatchDecoder.is_available().",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"},{name:"batch_size",type:"int",default:"2048",desc:"Parallel batch sizing in GPU VRAM"}],example:`import qector_decoder_v3 as qd -if qd.CUDABatchDecoder.is_available(): - decoder = qd.CUDABatchDecoder(dem, batch_size=4096) - corrections = decoder.decode_batch(syndromes_array)`},{name:"SparseBlossomDecoder",signature:"SparseBlossomDecoder(dem: stim.DetectorErrorModel)",desc:"Low-latency region growing blossom variant optimized for ring-like and sparse detector error graphs.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -decoder = qd.SparseBlossomDecoder(dem) -correction = decoder.decode(syndrome)`},{name:"get_decoder / clear_decoder_cache",signature:'get_decoder(dem_or_h, decoder_type: str = "auto", **kwargs)',desc:"Cached decoder factory for instantiating and caching decoders by error model hash to avoid redundant graph construction.",parameters:[{name:"dem_or_h",type:"Union[stim.DetectorErrorModel, np.ndarray]",default:"Required",desc:"Detector model or H matrix"},{name:"decoder_type",type:"str",default:'"auto"',desc:"Target decoder family name"}],example:`import qector_decoder_v3 as qd -decoder = qd.get_decoder(dem, decoder_type="blossom") -qd.clear_decoder_cache()`},{name:"decode_mmap / decode_with_diagnostics",signature:"decode_mmap(decoder, input_filepath: str, output_filepath: str)",desc:"Out-of-core memory-mapped file decoder for processing gigabyte-scale syndrome files on disk without loading entire matrices into RAM. Returns structured DecodeResult.",parameters:[{name:"decoder",type:"DecoderInstance",default:"Required",desc:"Initialized decoder instance"},{name:"input_filepath",type:"str",default:"Required",desc:"Path to binary syndrome file"},{name:"output_filepath",type:"str",default:"Required",desc:"Path to write binary correction results"}],example:`import qector_decoder_v3 as qd -res = qd.decode_mmap(decoder, "syndromes.bin", "corrections.bin") -print(res.shots_processed, res.latency_seconds)`},{name:"Workbench API",signature:"Workbench(config: Optional[dict] = None)",desc:"High-level orchestration and benchmarking engine for configuring decoding pipelines, running multi-decoder comparative sweeps, and exporting performance reports.",parameters:[{name:"config",type:"dict",default:"None",desc:"Workbench configuration dictionary"}],example:`import qector_decoder_v3 as qd -wb = qd.Workbench() -results = wb.benchmark(dem, shots=100000)`},{name:"stim_compat & sinter_compat",signature:"sinter_compat.qector_sinter_decoders()",desc:"Ecosystem integration helpers providing native compatibility with Stim circuits and Sinter benchmarking harnesses.",parameters:[{name:"sinter_decoders",type:"dict",default:"Required",desc:"Sinter compiled decoder mapping"}],example:`import sinter -from qector_decoder_v3.sinter_compat import qector_sinter_decoders -decoders = qector_sinter_decoders()`},{name:"license.verify_license_token",signature:"license.verify_license_token(token: str) -> bool",desc:"Offline Ed25519 cryptographic signature verification function for commercial evaluation and production license tokens.",parameters:[{name:"token",type:"str",default:"Required",desc:"Signed JWT/Ed25519 license token string"}],example:`from qector_decoder_v3.license import verify_license_token -is_valid = verify_license_token(token_str)`},{name:"HybridDecoder & HybridCascadeDecoder",signature:"HybridCascadeDecoder(dem: stim.DetectorErrorModel) # Feature-gated / source build",desc:"Experimental decoders combining fast Union-Find pre-filtering with exact Blossom fallback for ambiguous clusters. Note: HybridCascadeDecoder requires full-feature source build and may raise unavailable in standard pre-compiled wheels.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model of the circuit"}],example:`import qector_decoder_v3 as qd -# Research / full-feature build required -decoder = qd.HybridDecoder(dem)`},{name:"PredecodedDecoder & LookupTableDecoder",signature:"LookupTableDecoder(code_matrix: np.ndarray)",desc:"Research decoders for lookup-table fast matching on small stabilizer codes and wrapping pre-calculated decoding results for pipeline benchmarking.",parameters:[{name:"code_matrix",type:"np.ndarray",default:"Required",desc:"Parity check matrix"}],example:`import qector_decoder_v3 as qd -decoder = qd.LookupTableDecoder(H_matrix)`},{name:"ColourCodeDecoder, TwoStageDecoder & AmbiguityClusterDecoder",signature:"ColourCodeDecoder(dem: stim.DetectorErrorModel)",desc:"Research decoders: native colour-code decoding over undecomposed detector error models (color_code family), two-stage decoding pipelines, and ambiguity-cluster resolution.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"}],example:`import qector_decoder_v3 as qd -decoder = qd.ColourCodeDecoder(dem)`},{name:"GNNBeliefMatcher",signature:"GNNBeliefMatcher(dem: stim.DetectorErrorModel, model_path: str)",desc:"Research-stage graph neural network enhanced belief propagation module. Not validated for production use.",parameters:[{name:"dem",type:"stim.DetectorErrorModel",default:"Required",desc:"Detector error model"},{name:"model_path",type:"str",default:"Required",desc:"Path to trained GNN weights file"}],example:`import qector_decoder_v3 as qd -matcher = qd.GNNBeliefMatcher(dem, "weights.pt")`}],i=c.filter(r=>r.name.toLowerCase().includes(a.toLowerCase())),p=r=>{m(t===r?null:r)};return o.useEffect(()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||t&&s.current&&f.fromTo(s.current,{opacity:0,y:10},{opacity:1,y:0,duration:.3,ease:"power2.out"})},[t]),e.jsxs(e.Fragment,{children:[e.jsx(u,{title:"Technical Reference · QECTOR",description:"API reference, decoder parameters, and technical documentation for QECTOR quantum error correction decoder."}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"eyebrow-pill mb-6",children:"16 Decoder APIs · Stim DEM · Signatures Are Examples"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(h,{text:"Technical Reference",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsx("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:"API overview for QECTOR's decoders. Signatures, defaults, and snippets below are illustrative examples; treat the installed package as the authoritative reference."})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"relative mb-8 max-w-md mx-auto md:mx-0",children:[e.jsx("label",{htmlFor:"decoder-search",className:"sr-only",children:"Search decoders"}),e.jsx("input",{id:"decoder-search",type:"search",placeholder:"Search decoders...",value:a,onChange:r=>l(r.target.value),className:"w-full px-10 py-3 bg-surface/50 border border-gridline rounded-xl text-primary text-sm focus:border-cyan-300/50 focus-visible:ring-2 focus-visible:ring-cyan-300 transition-colors"}),e.jsx(x,{className:"w-5 h-5 text-muted-foreground absolute left-3 top-3.5"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-4 space-y-2",children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider px-2 mb-2 flex items-center gap-1.5",children:[e.jsx(g,{className:"w-3.5 h-3.5"}),"Decoder Classes"]}),e.jsxs("div",{className:"space-y-1",children:[i.map(r=>e.jsxs("button",{"aria-expanded":t===r.name,onClick:()=>p(r.name),className:`w-full flex items-center justify-between p-3.5 rounded-xl border text-sm transition-all duration-200 ${t===r.name?"bg-cyan-300/10 text-cyan-300 border-cyan-300/20 shadow-xs":"bg-surface/20 text-secondary hover:text-primary hover:bg-surface/40 border-gridline/50"}`,children:[e.jsx("span",{className:"font-mono font-semibold",children:r.name}),t===r.name?e.jsx(b,{className:"w-4 h-4"}):e.jsx(y,{className:"w-4 h-4 text-muted-foreground"})]},r.name)),i.length===0&&e.jsxs("div",{className:"p-4 text-center text-xs text-muted-foreground italic border border-dashed border-gridline rounded-xl",children:['No decoders matching "',a,'"']})]})]}),e.jsx("div",{className:"lg:col-span-8",children:t?(()=>{const r=c.find(d=>d.name===t);return r?e.jsxs("div",{ref:s,className:"card-surface bg-surface/10 space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold text-primary font-mono",children:r.name}),e.jsx("p",{className:"text-secondary text-sm mt-3 leading-relaxed",children:r.desc})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(_,{className:"w-3.5 h-3.5"}),"Signature"]}),e.jsx(n,{code:r.signature,language:"python",className:"!my-0 bg-void/70"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"}),"Parameters"]}),e.jsx("div",{className:"overflow-x-auto border border-gridline rounded-xl",children:e.jsxs("table",{className:"w-full min-w-[640px] border-collapse text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface/50 border-b border-gridline text-cyan-300 text-xs font-semibold uppercase tracking-wider",children:[e.jsx("th",{className:"p-3",children:"Name"}),e.jsx("th",{className:"p-3",children:"Type"}),e.jsx("th",{className:"p-3",children:"Default"}),e.jsx("th",{className:"p-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline",children:r.parameters.map(d=>e.jsxs("tr",{className:"hover:bg-surface/20 transition-colors",children:[e.jsx("td",{className:"p-3 font-mono font-semibold text-primary",children:d.name}),e.jsx("td",{className:"p-3 font-mono text-xs text-secondary",children:d.type}),e.jsx("td",{className:"p-3 font-mono text-xs text-cyan-300",children:d.default}),e.jsx("td",{className:"p-3 text-xs text-secondary leading-relaxed",children:d.desc})]},d.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-bold text-muted-foreground uppercase tracking-wider mb-2",children:"Usage Example"}),e.jsx(n,{code:r.example,language:"python",filename:`${r.name.toLowerCase()}_usage.py`})]})]}):null})():e.jsx("div",{className:"h-full flex items-center justify-center border border-dashed border-gridline rounded-2xl p-12 text-center text-muted-foreground italic text-sm",children:"Select a decoder class from the sidebar to inspect parameters and example usage."})})]})]})})]})}export{R as default}; diff --git a/assets/Terms-76bOmhZP.js b/assets/Terms-76bOmhZP.js deleted file mode 100644 index dc3431f2..00000000 --- a/assets/Terms-76bOmhZP.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DlmjLVYe.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Team, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-77QLsgfs.js b/assets/Terms-77QLsgfs.js deleted file mode 100644 index 0ff710fd..00000000 --- a/assets/Terms-77QLsgfs.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-CclXHnEm.js";import{t as o}from"./terms-B2iKgo_y.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function x(){return r.jsx(t,{doc:o})}export{x as default}; diff --git a/assets/Terms-BCAJnAzZ.js b/assets/Terms-BCAJnAzZ.js deleted file mode 100644 index b9681121..00000000 --- a/assets/Terms-BCAJnAzZ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DkYdPRY7.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-BM0r7Vh2.js b/assets/Terms-BM0r7Vh2.js deleted file mode 100644 index dacf5ef3..00000000 --- a/assets/Terms-BM0r7Vh2.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-D-Mi7GTG.js";import{t as o}from"./terms-LnOasveG.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(t,{doc:o})}export{n as default}; diff --git a/assets/Terms-BMvqN1Ou.js b/assets/Terms-BMvqN1Ou.js deleted file mode 100644 index 048dd7e8..00000000 --- a/assets/Terms-BMvqN1Ou.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-CFP-uSSS.js";import{t as o}from"./terms-LnOasveG.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(t,{doc:o})}export{n as default}; diff --git a/assets/Terms-BQl40Nln.js b/assets/Terms-BQl40Nln.js deleted file mode 100644 index 3389bdcd..00000000 --- a/assets/Terms-BQl40Nln.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-k7aoVn24.js";import{t as o}from"./terms-DgnSX4e_.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(t,{doc:o})}export{n as default}; diff --git a/assets/Terms-BSR2RP9l.js b/assets/Terms-BSR2RP9l.js deleted file mode 100644 index 0818a7e6..00000000 --- a/assets/Terms-BSR2RP9l.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BUYYSLdX.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-BWWtoPuP.js b/assets/Terms-BWWtoPuP.js deleted file mode 100644 index 3a27a2c4..00000000 --- a/assets/Terms-BWWtoPuP.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CpdATiEY.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Team, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-C28kGJxx.js b/assets/Terms-C28kGJxx.js deleted file mode 100644 index d754c8b7..00000000 --- a/assets/Terms-C28kGJxx.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BN-vOeL2.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Team, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-C4cY4y3Q.js b/assets/Terms-C4cY4y3Q.js deleted file mode 100644 index c93b0d75..00000000 --- a/assets/Terms-C4cY4y3Q.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-OlrhtE5C.js";import{t as o}from"./terms-LnOasveG.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(t,{doc:o})}export{n as default}; diff --git a/assets/Terms-CBCTDevc.js b/assets/Terms-CBCTDevc.js deleted file mode 100644 index 4271f3da..00000000 --- a/assets/Terms-CBCTDevc.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-DvyIDT6j.js";import{t as o}from"./terms-LnOasveG.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function x(){return r.jsx(t,{doc:o})}export{x as default}; diff --git a/assets/Terms-CGsSEgCq.js b/assets/Terms-CGsSEgCq.js deleted file mode 100644 index be968278..00000000 --- a/assets/Terms-CGsSEgCq.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-_BpMZhV3.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes) and all sales are final: see the ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-CLjJSdI4.js b/assets/Terms-CLjJSdI4.js deleted file mode 100644 index d664924d..00000000 --- a/assets/Terms-CLjJSdI4.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-iVST85F-.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes) and all sales are final: see the ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-CVZRlSgU.js b/assets/Terms-CVZRlSgU.js deleted file mode 100644 index 591de1ea..00000000 --- a/assets/Terms-CVZRlSgU.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-WV1aysjN.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Team, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-DPSf-TPz.js b/assets/Terms-DPSf-TPz.js deleted file mode 100644 index 86fbc990..00000000 --- a/assets/Terms-DPSf-TPz.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DRAXObZB.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-DY-DzE_C.js b/assets/Terms-DY-DzE_C.js deleted file mode 100644 index b20865da..00000000 --- a/assets/Terms-DY-DzE_C.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CqAA-ZXu.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Team, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-Drxk6W26.js b/assets/Terms-Drxk6W26.js deleted file mode 100644 index ca965c7a..00000000 --- a/assets/Terms-Drxk6W26.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BcbVjARk.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes) and all sales are final: see the ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-DxyQtSpQ.js b/assets/Terms-DxyQtSpQ.js deleted file mode 100644 index 45807512..00000000 --- a/assets/Terms-DxyQtSpQ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-B9kEGiWi.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes) and all sales are final: see the ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-QBjW5d1V.js b/assets/Terms-QBjW5d1V.js deleted file mode 100644 index 0e73bdf0..00000000 --- a/assets/Terms-QBjW5d1V.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CxWP17m6.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Terms of Service · QECTOR",description:"Terms of service for QECTOR website and software.",lang:"en",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Governing Law: Québec, Canada · Last updated September 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Terms of Service",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["By using QECTOR software or this website, you agree to these terms. Questions? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Who You Are Buying From"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["QECTOR software and commercial licenses are sold by"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", sole proprietor, trading as iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Registered address: 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact: ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["All prices are quoted and charged in ",e.jsx("strong",{className:"text-primary",children:"US dollars (USD)"}),", exclusive of tax. Stripe processes all payments and adds applicable sales tax, GST/HST, or VAT at checkout based on your billing location; card details never reach QECTOR systems. License tokens are issued and emailed within minutes of successful payment (usually under 10 minutes). Subscriptions (Pro monthly or annual, Lab) renew automatically until cancelled and can be cancelled at any time; the first payment of every plan carries a 14-day money-back guarantee: see the"," ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"Refund Policy"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptance of Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"By accessing or using the QECTOR website, software, or services, you agree to be bound by these Terms of Service. If you do not agree, do not use our services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Software License"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 is licensed under the PolyForm Noncommercial License 1.0.0 for non-commercial use. Commercial use requires a separate commercial license agreement. See the"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"License page"})," for details."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Disclaimer of Warranties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. QECTOR Decoder v3 is source available (PolyForm Noncommercial for community / research use; commercial license required for commercial use). It is simulation-validated software, not a production fault-tolerance stack.'})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation of Liability"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Termination"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We may suspend or terminate your license for material breach (including breach of the non-commercial/commercial use boundaries) after written notice and a 15-day cure period. On termination, you must stop commercial use and delete tokens; no refund is due for the elapsed term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Governing Law"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"These terms shall be governed by and construed in accordance with the laws of Québec, Canada. Any disputes shall be resolved in the courts of Montréal, Québec. If you are an EU/UK consumer, this does not deprive you of the protection of the mandatory laws of your country of residence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Changes to Terms"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"We reserve the right to modify these terms at any time. Changes will be effective immediately upon posting. Continued use of the services constitutes acceptance of the modified terms. For material changes affecting paid licenses, we will give at least 30 days notice by email; changes apply to renewals and new purchases, not retroactively to the current paid term."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Questions about these terms? Contact us at"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/Terms-Yn4kZj_3.js b/assets/Terms-Yn4kZj_3.js deleted file mode 100644 index b31d6e82..00000000 --- a/assets/Terms-Yn4kZj_3.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as t}from"./LegalPage-BXZvemzZ.js";import{t as o}from"./terms-LnOasveG.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(t,{doc:o})}export{n as default}; diff --git a/assets/TermsFR-B3qetcJS.js b/assets/TermsFR-B3qetcJS.js deleted file mode 100644 index 24a6d0ee..00000000 --- a/assets/TermsFR-B3qetcJS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-OlrhtE5C.js";import{a as t}from"./terms-LnOasveG.js";import"./index-PdoH5kLF.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/TermsFR-BL-VfMSd.js b/assets/TermsFR-BL-VfMSd.js deleted file mode 100644 index d07d73ca..00000000 --- a/assets/TermsFR-BL-VfMSd.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BcbVjARk.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes) et toutes les ventes sont finales : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-BLz2i-t6.js b/assets/TermsFR-BLz2i-t6.js deleted file mode 100644 index 35e7e0aa..00000000 --- a/assets/TermsFR-BLz2i-t6.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BN-vOeL2.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Équipe, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-BY56KTEe.js b/assets/TermsFR-BY56KTEe.js deleted file mode 100644 index 6bdfa769..00000000 --- a/assets/TermsFR-BY56KTEe.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-WV1aysjN.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Équipe, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-Bf_HkjhM.js b/assets/TermsFR-Bf_HkjhM.js deleted file mode 100644 index 3c3577b7..00000000 --- a/assets/TermsFR-Bf_HkjhM.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CxWP17m6.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-C-UQyznI.js b/assets/TermsFR-C-UQyznI.js deleted file mode 100644 index 4e00803f..00000000 --- a/assets/TermsFR-C-UQyznI.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-BUYYSLdX.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-CEQwYMmk.js b/assets/TermsFR-CEQwYMmk.js deleted file mode 100644 index 537860bc..00000000 --- a/assets/TermsFR-CEQwYMmk.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CclXHnEm.js";import{a as t}from"./terms-B2iKgo_y.js";import"./index-abfjMTlQ.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function x(){return r.jsx(o,{doc:t})}export{x as default}; diff --git a/assets/TermsFR-CGlEiMoF.js b/assets/TermsFR-CGlEiMoF.js deleted file mode 100644 index 93fb88f7..00000000 --- a/assets/TermsFR-CGlEiMoF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-DvyIDT6j.js";import{a as t}from"./terms-LnOasveG.js";import"./index-Bh9DBCb3.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-D-EQoOl2.js";function x(){return r.jsx(o,{doc:t})}export{x as default}; diff --git a/assets/TermsFR-CR4HwzC7.js b/assets/TermsFR-CR4HwzC7.js deleted file mode 100644 index 17c4fa09..00000000 --- a/assets/TermsFR-CR4HwzC7.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-_BpMZhV3.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes) et toutes les ventes sont finales : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-CRefmr0E.js b/assets/TermsFR-CRefmr0E.js deleted file mode 100644 index a803b9ed..00000000 --- a/assets/TermsFR-CRefmr0E.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DkYdPRY7.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-Cd9NdZ4e.js b/assets/TermsFR-Cd9NdZ4e.js deleted file mode 100644 index 8022e92b..00000000 --- a/assets/TermsFR-Cd9NdZ4e.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-D-Mi7GTG.js";import{a as t}from"./terms-LnOasveG.js";import"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/TermsFR-CpfM0oN9.js b/assets/TermsFR-CpfM0oN9.js deleted file mode 100644 index 525416af..00000000 --- a/assets/TermsFR-CpfM0oN9.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-iVST85F-.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes) et toutes les ventes sont finales : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-DFr5huZJ.js b/assets/TermsFR-DFr5huZJ.js deleted file mode 100644 index 35ca8944..00000000 --- a/assets/TermsFR-DFr5huZJ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-B9kEGiWi.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes) et toutes les ventes sont finales : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-DGRL90sS.js b/assets/TermsFR-DGRL90sS.js deleted file mode 100644 index 1d41c251..00000000 --- a/assets/TermsFR-DGRL90sS.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DlmjLVYe.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Équipe, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-Da9N2nsG.js b/assets/TermsFR-Da9N2nsG.js deleted file mode 100644 index 43e4706e..00000000 --- a/assets/TermsFR-Da9N2nsG.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-BXZvemzZ.js";import{a as t}from"./terms-LnOasveG.js";import"./index-CcwlvHYJ.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-Bsl9IGCr.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/TermsFR-LQl3tW0l.js b/assets/TermsFR-LQl3tW0l.js deleted file mode 100644 index 40417dfd..00000000 --- a/assets/TermsFR-LQl3tW0l.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-k7aoVn24.js";import{a as t}from"./terms-DgnSX4e_.js";import"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/TermsFR-f8dBaL9s.js b/assets/TermsFR-f8dBaL9s.js deleted file mode 100644 index c28eba63..00000000 --- a/assets/TermsFR-f8dBaL9s.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-BiHfrq0e.js";import{L as o}from"./LegalPage-CFP-uSSS.js";import{a as t}from"./terms-LnOasveG.js";import"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";import"./NeuralReveal-uYarhiMA.js";function n(){return r.jsx(o,{doc:t})}export{n as default}; diff --git a/assets/TermsFR-g8LxJpb0.js b/assets/TermsFR-g8LxJpb0.js deleted file mode 100644 index 2e2847c2..00000000 --- a/assets/TermsFR-g8LxJpb0.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-DRAXObZB.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-qP37hEHa.js b/assets/TermsFR-qP37hEHa.js deleted file mode 100644 index b32b115a..00000000 --- a/assets/TermsFR-qP37hEHa.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CpdATiEY.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Équipe, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TermsFR-vMuUfUiC.js b/assets/TermsFR-vMuUfUiC.js deleted file mode 100644 index 95608dee..00000000 --- a/assets/TermsFR-vMuUfUiC.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as s}from"./index-CqAA-ZXu.js";import{N as a}from"./NeuralReveal-BflyZYSb.js";import"./vendor-PiU4YGcH.js";import"./vendor-md-CLKxNZoa.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-gsap-a3sj5zmn.js";function d(){return e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Conditions générales · QECTOR",description:"Conditions d’utilisation du site et du logiciel QECTOR.",lang:"fr",alternates:[{lang:"en",href:"https://qector.store/terms/"},{lang:"fr",href:"https://qector.store/fr/terms/"}]}),e.jsxs("section",{className:"relative py-24 md:py-32 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/50 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding",children:[e.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 bg-surface border border-gridline rounded-full text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-6",children:"Droit applicable : Québec, Canada · Dernière mise à jour : septembre 2026"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6",children:e.jsx(a,{text:"Conditions générales",className:"text-4xl md:text-6xl font-extrabold"})}),e.jsxs("p",{className:"text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed",children:["En utilisant le logiciel QECTOR ou ce site web, vous acceptez ces conditions. Questions ? ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsxs("div",{className:"card-surface border-cyan-300/25",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Votre vendeur"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Le logiciel QECTOR et les licences commerciales sont vendus par"," ",e.jsx("strong",{className:"text-primary",children:"Guillaume Lessard"}),", entrepreneur individuel, exploitant sous le nom iD01t Productions, Québec, Canada."]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:["Adresse enregistrée : 2004 De Lorimier, Longueuil, Québec, Canada, J4K 3H7.",e.jsx("br",{}),"Contact : ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"})]}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Tous les prix sont affichés et facturés en ",e.jsx("strong",{className:"text-primary",children:"dollars américains (USD)"}),", hors taxes. Stripe traite tous les paiements et ajoute la taxe de vente, la TPS/TVH ou la TVA applicable au paiement selon votre adresse de facturation; les données de carte ne parviennent jamais aux systèmes de QECTOR. Les jetons de licence sont émis et envoyés par courriel dans les minutes suivant le paiement (généralement moins de 10 minutes). Les abonnements (Pro mensuel ou annuel, Équipe, Labo) se renouvellent automatiquement jusqu’à annulation et peuvent être annulés en tout temps; le premier paiement de chaque forfait est couvert par une garantie satisfait ou remboursé de 14 jours : voir la ",e.jsx("a",{href:"/refund",className:"text-cyan-300 hover:underline",children:"politique de remboursement"}),"."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Acceptation des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"En accédant au site web, au logiciel ou aux services de QECTOR, ou en les utilisant, vous acceptez d’être lié par ces conditions générales. Si vous n’acceptez pas, n’utilisez pas nos services."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Licence du logiciel"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["QECTOR Decoder v3 est concédé sous la licence PolyForm Noncommercial 1.0.0 pour l’usage non commercial. L’usage commercial exige un contrat de licence commerciale distinct. Voir la"," ",e.jsx("a",{href:"/license",className:"text-cyan-300 hover:underline",children:"page de licence"})," pour les détails."]})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Exclusion de garanties"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS S’Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D’ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. QECTOR Decoder v3 est à source disponible (PolyForm Noncommercial pour l’usage communautaire / recherche; licence commerciale exigée pour l’usage commercial). C’est un logiciel validé par simulation, pas une pile de tolérance aux pannes de production."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Limitation de responsabilité"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"EN AUCUN CAS LES AUTEURS OU LES DÉTENTEURS DES DROITS D’AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D’UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION OU D’AUTRES TRANSACTIONS LIÉES AU LOGICIEL."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Résiliation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous pouvons suspendre ou résilier votre licence en cas de manquement grave (y compris le non-respect des limites d’usage non commercial/commercial) après notification écrite et un délai de correction de 15 jours. En cas de résiliation, vous devez cesser tout usage commercial et supprimer les jetons ; aucun remboursement n’est dû pour la période écoulée."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Droit applicable"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Ces conditions sont régies et interprétées conformément aux lois du Québec, Canada. Tout litige sera tranché devant les tribunaux de Montréal, Québec. Si vous êtes un consommateur de l’UE/Royaume-Uni, cette clause ne vous prive pas de la protection des lois impératives de votre pays de résidence."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Modifications des conditions"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Nous nous réservons le droit de modifier ces conditions à tout moment. Les modifications prendront effet immédiatement après leur publication. La poursuite de l’utilisation des services vaut acceptation des conditions modifiées. Pour toute modification substantielle affectant les licences payées, nous donnerons un préavis d’au moins 30 jours par courriel ; les modifications s’appliquent aux renouvellements et aux nouveaux achats, sans effet rétroactif sur la période payée en cours."})]}),e.jsxs("div",{className:"card-surface",children:[e.jsx("h2",{className:"text-xl font-bold mb-4",children:"Contact"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed",children:["Des questions sur ces conditions ? Écrivez-nous à"," ",e.jsx("a",{href:"mailto:admin@qector.store",className:"text-cyan-300 hover:underline",children:"admin@qector.store"}),"."]})]})]})})]})}export{d as default}; diff --git a/assets/TrialForm-BEDfCuvx.js b/assets/TrialForm-BEDfCuvx.js deleted file mode 100644 index 6788b5cb..00000000 --- a/assets/TrialForm-BEDfCuvx.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as v}from"./vendor-react-BiHfrq0e.js";import{L as g}from"./vendor-PiU4YGcH.js";import{P as p,T as P}from"./index-DlmjLVYe.js";function L({name:a,price:t,period:s="",desc:r,features:o,excluded:i,featured:l=!1,showRibbon:m=!0,featuredLabel:u="Most Popular",accent:n="cyan",ctaLabel:c="Contact Sales",ctaHref:h="/contact",centered:f=!1,className:x=""}){const b=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",q=n==="gold"?"text-gold-400":"text-cyan-300",w=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",j=n==="gold"?"btn-gold":"btn-cyan",E=/^https?:\/\//i.test(h),y=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${l?j:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${f?"text-center":""} ${l?b:""} ${x}`,children:[l&&m&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${w}`,children:u}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:a}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[t,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:s})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:r}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${f?"text-left":""}`,children:[e.jsx("span",{className:`${q} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),d]})]},d)),i?.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${f?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),d]})]},d))]}),E?e.jsx("a",{href:h,className:y,rel:"noopener",children:c}):e.jsx(g,{to:h,className:y,children:c})]})}const k=[{q:"How do I try QECTOR commercially before paying?",a:"Request the free 14-day commercial trial on this page: a Pro licence token arrives by e-mail within minutes, for up to 5 internal users. No card is needed and the token simply expires; there is nothing to cancel. One trial per e-mail address per year."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1. The token is verified offline against a public key in the package: no licence server, works air-gapped.'},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual), Team and Lab renew automatically until cancelled, and you get a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full and revoke the token. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"How many seats does each plan cover, and what counts as production?",a:"Pro: 1 named user. Team: up to 10. Lab: up to 25. Enterprise: unlimited. All paid plans grant production rights for internal use. The free trial and the 60-day Pilot are for evaluation (benchmarking, integration testing, threshold studies), not production. Pro Perpetual covers one named user for every 3.x release; a major version such as 4.0 is a new licence."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro, Team and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding (that is what PolyForm Noncommercial says). A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Team and Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],O=[{q:"Comment essayer QECTOR commercialement avant de payer ?",a:"Demandez l’essai commercial gratuit de 14 jours sur cette page : un jeton de licence Pro arrive par courriel en quelques minutes, pour jusqu’à 5 utilisateurs internes. Aucune carte n’est requise et le jeton expire de lui-même : rien à annuler. Un essai par adresse courriel par année."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1. Le jeton se vérifie hors ligne contre une clé publique incluse dans le paquet : aucun serveur de licence, fonctionne hors réseau.'},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel), Équipe et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier et révoquons le jeton. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Combien de sièges chaque forfait couvre-t-il, et qu’est-ce que la production ?",a:"Pro : 1 utilisateur nommé. Équipe : jusqu’à 10. Labo : jusqu’à 25. Entreprise : illimité. Tous les forfaits payants accordent des droits de production pour usage interne. L’essai gratuit et le Pilote de 60 jours servent à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production. Pro Perpétuel couvre un utilisateur nommé pour toutes les versions 3.x; une version majeure comme 4.0 est une nouvelle licence."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro, Équipe et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement (c’est ce que prévoit PolyForm Noncommercial). Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant, pour le soutien ou pour transmettre des droits commerciaux à un partenaire industriel, obtiennent 40 % de rabais sur Équipe et Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}],T={en:{label:"Work e-mail",placeholder:"you@company.com",terms:"I accept the",termsLink:"licence terms",termsTail:`(${p.trialDays}-day commercial evaluation, internal use only).`,submit:`Start ${p.trialDays}-day trial`,sending:"Sending…",done:"Check your inbox: your trial token arrives within a few minutes.",error:"Something went wrong. Please retry, or email admin@qector.store.",termsRequired:"Please accept the licence terms."},fr:{label:"Courriel professionnel",placeholder:"vous@entreprise.com",terms:"J’accepte les",termsLink:"conditions de licence",termsTail:`(évaluation commerciale de ${p.trialDays} jours, usage interne seulement).`,submit:`Commencer l’essai de ${p.trialDays} jours`,sending:"Envoi…",done:"Vérifiez votre boîte de réception : votre jeton d’essai arrive d’ici quelques minutes.",error:"Une erreur est survenue. Réessayez ou écrivez à admin@qector.store.",termsRequired:"Veuillez accepter les conditions de licence."}};function R({lang:a="en"}){const t=T[a],[s,r]=v.useState("idle"),[o,i]=v.useState("");async function l(m){m.preventDefault();const u=new FormData(m.currentTarget);if(!u.get("accept_terms")){r("error"),i(t.termsRequired);return}r("sending");try{const n=await fetch(P,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({email:String(u.get("email")||""),accept_terms:!0,website:String(u.get("website")||"")})});if(n.ok)r("done"),i(t.done);else{const c=await n.json().catch(()=>({}));r("error"),i(typeof c.error=="string"?c.error:t.error)}}catch{r("error"),i(t.error)}}return s==="done"?e.jsx("p",{role:"status",className:"text-cyan-200 text-sm font-medium max-w-sm",children:o}):e.jsxs("form",{onSubmit:l,className:"w-full max-w-sm space-y-3 text-left",noValidate:!1,children:[e.jsx("label",{className:"block text-xs uppercase tracking-wider text-secondary",htmlFor:`trial-email-${a}`,children:t.label}),e.jsx("input",{id:`trial-email-${a}`,name:"email",type:"email",required:!0,autoComplete:"email",placeholder:t.placeholder,className:"w-full rounded-lg bg-void/80 border border-cyan-300/30 px-4 py-3 text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300"}),e.jsx("input",{type:"text",name:"website",tabIndex:-1,autoComplete:"off","aria-hidden":"true",className:"hidden"}),e.jsxs("label",{className:"flex items-start gap-2 text-xs text-secondary",children:[e.jsx("input",{type:"checkbox",name:"accept_terms",className:"mt-0.5 accent-cyan-400"}),e.jsxs("span",{children:[t.terms," ",e.jsx(g,{to:"/license",className:"text-cyan-300 hover:underline",children:t.termsLink})," ",t.termsTail]})]}),e.jsx("button",{type:"submit",disabled:s==="sending",className:"btn-cyan w-full py-3 font-bold disabled:opacity-60",children:s==="sending"?t.sending:t.submit}),s==="error"&&e.jsx("p",{role:"alert",className:"text-red-300 text-xs",children:o})]})}export{k as F,L as P,R as T,O as a}; diff --git a/assets/TrialForm-BIjatKya.js b/assets/TrialForm-BIjatKya.js deleted file mode 100644 index 49c9e17b..00000000 --- a/assets/TrialForm-BIjatKya.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as v}from"./vendor-react-BiHfrq0e.js";import{L as x}from"./vendor-PiU4YGcH.js";import{P as p,T as P}from"./index-BN-vOeL2.js";function k({name:a,price:t,period:s="",desc:r,features:i,excluded:o,featured:l=!1,showRibbon:m=!0,featuredLabel:c="Most Popular",accent:n="cyan",ctaLabel:u="Contact Sales",ctaHref:h="/contact",centered:f=!1,className:b=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",q=n==="gold"?"text-gold-400":"text-cyan-300",j=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",w=n==="gold"?"btn-gold":"btn-cyan",E=/^https?:\/\//i.test(h),y=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${l?w:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${f?"text-center":""} ${l?g:""} ${b}`,children:[l&&m&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${j}`,children:c}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:a}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[t,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:s})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:r}),i&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[i.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${f?"text-left":""}`,children:[e.jsx("span",{className:`${q} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),d]})]},d)),o?.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${f?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),d]})]},d))]}),E?e.jsx("a",{href:h,className:y,rel:"noopener",children:u}):e.jsx(x,{to:h,className:y,children:u})]})}const L=[{q:"How do I try QECTOR commercially before paying?",a:"Request the free 14-day commercial trial on this page: a Pro licence token arrives by e-mail within minutes, for up to 5 internal users. No card is needed and the token simply expires; there is nothing to cancel. One trial per e-mail address per year."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1. The token is verified offline against a public key in the package: no licence server, works air-gapped.'},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual), Team and Lab renew automatically until cancelled, and you get a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full and revoke the token. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"How many seats does each plan cover, and what counts as production?",a:"Pro: 1 named user. Team: up to 10. Lab: up to 25. Enterprise: unlimited. All paid plans grant production rights for internal use. The free trial and the 60-day Pilot are for evaluation (benchmarking, integration testing, threshold studies), not production. Pro Perpetual covers one named user for every 3.x release; a major version such as 4.0 is a new licence."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro, Team and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Industry-funded or contract research at a university is commercial; it gets 40% off Team and Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],O=[{q:"Comment essayer QECTOR commercialement avant de payer ?",a:"Demandez l’essai commercial gratuit de 14 jours sur cette page : un jeton de licence Pro arrive par courriel en quelques minutes, pour jusqu’à 5 utilisateurs internes. Aucune carte n’est requise et le jeton expire de lui-même : rien à annuler. Un essai par adresse courriel par année."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1. Le jeton se vérifie hors ligne contre une clé publique incluse dans le paquet : aucun serveur de licence, fonctionne hors réseau.'},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel), Équipe et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier et révoquons le jeton. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Combien de sièges chaque forfait couvre-t-il, et qu’est-ce que la production ?",a:"Pro : 1 utilisateur nommé. Équipe : jusqu’à 10. Labo : jusqu’à 25. Entreprise : illimité. Tous les forfaits payants accordent des droits de production pour usage interne. L’essai gratuit et le Pilote de 60 jours servent à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production. Pro Perpétuel couvre un utilisateur nommé pour toutes les versions 3.x; une version majeure comme 4.0 est une nouvelle licence."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro, Équipe et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. La recherche universitaire financée par l’industrie ou sous contrat est commerciale; elle obtient 40 % de rabais sur Équipe et Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}],T={en:{label:"Work e-mail",placeholder:"you@company.com",terms:"I accept the",termsLink:"licence terms",termsTail:`(${p.trialDays}-day commercial evaluation, internal use only).`,submit:`Start ${p.trialDays}-day trial`,sending:"Sending…",done:"Check your inbox: your trial token arrives within a few minutes.",error:"Something went wrong. Please retry, or email admin@qector.store.",termsRequired:"Please accept the licence terms."},fr:{label:"Courriel professionnel",placeholder:"vous@entreprise.com",terms:"J’accepte les",termsLink:"conditions de licence",termsTail:`(évaluation commerciale de ${p.trialDays} jours, usage interne seulement).`,submit:`Commencer l’essai de ${p.trialDays} jours`,sending:"Envoi…",done:"Vérifiez votre boîte de réception : votre jeton d’essai arrive d’ici quelques minutes.",error:"Une erreur est survenue. Réessayez ou écrivez à admin@qector.store.",termsRequired:"Veuillez accepter les conditions de licence."}};function R({lang:a="en"}){const t=T[a],[s,r]=v.useState("idle"),[i,o]=v.useState("");async function l(m){m.preventDefault();const c=new FormData(m.currentTarget);if(!c.get("accept_terms")){r("error"),o(t.termsRequired);return}r("sending");try{const n=await fetch(P,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({email:String(c.get("email")||""),accept_terms:!0,website:String(c.get("website")||"")})});if(n.ok)r("done"),o(t.done);else{const u=await n.json().catch(()=>({}));r("error"),o(typeof u.error=="string"?u.error:t.error)}}catch{r("error"),o(t.error)}}return s==="done"?e.jsx("p",{role:"status",className:"text-cyan-200 text-sm font-medium max-w-sm",children:i}):e.jsxs("form",{onSubmit:l,className:"w-full max-w-sm space-y-3 text-left",noValidate:!1,children:[e.jsx("label",{className:"block text-xs uppercase tracking-wider text-secondary",htmlFor:`trial-email-${a}`,children:t.label}),e.jsx("input",{id:`trial-email-${a}`,name:"email",type:"email",required:!0,autoComplete:"email",placeholder:t.placeholder,className:"w-full rounded-lg bg-void/80 border border-cyan-300/30 px-4 py-3 text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300"}),e.jsx("input",{type:"text",name:"website",tabIndex:-1,autoComplete:"off","aria-hidden":"true",className:"hidden"}),e.jsxs("label",{className:"flex items-start gap-2 text-xs text-secondary",children:[e.jsx("input",{type:"checkbox",name:"accept_terms",className:"mt-0.5 accent-cyan-400"}),e.jsxs("span",{children:[t.terms," ",e.jsx(x,{to:"/license",className:"text-cyan-300 hover:underline",children:t.termsLink})," ",t.termsTail]})]}),e.jsx("button",{type:"submit",disabled:s==="sending",className:"btn-cyan w-full py-3 font-bold disabled:opacity-60",children:s==="sending"?t.sending:t.submit}),s==="error"&&e.jsx("p",{role:"alert",className:"text-red-300 text-xs",children:i})]})}export{L as F,k as P,R as T,O as a}; diff --git a/assets/TrialForm-CC5CTQMP.js b/assets/TrialForm-CC5CTQMP.js deleted file mode 100644 index 5688a4d7..00000000 --- a/assets/TrialForm-CC5CTQMP.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as v}from"./vendor-react-BiHfrq0e.js";import{L as x}from"./vendor-PiU4YGcH.js";import{P as p,T as P}from"./index-WV1aysjN.js";function k({name:a,price:t,period:s="",desc:r,features:i,excluded:o,featured:l=!1,showRibbon:m=!0,featuredLabel:c="Most Popular",accent:n="cyan",ctaLabel:u="Contact Sales",ctaHref:h="/contact",centered:f=!1,className:b=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",q=n==="gold"?"text-gold-400":"text-cyan-300",j=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",E=n==="gold"?"btn-gold":"btn-cyan",w=/^https?:\/\//i.test(h),y=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${l?E:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${f?"text-center":""} ${l?g:""} ${b}`,children:[l&&m&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 text-xs font-bold uppercase tracking-wider rounded-full ${j}`,children:c}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:a}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[t,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:s})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:r}),i&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[i.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${f?"text-left":""}`,children:[e.jsx("span",{className:`${q} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),d]})]},d)),o?.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${f?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),d]})]},d))]}),w?e.jsx("a",{href:h,className:y,rel:"noopener",children:u}):e.jsx(x,{to:h,className:y,children:u})]})}const L=[{q:"How do I try QECTOR commercially before paying?",a:"Request the free 14-day commercial trial on this page: a Pro licence token arrives by e-mail within minutes, for up to 5 internal users. No card is needed and the token simply expires; there is nothing to cancel. One trial per e-mail address per year."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1. The token is verified offline against a public key in the package: no licence server, works air-gapped.'},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual), Team and Lab renew automatically until cancelled, and you get a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full and revoke the token. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"How many seats does each plan cover, and what counts as production?",a:"Pro: 1 named user. Team: up to 10. Lab: up to 25. Enterprise: unlimited. All paid plans grant production rights for internal use. The free trial and the 60-day Pilot are for evaluation (benchmarking, integration testing, threshold studies), not production. Pro Perpetual covers one named user for every 3.x release; a major version such as 4.0 is a new licence."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro, Team and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Industry-funded or contract research at a university is commercial; it gets 40% off Team and Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],O=[{q:"Comment essayer QECTOR commercialement avant de payer ?",a:"Demandez l’essai commercial gratuit de 14 jours sur cette page : un jeton de licence Pro arrive par courriel en quelques minutes, pour jusqu’à 5 utilisateurs internes. Aucune carte n’est requise et le jeton expire de lui-même : rien à annuler. Un essai par adresse courriel par année."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1. Le jeton se vérifie hors ligne contre une clé publique incluse dans le paquet : aucun serveur de licence, fonctionne hors réseau.'},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel), Équipe et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier et révoquons le jeton. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Combien de sièges chaque forfait couvre-t-il, et qu’est-ce que la production ?",a:"Pro : 1 utilisateur nommé. Équipe : jusqu’à 10. Labo : jusqu’à 25. Entreprise : illimité. Tous les forfaits payants accordent des droits de production pour usage interne. L’essai gratuit et le Pilote de 60 jours servent à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production. Pro Perpétuel couvre un utilisateur nommé pour toutes les versions 3.x; une version majeure comme 4.0 est une nouvelle licence."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro, Équipe et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. La recherche universitaire financée par l’industrie ou sous contrat est commerciale; elle obtient 40 % de rabais sur Équipe et Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}],T={en:{label:"Work e-mail",placeholder:"you@company.com",terms:"I accept the",termsLink:"licence terms",termsTail:`(${p.trialDays}-day commercial evaluation, internal use only).`,submit:`Start ${p.trialDays}-day trial`,sending:"Sending…",done:"Check your inbox: your trial token arrives within a few minutes.",error:"Something went wrong. Please retry, or email admin@qector.store.",termsRequired:"Please accept the licence terms."},fr:{label:"Courriel professionnel",placeholder:"vous@entreprise.com",terms:"J’accepte les",termsLink:"conditions de licence",termsTail:`(évaluation commerciale de ${p.trialDays} jours, usage interne seulement).`,submit:`Commencer l’essai de ${p.trialDays} jours`,sending:"Envoi…",done:"Vérifiez votre boîte de réception : votre jeton d’essai arrive d’ici quelques minutes.",error:"Une erreur est survenue. Réessayez ou écrivez à admin@qector.store.",termsRequired:"Veuillez accepter les conditions de licence."}};function R({lang:a="en"}){const t=T[a],[s,r]=v.useState("idle"),[i,o]=v.useState("");async function l(m){m.preventDefault();const c=new FormData(m.currentTarget);if(!c.get("accept_terms")){r("error"),o(t.termsRequired);return}r("sending");try{const n=await fetch(P,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({email:String(c.get("email")||""),accept_terms:!0,website:String(c.get("website")||"")})});if(n.ok)r("done"),o(t.done);else{const u=await n.json().catch(()=>({}));r("error"),o(typeof u.error=="string"?u.error:t.error)}}catch{r("error"),o(t.error)}}return s==="done"?e.jsx("p",{role:"status",className:"text-cyan-200 text-sm font-medium max-w-sm",children:i}):e.jsxs("form",{onSubmit:l,className:"w-full max-w-sm space-y-3 text-left",noValidate:!1,children:[e.jsx("label",{className:"block text-xs uppercase tracking-wider text-secondary",htmlFor:`trial-email-${a}`,children:t.label}),e.jsx("input",{id:`trial-email-${a}`,name:"email",type:"email",required:!0,autoComplete:"email",placeholder:t.placeholder,className:"w-full rounded-lg bg-void/80 border border-cyan-300/30 px-4 py-3 text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300"}),e.jsx("input",{type:"text",name:"website",tabIndex:-1,autoComplete:"off","aria-hidden":"true",className:"hidden"}),e.jsxs("label",{className:"flex items-start gap-2 text-xs text-secondary",children:[e.jsx("input",{type:"checkbox",name:"accept_terms",className:"mt-0.5 accent-cyan-400"}),e.jsxs("span",{children:[t.terms," ",e.jsx(x,{to:"/license",className:"text-cyan-300 hover:underline",children:t.termsLink})," ",t.termsTail]})]}),e.jsx("button",{type:"submit",disabled:s==="sending",className:"btn-cyan w-full py-3 font-bold disabled:opacity-60",children:s==="sending"?t.sending:t.submit}),s==="error"&&e.jsx("p",{role:"alert",className:"text-red-300 text-xs",children:i})]})}export{L as F,k as P,R as T,O as a}; diff --git a/assets/TrialForm-CpW40uwE.js b/assets/TrialForm-CpW40uwE.js deleted file mode 100644 index aa1b0074..00000000 --- a/assets/TrialForm-CpW40uwE.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as v}from"./vendor-react-BiHfrq0e.js";import{L as g}from"./vendor-PiU4YGcH.js";import{P as p,T as P}from"./index-CqAA-ZXu.js";function L({name:a,price:t,period:s="",desc:r,features:o,excluded:i,featured:l=!1,showRibbon:m=!0,featuredLabel:u="Most Popular",accent:n="cyan",ctaLabel:c="Contact Sales",ctaHref:h="/contact",centered:f=!1,className:x=""}){const b=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",q=n==="gold"?"text-gold-400":"text-cyan-300",w=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",j=n==="gold"?"btn-gold":"btn-cyan",E=/^https?:\/\//i.test(h),y=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${l?j:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${f?"text-center":""} ${l?b:""} ${x}`,children:[l&&m&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${w}`,children:u}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:a}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[t,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:s})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:r}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${f?"text-left":""}`,children:[e.jsx("span",{className:`${q} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),d]})]},d)),i?.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${f?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),d]})]},d))]}),E?e.jsx("a",{href:h,className:y,rel:"noopener",children:c}):e.jsx(g,{to:h,className:y,children:c})]})}const k=[{q:"How do I try QECTOR commercially before paying?",a:"Request the free 14-day commercial trial on this page: a Pro licence token arrives by e-mail within minutes, for up to 5 internal users. No card is needed and the token simply expires; there is nothing to cancel. One trial per e-mail address per year."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1. The token is verified offline against a public key in the package: no licence server, works air-gapped.'},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual), Team and Lab renew automatically until cancelled, and you get a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full and revoke the token. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"How many seats does each plan cover, and what counts as production?",a:"Pro: 1 named user. Team: up to 10. Lab: up to 25. Enterprise: unlimited. All paid plans grant production rights for internal use. The free trial and the 60-day Pilot are for evaluation (benchmarking, integration testing, threshold studies), not production. Pro Perpetual covers one named user for every 3.x release; a major version such as 4.0 is a new licence."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro, Team and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding (that is what PolyForm Noncommercial says). A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Team and Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],O=[{q:"Comment essayer QECTOR commercialement avant de payer ?",a:"Demandez l’essai commercial gratuit de 14 jours sur cette page : un jeton de licence Pro arrive par courriel en quelques minutes, pour jusqu’à 5 utilisateurs internes. Aucune carte n’est requise et le jeton expire de lui-même : rien à annuler. Un essai par adresse courriel par année."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1. Le jeton se vérifie hors ligne contre une clé publique incluse dans le paquet : aucun serveur de licence, fonctionne hors réseau.'},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel), Équipe et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier et révoquons le jeton. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Combien de sièges chaque forfait couvre-t-il, et qu’est-ce que la production ?",a:"Pro : 1 utilisateur nommé. Équipe : jusqu’à 10. Labo : jusqu’à 25. Entreprise : illimité. Tous les forfaits payants accordent des droits de production pour usage interne. L’essai gratuit et le Pilote de 60 jours servent à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production. Pro Perpétuel couvre un utilisateur nommé pour toutes les versions 3.x; une version majeure comme 4.0 est une nouvelle licence."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro, Équipe et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement (c’est ce que prévoit PolyForm Noncommercial). Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant, pour le soutien ou pour transmettre des droits commerciaux à un partenaire industriel, obtiennent 40 % de rabais sur Équipe et Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}],T={en:{label:"Work e-mail",placeholder:"you@company.com",terms:"I accept the",termsLink:"licence terms",termsTail:`(${p.trialDays}-day commercial evaluation, internal use only).`,submit:`Start ${p.trialDays}-day trial`,sending:"Sending…",done:"Check your inbox: your trial token arrives within a few minutes.",error:"Something went wrong. Please retry, or email admin@qector.store.",termsRequired:"Please accept the licence terms."},fr:{label:"Courriel professionnel",placeholder:"vous@entreprise.com",terms:"J’accepte les",termsLink:"conditions de licence",termsTail:`(évaluation commerciale de ${p.trialDays} jours, usage interne seulement).`,submit:`Commencer l’essai de ${p.trialDays} jours`,sending:"Envoi…",done:"Vérifiez votre boîte de réception : votre jeton d’essai arrive d’ici quelques minutes.",error:"Une erreur est survenue. Réessayez ou écrivez à admin@qector.store.",termsRequired:"Veuillez accepter les conditions de licence."}};function R({lang:a="en"}){const t=T[a],[s,r]=v.useState("idle"),[o,i]=v.useState("");async function l(m){m.preventDefault();const u=new FormData(m.currentTarget);if(!u.get("accept_terms")){r("error"),i(t.termsRequired);return}r("sending");try{const n=await fetch(P,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({email:String(u.get("email")||""),accept_terms:!0,website:String(u.get("website")||"")})});if(n.ok)r("done"),i(t.done);else{const c=await n.json().catch(()=>({}));r("error"),i(typeof c.error=="string"?c.error:t.error)}}catch{r("error"),i(t.error)}}return s==="done"?e.jsx("p",{role:"status",className:"text-cyan-200 text-sm font-medium max-w-sm",children:o}):e.jsxs("form",{onSubmit:l,className:"w-full max-w-sm space-y-3 text-left",noValidate:!1,children:[e.jsx("label",{className:"block text-xs uppercase tracking-wider text-secondary",htmlFor:`trial-email-${a}`,children:t.label}),e.jsx("input",{id:`trial-email-${a}`,name:"email",type:"email",required:!0,autoComplete:"email",placeholder:t.placeholder,className:"w-full rounded-lg bg-void/80 border border-cyan-300/30 px-4 py-3 text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300"}),e.jsx("input",{type:"text",name:"website",tabIndex:-1,autoComplete:"off","aria-hidden":"true",className:"hidden"}),e.jsxs("label",{className:"flex items-start gap-2 text-xs text-secondary",children:[e.jsx("input",{type:"checkbox",name:"accept_terms",className:"mt-0.5 accent-cyan-400"}),e.jsxs("span",{children:[t.terms," ",e.jsx(g,{to:"/license",className:"text-cyan-300 hover:underline",children:t.termsLink})," ",t.termsTail]})]}),e.jsx("button",{type:"submit",disabled:s==="sending",className:"btn-cyan w-full py-3 font-bold disabled:opacity-60",children:s==="sending"?t.sending:t.submit}),s==="error"&&e.jsx("p",{role:"alert",className:"text-red-300 text-xs",children:o})]})}export{k as F,L as P,R as T,O as a}; diff --git a/assets/TrialForm-D2xU-ZBp.js b/assets/TrialForm-D2xU-ZBp.js deleted file mode 100644 index fcfa179a..00000000 --- a/assets/TrialForm-D2xU-ZBp.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as v}from"./vendor-react-BiHfrq0e.js";import{L as x}from"./vendor-PiU4YGcH.js";import{P as p,T as P}from"./index-CpdATiEY.js";function k({name:a,price:t,period:s="",desc:r,features:i,excluded:o,featured:l=!1,showRibbon:m=!0,featuredLabel:c="Most Popular",accent:n="cyan",ctaLabel:u="Contact Sales",ctaHref:h="/contact",centered:f=!1,className:b=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",q=n==="gold"?"text-gold-400":"text-cyan-300",j=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",E=n==="gold"?"btn-gold":"btn-cyan",w=/^https?:\/\//i.test(h),y=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${l?E:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${f?"text-center":""} ${l?g:""} ${b}`,children:[l&&m&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 text-xs font-bold uppercase tracking-wider rounded-full ${j}`,children:c}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:a}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[t,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:s})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:r}),i&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[i.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${f?"text-left":""}`,children:[e.jsx("span",{className:`${q} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),d]})]},d)),o?.map(d=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${f?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),d]})]},d))]}),w?e.jsx("a",{href:h,className:y,rel:"noopener",children:u}):e.jsx(x,{to:h,className:y,children:u})]})}const L=[{q:"How do I try QECTOR commercially before paying?",a:"Request the free 14-day commercial trial on this page: a Pro licence token arrives by e-mail within minutes, for up to 5 internal users. No card is needed and the token simply expires; there is nothing to cancel. One trial per e-mail address per year."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1. The token is verified offline against a public key in the package: no licence server, works air-gapped.'},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual), Team and Lab renew automatically until cancelled, and you get a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full and revoke the token. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"How many seats does each plan cover, and what counts as production?",a:"Pro: 1 named user. Team: up to 10. Lab: up to 25. Enterprise: unlimited. All paid plans grant production rights for internal use. The free trial and the 60-day Pilot are for evaluation (benchmarking, integration testing, threshold studies), not production. Pro Perpetual covers one named user for every 3.x release; a major version such as 4.0 is a new licence."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro, Team and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Industry-funded or contract research at a university is commercial; it gets 40% off Team and Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],O=[{q:"Comment essayer QECTOR commercialement avant de payer ?",a:"Demandez l’essai commercial gratuit de 14 jours sur cette page : un jeton de licence Pro arrive par courriel en quelques minutes, pour jusqu’à 5 utilisateurs internes. Aucune carte n’est requise et le jeton expire de lui-même : rien à annuler. Un essai par adresse courriel par année."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1. Le jeton se vérifie hors ligne contre une clé publique incluse dans le paquet : aucun serveur de licence, fonctionne hors réseau.'},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel), Équipe et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier et révoquons le jeton. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Combien de sièges chaque forfait couvre-t-il, et qu’est-ce que la production ?",a:"Pro : 1 utilisateur nommé. Équipe : jusqu’à 10. Labo : jusqu’à 25. Entreprise : illimité. Tous les forfaits payants accordent des droits de production pour usage interne. L’essai gratuit et le Pilote de 60 jours servent à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production. Pro Perpétuel couvre un utilisateur nommé pour toutes les versions 3.x; une version majeure comme 4.0 est une nouvelle licence."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro, Équipe et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. La recherche universitaire financée par l’industrie ou sous contrat est commerciale; elle obtient 40 % de rabais sur Équipe et Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}],T={en:{label:"Work e-mail",placeholder:"you@company.com",terms:"I accept the",termsLink:"licence terms",termsTail:`(${p.trialDays}-day commercial evaluation, internal use only).`,submit:`Start ${p.trialDays}-day trial`,sending:"Sending…",done:"Check your inbox: your trial token arrives within a few minutes.",error:"Something went wrong. Please retry, or email admin@qector.store.",termsRequired:"Please accept the licence terms."},fr:{label:"Courriel professionnel",placeholder:"vous@entreprise.com",terms:"J’accepte les",termsLink:"conditions de licence",termsTail:`(évaluation commerciale de ${p.trialDays} jours, usage interne seulement).`,submit:`Commencer l’essai de ${p.trialDays} jours`,sending:"Envoi…",done:"Vérifiez votre boîte de réception : votre jeton d’essai arrive d’ici quelques minutes.",error:"Une erreur est survenue. Réessayez ou écrivez à admin@qector.store.",termsRequired:"Veuillez accepter les conditions de licence."}};function R({lang:a="en"}){const t=T[a],[s,r]=v.useState("idle"),[i,o]=v.useState("");async function l(m){m.preventDefault();const c=new FormData(m.currentTarget);if(!c.get("accept_terms")){r("error"),o(t.termsRequired);return}r("sending");try{const n=await fetch(P,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({email:String(c.get("email")||""),accept_terms:!0,website:String(c.get("website")||"")})});if(n.ok)r("done"),o(t.done);else{const u=await n.json().catch(()=>({}));r("error"),o(typeof u.error=="string"?u.error:t.error)}}catch{r("error"),o(t.error)}}return s==="done"?e.jsx("p",{role:"status",className:"text-cyan-200 text-sm font-medium max-w-sm",children:i}):e.jsxs("form",{onSubmit:l,className:"w-full max-w-sm space-y-3 text-left",noValidate:!1,children:[e.jsx("label",{className:"block text-xs uppercase tracking-wider text-secondary",htmlFor:`trial-email-${a}`,children:t.label}),e.jsx("input",{id:`trial-email-${a}`,name:"email",type:"email",required:!0,autoComplete:"email",placeholder:t.placeholder,className:"w-full rounded-lg bg-void/80 border border-cyan-300/30 px-4 py-3 text-primary placeholder:text-muted-foreground focus:outline-none focus:border-cyan-300"}),e.jsx("input",{type:"text",name:"website",tabIndex:-1,autoComplete:"off","aria-hidden":"true",className:"hidden"}),e.jsxs("label",{className:"flex items-start gap-2 text-xs text-secondary",children:[e.jsx("input",{type:"checkbox",name:"accept_terms",className:"mt-0.5 accent-cyan-400"}),e.jsxs("span",{children:[t.terms," ",e.jsx(x,{to:"/license",className:"text-cyan-300 hover:underline",children:t.termsLink})," ",t.termsTail]})]}),e.jsx("button",{type:"submit",disabled:s==="sending",className:"btn-cyan w-full py-3 font-bold disabled:opacity-60",children:s==="sending"?t.sending:t.submit}),s==="error"&&e.jsx("p",{role:"alert",className:"text-red-300 text-xs",children:i})]})}export{L as F,k as P,R as T,O as a}; diff --git a/assets/UseCases-C79R3CZj.js b/assets/UseCases-C79R3CZj.js deleted file mode 100644 index c0c1d7bb..00000000 --- a/assets/UseCases-C79R3CZj.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i,L as r}from"./index-CCmwjNGU.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const n=[{id:"hardware",who:"Quantum hardware teams",need:"You run memory experiments and need decoders that match your noise, scale to batch sizes and can run inside a locked-down lab network.",how:["Turn Stim circuits or measured detector error models into weighted decoders in one call.","Batch-decode on GPU (CUDA or OpenCL) with a Pro or Lab licence.","Licences verify offline, so decoding works on air-gapped control machines.","Compare matching, Union-Find and BP-OSD on the same detector graph before choosing one."],plan:"Pro or Lab"},{id:"qldpc",who:"qLDPC code researchers",need:"Your codes are not graph-like, so matching decoders do not apply, and you need to compare BP variants fairly.",how:["BP-OSD and Relay-BP with configurable OSD order and damping.","Built-in code families, including bivariate bicycle codes, as parity-check matrices.","Every correction is checked against its syndrome, so a decoder failure is never silent.","Sinter integration for threshold and logical-error-rate sweeps."],plan:"Free for non-commercial research; Lab for funded commercial work"},{id:"academic",who:"Universities and public labs",need:"You teach or research QEC and need a decoder library students can install in one command, without licence paperwork.",how:["Free under PolyForm Noncommercial for academic, educational and public research use, whatever the funding source.","Wheels for Python 3.9 to 3.14 on Linux, Windows and macOS: no compiler needed.","A free desktop Workbench for teaching without code.","40% off Lab when a paid plan is needed, for example to pass commercial rights to an industry partner."],plan:"Free, or Lab at 40% off"},{id:"claude",who:"Teams working with Claude",need:"You want an assistant that can build codes, decode syndromes and check results without sending data off the machine.",how:["The QECTOR Claude plugin exposes verified decoding tools to Claude Code and Claude Desktop.","The default server refuses network access and validates every message against JSON Schema.","Every result carries a status, so Claude never reports an unchecked result as verified."],plan:"Free plugin; the decoder licence follows your use"}];function l(){return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Use Cases · QECTOR",description:"How quantum hardware teams, qLDPC researchers, universities and Claude users use QECTOR Decoder v3: weighted circuit decoding, GPU batches, BP-OSD for qLDPC, free academic use and offline licensing."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Use Cases"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed",children:"What each kind of team gets from QECTOR, and which plan fits."}),e.jsx("nav",{"aria-label":"Use cases",className:"flex flex-wrap justify-center gap-2 mt-6",children:n.map(a=>e.jsx("a",{href:`#${a.id}`,className:"px-3 py-1.5 rounded-full border border-gridline text-sm text-secondary hover:text-cyan-300 hover:border-cyan-300/40",children:a.who},a.id))})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-8",children:[n.map(a=>e.jsxs("article",{id:a.id,className:"scroll-mt-28 bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6 md:p-8 grid md:grid-cols-[1fr_1.4fr] gap-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:a.who}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:a.need}),e.jsxs("p",{className:"text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Fits: "}),e.jsx("span",{className:"text-cyan-300 font-semibold",children:a.plan})]})]}),e.jsx("ul",{className:"space-y-3",children:a.how.map(s=>e.jsxs("li",{className:"flex gap-3 text-secondary text-sm leading-relaxed",children:[e.jsx("span",{className:"text-cyan-300 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsx("span",{children:s})]},s))})]},a.id)),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4 pt-4",children:[e.jsx(r,{to:"/getting-started",className:"btn-cyan",children:"Try it in 15 minutes"}),e.jsx(r,{to:"/pricing",className:"btn-outline",children:"Compare plans"})]})]})})]})}export{l as default}; diff --git a/assets/UseCases-DNGcu2gl.js b/assets/UseCases-DNGcu2gl.js deleted file mode 100644 index b4fd8f78..00000000 --- a/assets/UseCases-DNGcu2gl.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i,L as r}from"./index-DayaklK-.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const n=[{id:"hardware",who:"Quantum hardware teams",need:"You run memory experiments and need decoders that match your noise, scale to batch sizes and can run inside a locked-down lab network.",how:["Turn Stim circuits or measured detector error models into weighted decoders in one call.","Batch-decode on GPU (CUDA or OpenCL) with a Pro or Lab licence.","Licences verify offline, so decoding works on air-gapped control machines.","Compare matching, Union-Find and BP-OSD on the same detector graph before choosing one."],plan:"Pro or Lab"},{id:"qldpc",who:"qLDPC code researchers",need:"Your codes are not graph-like, so matching decoders do not apply, and you need to compare BP variants fairly.",how:["BP-OSD and Relay-BP with configurable OSD order and damping.","Built-in code families, including bivariate bicycle codes, as parity-check matrices.","Every correction is checked against its syndrome, so a decoder failure is never silent.","Sinter integration for threshold and logical-error-rate sweeps."],plan:"Free for non-commercial research; Lab for funded commercial work"},{id:"academic",who:"Universities and public labs",need:"You teach or research QEC and need a decoder library students can install in one command, without licence paperwork.",how:["Free under PolyForm Noncommercial for academic, educational and public research use, whatever the funding source.","Wheels for Python 3.9 to 3.14 on Linux, Windows and macOS: no compiler needed.","A free desktop Workbench for teaching without code.","40% off Lab when a paid plan is needed, for example to pass commercial rights to an industry partner."],plan:"Free, or Lab at 40% off"},{id:"claude",who:"Teams working with Claude",need:"You want an assistant that can build codes, decode syndromes and check results without sending data off the machine.",how:["The QECTOR Claude plugin exposes verified decoding tools to Claude Code and Claude Desktop.","The default server refuses network access and validates every message against JSON Schema.","Every result carries a status, so Claude never reports an unchecked result as verified."],plan:"Free plugin; the decoder licence follows your use"}];function l(){return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Use Cases · QECTOR",description:"How quantum hardware teams, qLDPC researchers, universities and Claude users use QECTOR Decoder v3: weighted circuit decoding, GPU batches, BP-OSD for qLDPC, free academic use and offline licensing."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Use Cases"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed",children:"What each kind of team gets from QECTOR, and which plan fits."}),e.jsx("nav",{"aria-label":"Use cases",className:"flex flex-wrap justify-center gap-2 mt-6",children:n.map(a=>e.jsx("a",{href:`#${a.id}`,className:"px-3 py-1.5 rounded-full border border-gridline text-sm text-secondary hover:text-cyan-300 hover:border-cyan-300/40",children:a.who},a.id))})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-8",children:[n.map(a=>e.jsxs("article",{id:a.id,className:"scroll-mt-28 bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6 md:p-8 grid md:grid-cols-[1fr_1.4fr] gap-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:a.who}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:a.need}),e.jsxs("p",{className:"text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Fits: "}),e.jsx("span",{className:"text-cyan-300 font-semibold",children:a.plan})]})]}),e.jsx("ul",{className:"space-y-3",children:a.how.map(s=>e.jsxs("li",{className:"flex gap-3 text-secondary text-sm leading-relaxed",children:[e.jsx("span",{className:"text-cyan-300 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsx("span",{children:s})]},s))})]},a.id)),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4 pt-4",children:[e.jsx(r,{to:"/getting-started",className:"btn-cyan",children:"Try it in 15 minutes"}),e.jsx(r,{to:"/pricing",className:"btn-outline",children:"Compare plans"})]})]})})]})}export{l as default}; diff --git a/assets/UseCases-NQxQ23sn.js b/assets/UseCases-NQxQ23sn.js deleted file mode 100644 index 1854b86e..00000000 --- a/assets/UseCases-NQxQ23sn.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{S as i,L as r}from"./index-c1PDYu0j.js";import"./vendor-ui-B8TlNU4J.js";import"./vendor-gsap-a3sj5zmn.js";const n=[{id:"hardware",who:"Quantum hardware teams",need:"You run memory experiments and need decoders that match your noise, scale to batch sizes and can run inside a locked-down lab network.",how:["Turn Stim circuits or measured detector error models into weighted decoders in one call.","Batch-decode on GPU (CUDA or OpenCL) with a Pro or Lab licence.","Licences verify offline, so decoding works on air-gapped control machines.","Compare matching, Union-Find and BP-OSD on the same detector graph before choosing one."],plan:"Pro or Lab"},{id:"qldpc",who:"qLDPC code researchers",need:"Your codes are not graph-like, so matching decoders do not apply, and you need to compare BP variants fairly.",how:["BP-OSD and Relay-BP with configurable OSD order and damping.","Built-in code families, including bivariate bicycle codes, as parity-check matrices.","Every correction is checked against its syndrome, so a decoder failure is never silent.","Sinter integration for threshold and logical-error-rate sweeps."],plan:"Free for non-commercial research; Lab for funded commercial work"},{id:"academic",who:"Universities and public labs",need:"You teach or research QEC and need a decoder library students can install in one command, without licence paperwork.",how:["Free under PolyForm Noncommercial for academic, educational and public research use, whatever the funding source.","Wheels for Python 3.9 to 3.14 on Linux, Windows and macOS: no compiler needed.","A free desktop Workbench for teaching without code.","40% off Lab when a paid plan is needed, for example to pass commercial rights to an industry partner."],plan:"Free, or Lab at 40% off"},{id:"claude",who:"Teams working with Claude",need:"You want an assistant that can build codes, decode syndromes and check results without sending data off the machine.",how:["The QECTOR Claude plugin exposes verified decoding tools to Claude Code and Claude Desktop.","The default server refuses network access and validates every message against JSON Schema.","Every result carries a status, so Claude never reports an unchecked result as verified."],plan:"Free plugin; the decoder licence follows your use"}];function l(){return e.jsxs(e.Fragment,{children:[e.jsx(i,{title:"Use Cases · QECTOR",description:"How quantum hardware teams, qLDPC researchers, universities and Claude users use QECTOR Decoder v3: weighted circuit decoding, GPU batches, BP-OSD for qLDPC, free academic use and offline licensing."}),e.jsxs("section",{className:"relative pt-32 pb-12 md:pt-36 text-center overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 via-surface/30 to-void"}),e.jsxs("div",{className:"relative z-10 section-padding max-w-3xl mx-auto",children:[e.jsx("h1",{className:"text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.08] mb-6",children:"Use Cases"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed",children:"What each kind of team gets from QECTOR, and which plan fits."}),e.jsx("nav",{"aria-label":"Use cases",className:"flex flex-wrap justify-center gap-2 mt-6",children:n.map(a=>e.jsx("a",{href:`#${a.id}`,className:"px-3 py-1.5 rounded-full border border-gridline text-sm text-secondary hover:text-cyan-300 hover:border-cyan-300/40",children:a.who},a.id))})]})]}),e.jsx("section",{className:"section-padding pb-24",children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-8",children:[n.map(a=>e.jsxs("article",{id:a.id,className:"scroll-mt-28 bg-[#0b1329]/40 border border-slate-800/80 rounded-2xl p-6 md:p-8 grid md:grid-cols-[1fr_1.4fr] gap-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold mb-3",children:a.who}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:a.need}),e.jsxs("p",{className:"text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Fits: "}),e.jsx("span",{className:"text-cyan-300 font-semibold",children:a.plan})]})]}),e.jsx("ul",{className:"space-y-3",children:a.how.map(s=>e.jsxs("li",{className:"flex gap-3 text-secondary text-sm leading-relaxed",children:[e.jsx("span",{className:"text-cyan-300 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsx("span",{children:s})]},s))})]},a.id)),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4 pt-4",children:[e.jsx(r,{to:"/getting-started",className:"btn-cyan",children:"Try it in 15 minutes"}),e.jsx(r,{to:"/pricing",className:"btn-outline",children:"Compare plans"})]})]})})]})}export{l as default}; diff --git a/assets/Workbench-8mJsB15A.js b/assets/Workbench-8mJsB15A.js deleted file mode 100644 index cbd66ebf..00000000 --- a/assets/Workbench-8mJsB15A.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-CpdATiEY.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-B-dk2nMz.js b/assets/Workbench-B-dk2nMz.js deleted file mode 100644 index 6f5718bb..00000000 --- a/assets/Workbench-B-dk2nMz.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-abfjMTlQ.js";import{N as g}from"./NeuralReveal-D-EQoOl2.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-1-HBloZv.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-BFjOjf90.js b/assets/Workbench-BFjOjf90.js deleted file mode 100644 index d40c00e9..00000000 --- a/assets/Workbench-BFjOjf90.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,L as i,A as u,Q as b,E as f}from"./index-DayaklK-.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";c.registerPlugin(y);const[a,r]=o;function C(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{C as default}; diff --git a/assets/Workbench-BidwJKAH.js b/assets/Workbench-BidwJKAH.js deleted file mode 100644 index 9f25abaa..00000000 --- a/assets/Workbench-BidwJKAH.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,L as i,A as u,Q as b,E as f}from"./index-CCmwjNGU.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";c.registerPlugin(y);const[a,r]=o;function C(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{C as default}; diff --git a/assets/Workbench-BlqsQe_K.js b/assets/Workbench-BlqsQe_K.js deleted file mode 100644 index 35da7530..00000000 --- a/assets/Workbench-BlqsQe_K.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,L as i,A as u,Q as b,E as f}from"./index-c1PDYu0j.js";import{N as g}from"./NeuralReveal-uYarhiMA.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases--9GgxpSb.js";import"./vendor-ui-B8TlNU4J.js";c.registerPlugin(y);const[a,r]=o;function C(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{C as default}; diff --git a/assets/Workbench-BnUYVoPz.js b/assets/Workbench-BnUYVoPz.js deleted file mode 100644 index df588293..00000000 --- a/assets/Workbench-BnUYVoPz.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,L as i,A as u,Q as b,E as f}from"./index-PdoH5kLF.js";import{N as g}from"./NeuralReveal-Bsl9IGCr.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-1-HBloZv.js";import"./vendor-ui-B8TlNU4J.js";c.registerPlugin(y);const[a,r]=o;function C(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{C as default}; diff --git a/assets/Workbench-Bo8C0YZA.js b/assets/Workbench-Bo8C0YZA.js deleted file mode 100644 index 404af0bb..00000000 --- a/assets/Workbench-Bo8C0YZA.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-DkYdPRY7.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-1-HBloZv.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-CXqTjHwC.js b/assets/Workbench-CXqTjHwC.js deleted file mode 100644 index f9912af7..00000000 --- a/assets/Workbench-CXqTjHwC.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-CqAA-ZXu.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-Ct-U8BKA.js b/assets/Workbench-Ct-U8BKA.js deleted file mode 100644 index bc6a80f4..00000000 --- a/assets/Workbench-Ct-U8BKA.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-Bh9DBCb3.js";import{N as g}from"./NeuralReveal-D-EQoOl2.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-1-HBloZv.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-Cwp5zsg1.js b/assets/Workbench-Cwp5zsg1.js deleted file mode 100644 index c3e595ad..00000000 --- a/assets/Workbench-Cwp5zsg1.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-DRAXObZB.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-D9a6HjUh.js b/assets/Workbench-D9a6HjUh.js deleted file mode 100644 index c2731776..00000000 --- a/assets/Workbench-D9a6HjUh.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-CxWP17m6.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-1-HBloZv.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-D9zAZUIr.js b/assets/Workbench-D9zAZUIr.js deleted file mode 100644 index fed8f926..00000000 --- a/assets/Workbench-D9zAZUIr.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-iVST85F-.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-DHXDBZcd.js b/assets/Workbench-DHXDBZcd.js deleted file mode 100644 index a734362f..00000000 --- a/assets/Workbench-DHXDBZcd.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,L as i,A as u,Q as b,E as f}from"./index-CcwlvHYJ.js";import{N as g}from"./NeuralReveal-Bsl9IGCr.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-1-HBloZv.js";import"./vendor-ui-B0ssGG4c.js";c.registerPlugin(y);const[a,r]=o;function C(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{C as default}; diff --git a/assets/Workbench-DVV9vcVI.js b/assets/Workbench-DVV9vcVI.js deleted file mode 100644 index 0962a739..00000000 --- a/assets/Workbench-DVV9vcVI.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-B9kEGiWi.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-Dhk9boMQ.js b/assets/Workbench-Dhk9boMQ.js deleted file mode 100644 index c7013839..00000000 --- a/assets/Workbench-Dhk9boMQ.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-WV1aysjN.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-DjamN-lA.js b/assets/Workbench-DjamN-lA.js deleted file mode 100644 index dc073aa0..00000000 --- a/assets/Workbench-DjamN-lA.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-BcbVjARk.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-DsnWT-94.js b/assets/Workbench-DsnWT-94.js deleted file mode 100644 index f2d0cc5b..00000000 --- a/assets/Workbench-DsnWT-94.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-BUYYSLdX.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-1-HBloZv.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-HYBHlCyI.js b/assets/Workbench-HYBHlCyI.js deleted file mode 100644 index 5c419125..00000000 --- a/assets/Workbench-HYBHlCyI.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-_BpMZhV3.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-KEHB2TYr.js b/assets/Workbench-KEHB2TYr.js deleted file mode 100644 index 50e51ef3..00000000 --- a/assets/Workbench-KEHB2TYr.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-BN-vOeL2.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/Workbench-e7-L36H7.js b/assets/Workbench-e7-L36H7.js deleted file mode 100644 index b3ef5908..00000000 --- a/assets/Workbench-e7-L36H7.js +++ /dev/null @@ -1 +0,0 @@ -import{r as x,j as e}from"./vendor-react-BiHfrq0e.js";import{S as p,A as u,Q as b,E as f}from"./index-DlmjLVYe.js";import{N as g}from"./NeuralReveal-BflyZYSb.js";import{g as c,S as y}from"./vendor-gsap-a3sj5zmn.js";import{W as o}from"./releases-DiQz_IDu.js";import{L as i}from"./vendor-PiU4YGcH.js";import"./vendor-ui-B0ssGG4c.js";import"./vendor-md-CLKxNZoa.js";c.registerPlugin(y);const[a,r]=o;function _(){const l=x.useRef([]);x.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const s=c.context(()=>{l.current.filter(Boolean).forEach(n=>{c.fromTo(n,{opacity:0,y:30},{opacity:1,y:0,duration:.6,ease:"power2.out",scrollTrigger:{trigger:n,start:"top 85%",once:!0}})})});return()=>{s.revert()}},[]);const t=(s,n)=>{s&&(l.current[n]=s)},m=[{kind:"union_find",type:"Graphlike",desc:"Fast approximate Union-Find decoding; higher LER than exact MWPM."},{kind:"fast_union_find",type:"Graphlike",desc:"Optimized Union-Find hot path; approximate."},{kind:"blossom",type:"Universal",desc:"Weight-optimal exact minimum-weight perfect matching (Edmonds' Blossom)."},{kind:"sparse_blossom",type:"Graphlike",desc:"Event-driven Sparse Blossom with radix-heap region growth (experimental)."},{kind:"bp_osd",type:"Universal / qLDPC",desc:"Belief propagation + ordered-statistics decoding for LDPC / qLDPC codes."},{kind:"auto",type:"Graphlike",desc:"Self-selecting AutoDecoder: picks the best available decoder for the code."},{kind:"hybrid",type:"Graphlike",desc:"Combines a fast heuristic pass with exact matching."},{kind:"lookup_table",type:"Small (<20 checks)",desc:"Precomputed syndrome-to-correction table with O(1) lookup."},{kind:"predecoded",type:"Graphlike",desc:"Fast pre-decoding pass that resolves easy/low-weight syndromes."},{kind:"auto_router",type:"Universal",desc:"Policy decoder: inspects the code and dispatches the best concrete decoder."},{kind:"hybrid_cascade",type:"Graphlike",desc:"Union-Find pre-filter escalating to Blossom/BP-OSD."},{kind:"gnn_belief_matching",type:"Graphlike",desc:"GNN-predicted per-qubit weights guide edge-weighted matching with fallback."},{kind:"belief_matching",type:"Universal",desc:"Sum-product BP posteriors reweight an exact Blossom matching."},{kind:"two_stage",type:"Graphlike",desc:"Decoupled X/Z sector decoders for CSS / colour codes."},{kind:"ambiguity_cluster",type:"Graphlike",desc:"Cluster-growth decoder for high noise or non-graphlike codes."},{kind:"colour_code",type:"Universal / qLDPC",desc:"BP-OSD hypergraph decoder over undecomposed detector error models."},{kind:"space_time",type:"Universal",desc:"Space-time decoder for multi-round decoding (experimental)."},{kind:"spacetime_mwpm",type:"Multi-round",desc:"Space-time MWPM for phenomenological & circuit-level decoding."},{kind:"soft_llr",type:"Soft-decision",desc:"Log-likelihood-ratio-weighted decoding."}],h=[{name:"repetition",params:"distance (int)",desc:"1D chain parity-check code."},{name:"ring",params:"distance (int)",desc:"Periodic 1D chain."},{name:"rotated_surface",params:"distance (int)",desc:"Standard rotated surface code."},{name:"unrotated_surface",params:"distance (int)",desc:"Square lattice surface code."},{name:"toric",params:"distance (int)",desc:"Toric code with periodic boundaries."},{name:"heavy_hex",params:"distance (int)",desc:"Heavy-hex lattice."},{name:"hypergraph_product",params:"distance (int)",desc:"CSS code from repetition seed."},{name:"bicycle",params:"circulant size (int)",desc:"qLDPC bicycle code."},{name:"bivariate_bicycle",params:"preset index (int)",desc:"Bivariate bicycle presets (qLDPC)."},{name:"color_code",params:"triangular size (int)",desc:"Triangular & 2D 4.8.8 colour codes."}],d=["Code Explorer","Decoder Lab","Benchmark","Batch & Streaming","Hardware","Diagnostics","Documentation","Lab & Personal Info","Console"];return e.jsxs(e.Fragment,{children:[e.jsx(p,{title:"QECTOR Workbench - Windows v1.0.7 and Linux v1.0.7",description:`QECTOR Workbench desktop GUI and MCP releases: ${a.label} ${a.version} (${a.arch}) with ${a.mcpTools} tools and a ${a.backendVersion} backend, ${r.label} ${r.version} with ${r.mcpTools} tools.`}),e.jsxs("div",{className:"bg-emerald-950/50 border-b border-emerald-500/30 py-2.5 text-center text-sm px-4",children:[e.jsx("span",{className:"text-emerald-400 font-semibold",children:"Free Desktop Application:"})," ",o.map((s,n)=>e.jsxs("span",{children:[e.jsxs("a",{href:s.releaseUrl,className:"underline hover:text-emerald-300 transition-colors",target:"_blank",rel:"noopener noreferrer",children:[s.label," ",s.version," · published ",s.releaseDate," · ",s.mcpTools," MCP tools"]}),nt(s,0),className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{value:"v1.0.7 ×2",label:"Live releases (Win / Linux)"},{value:`${a.mcpTools}`,label:`MCP tools per ${a.label} release`},{value:"19",label:"Named kinds (17 + 2 routing)"},{value:"10",label:"Quantum Code Families"}].map(s=>e.jsxs("div",{className:"card-surface text-center",children:[e.jsx("div",{className:"text-cyan-300 font-bold text-3xl mb-1",children:s.value}),e.jsx("div",{className:"text-secondary text-sm",children:s.label})]},s.label))}),e.jsxs("div",{ref:s=>t(s,1),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-2",children:"Inside the Workbench"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["Nine workspaces are documented for the live v1.0.7 (Windows/Linux) releases:"," ",d.map((s,n)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-primary font-medium",children:s}),ne.jsxs("div",{className:"bg-void border border-gridline rounded-xl p-5",children:[e.jsx("span",{className:"text-cyan-300 font-semibold text-sm block mb-2",children:s}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Explore this workspace with the release documentation and inspect results on your own machine. No hardware-specific run data is published here."})]},s))})]}),e.jsxs("div",{ref:s=>t(s,2),className:"card-surface space-y-5",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Downloads"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Windows x64 · ",a.version]}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Portable single executable and release ZIP. No installer required, no admin rights. The app makes no online update checks."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",a.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:a.artifact}),", then launch directly."]}),e.jsxs("li",{children:["Headless MCP server: ",e.jsx("code",{className:"text-cyan-300",children:"QectorWorkbench-Portable.exe --mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"%LOCALAPPDATA%\\QectorWorkbench"})]}),e.jsxs("li",{children:["Exe SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:a.artifactSha256})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:a.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Windows Portable (.exe)"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/download/v1.0.7/QectorWorkbench-v1.0.7-Windows-x64-Public.zip",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Full ZIP Archive"}),e.jsx("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3",children:[e.jsxs("h3",{className:"text-cyan-300 font-semibold text-base",children:["Linux x64 · ",r.version]}),e.jsxs("p",{className:"text-secondary text-xs leading-relaxed",children:["Published ",r.version," portable ELF executable and Debian (.deb) package with bundled qector-decoder-v3 ",r.backendVersion," backend and ",r.mcpTools,"-tool MCP server."]}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsxs("li",{children:["Published ",r.releaseDate," in the verified GitHub release."]}),e.jsxs("li",{children:["Download ",e.jsx("code",{className:"text-cyan-300",children:r.artifact})," or the Debian package."]}),e.jsxs("li",{children:["Headless MCP server: append ",e.jsx("code",{className:"text-cyan-300",children:"--mcp"})]}),e.jsxs("li",{children:["Runtime data: ",e.jsx("code",{className:"text-cyan-300",children:"~/.local/share/QectorWorkbench"})]}),e.jsxs("li",{children:["Portable SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:r.artifactSha256})]}),e.jsxs("li",{children:["Debian SHA-256: ",e.jsx("code",{className:"text-cyan-300 break-all",children:"5221dc9557319f2c55e6048ab30eb4a080d603abc9bab3d2b4cde01ef5b8aa45"})]})]}),e.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[e.jsx("a",{href:r.artifactUrl,target:"_blank",rel:"noopener noreferrer",className:"btn-cyan text-sm text-center",children:"Download Linux Portable"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-linux/releases/download/v1.0.7/qector-workbench_1.0.7_amd64.deb",target:"_blank",rel:"noopener noreferrer",className:"btn-outline text-xs text-center",children:"Download Debian Package (.deb)"}),e.jsx("a",{href:r.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-xs hover:underline text-center",children:"Release notes & signatures"})]})]}),e.jsxs("div",{className:"p-5 bg-void border border-gridline rounded-xl space-y-3 opacity-60",children:[e.jsx("h3",{className:"text-cyan-300 font-semibold text-base",children:"macOS arm64 - not ready yet"}),e.jsx("p",{className:"text-secondary text-xs leading-relaxed",children:"Apple silicon build requires a build on Apple hardware and is not included until that build is produced and signed."}),e.jsxs("ul",{className:"text-xs space-y-1 text-secondary list-disc pl-4",children:[e.jsx("li",{children:"Requires Apple hardware build - coming soon"}),e.jsx("li",{children:"No artifact yet - check back for macOS release"}),e.jsx("li",{children:"Windows and Linux v1.0.7 are live with 19 decoders"})]}),e.jsx("span",{className:"text-muted-foreground text-xs",children:"Not available yet"})]})]}),e.jsxs("div",{className:"p-4 bg-cyan-300/5 border border-cyan-300/20 rounded-xl text-xs text-secondary leading-relaxed",children:[e.jsx("strong",{className:"text-primary",children:"Verify your download:"})," SHA-256 checksums and GPG signature files (.asc) for every file are published in the release notes. Override the runtime data directory with ",e.jsx("code",{className:"text-cyan-300",children:"QECTOR_DATA_DIR"}),"."]})]}),e.jsxs("div",{ref:s=>t(s,3),className:"card-surface space-y-6",children:[e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Integrated Decoders"}),e.jsx("p",{className:"text-secondary text-sm mt-1",children:"All 19 named kinds (17 concrete configurations plus AutoDecoder and Auto Router) are exposed through the Workbench MCP server. No benchmark figures are published on the site: run the included harness to measure your own hardware."})]}),e.jsxs("span",{className:"text-xs px-3 py-1 bg-cyan-300/10 border border-cyan-300/20 text-cyan-300 rounded-full font-mono",children:["Windows & Linux backend qector_decoder_v3 ",a.backendVersion]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Each v1.0.7 release (Windows/Linux) declares ",e.jsx("strong",{className:"text-secondary",children:"19 named kinds: 17 concrete configurations plus 2 orchestration entries"})," against its bundled qector_decoder_v3 ",a.backendVersion," backend. Consult each release's included manuals for platform-specific coverage."]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-left text-sm border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gridline text-cyan-300 text-xs uppercase tracking-wider font-semibold",children:[e.jsx("th",{className:"py-3 px-3",children:"Decoder Kind"}),e.jsx("th",{className:"py-3 px-3",children:"Compatibility"}),e.jsx("th",{className:"py-3 px-3",children:"Description"})]})}),e.jsx("tbody",{className:"divide-y divide-gridline/50",children:m.map(s=>e.jsxs("tr",{className:"hover:bg-surface/30 transition-colors",children:[e.jsx("td",{className:"py-3 px-3 font-mono font-semibold text-primary",children:s.kind}),e.jsx("td",{className:"py-3 px-3 text-muted-foreground text-xs",children:s.type}),e.jsx("td",{className:"py-3 px-3 text-secondary text-xs",children:s.desc})]},s.kind))})]})})]}),e.jsxs("div",{ref:s=>t(s,4),children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:"10 Supported Code Families"}),e.jsxs("p",{className:"text-secondary text-sm mb-6",children:["The published releases cover ",e.jsx("strong",{className:"text-primary",children:"10 code families"}),", including qLDPC and colour codes."]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:h.map(s=>e.jsxs("div",{className:"p-4 bg-void border border-gridline rounded-xl space-y-2",children:[e.jsx("span",{className:"font-mono text-cyan-300 font-bold",children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:["Param: ",s.params]}),e.jsx("p",{className:"text-xs text-secondary",children:s.desc})]},s.name))})]}),e.jsxs("div",{ref:s=>t(s,5),children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-6",children:"Workbench Components"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[{name:"Desktop GUI",desc:"CustomTkinter desktop UI for Windows and Linux. Visual circuit builder, syndrome viewer, decoder performance dashboard, and a distance slider covering d3-d63 on supported families."},{name:"MCP Tools",desc:"Native Model Context Protocol server over stdio JSON-RPC 2.0, launched with --mcp and usable headlessly with no display. Connects AI agents directly to decoder execution and diagnostics."},{name:"Self-Contained",desc:"Bundles its own Python runtime, the scientific stack, and the qector_decoder_v3 1.0.0 wheel. No system Python or pip required; the app makes no online update checks."},{name:"Self / Auto-Debug Layer",desc:"Verifies H·c == s on every decode with a full attempt trace, and falls back across decoders automatically when a decoder fails to produce a faithful correction."},{name:"Hardware Dashboard",desc:"Auto-detects CUDA, OpenCL, and CPU backends, and reports OpenCL absence honestly: it names why a backend is unavailable rather than printing a bare N/A."},{name:"Lab & Personal Info",desc:"Deposit profile (author, ORCID, affiliation, DOI, funding, keywords) for generated reports, plus decoder license-key installation with a live tier readout."},{name:"Documentation Export",desc:"Export documentation and evidence in the formats supported by the selected release, with optional .zenodo.json and CITATION.cff deposit sidecars."},{name:"Bundled Manuals & EULA",desc:"Each release ships an API Reference, MCP Integration Guide, Quick Start Guide, a per-OS User Manual, a machine-readable LLM manual, and EULA.txt, with SHA-256 checksums for every file."}].map(s=>e.jsx(u,{title:s.name,desc:s.desc},s.name))})]}),e.jsxs("div",{ref:s=>t(s,6),className:"space-y-6",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold",children:"Decoder Sandbox"}),e.jsx("p",{className:"text-secondary text-sm",children:"Below is an interactive sandbox replicating the basic topological planar code matching module inside QECTOR Workbench. Click to inject errors and inspect Blossom correction paths in real time."}),e.jsx(b,{})]}),e.jsxs("div",{ref:s=>t(s,7),children:[e.jsx(f,{title:"Documentation & Reference",statement:"QECTOR Workbench documentation is published alongside each app release. The Windows v1.0.7 and Linux v1.0.7 builds ship per-OS manuals and SHA-256 checksums; use the release-specific manuals for your platform."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[e.jsxs("a",{href:a.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Manuals & EULA"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"GitHub Releases"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"API Reference, MCP guide, Quick Start, per-OS manual"})]}),e.jsxs(i,{to:"/evidence",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Validation & Evidence"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/evidence"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Validation reports and SHA-256 sealed artifact manifests"})]}),e.jsxs(i,{to:"/technical-reference",className:"p-4 bg-void border border-gridline rounded-xl hover:border-cyan-300/40 transition-colors",children:[e.jsx("div",{className:"text-xs text-muted-foreground uppercase mb-1",children:"Architecture Whitepaper"}),e.jsx("div",{className:"text-cyan-300 font-mono text-sm font-semibold",children:"qector.store/technical-reference"}),e.jsx("div",{className:"text-xs text-secondary mt-1",children:"Technical specification & design"})]})]})]}),e.jsx("div",{className:"text-center pt-4",children:e.jsx(i,{to:"/contact",className:"btn-cyan",children:"Contact for Technical Support"})})]})})]})}export{_ as default}; diff --git a/assets/blogData-OjR2ZtNr.js b/assets/blogData-OjR2ZtNr.js deleted file mode 100644 index 2df64bdd..00000000 --- a/assets/blogData-OjR2ZtNr.js +++ /dev/null @@ -1 +0,0 @@ -const e=[{id:"01QecFoundations",filename:"01_qec_foundations_syndrome_faithfulness.md",title:"Syndrome Faithfulness: The Decoder Contract",description:"The GF(2) invariant Hc=s, logical cosets, degeneracy, and graphlike eligibility explained from first principles.",category:"Foundations",date:"August 2026"},{id:"02BlossomMwpmExact",filename:"02_blossom_mwpm_exact.md",title:"Exact Blossom Decoding for Graphlike QEC",description:"How weighted MWPM, Edmonds' primal-dual view, path boundaries, and sparse candidate escalation fit together.",category:"Decoder Algorithms",date:"August 2026"},{id:"03SparseBlossomEventDriven",filename:"03_sparse_blossom_event_driven.md",title:"Sparse Blossom and Event-Driven Growth",description:"Region states, collision times, tight edges, radix heaps, and the tested scope of Sparse Blossom.",category:"Decoder Algorithms",date:"August 2026"},{id:"04FastUnionFind",filename:"04_fast_union_find_uf01.md",title:"UF-01: Parity, Peeling, and Graphlike Decoding",description:"Cluster parity, spanning-forest peeling, weighted growth, zero-allocation structure, and domain boundaries.",category:"Decoder Algorithms",date:"August 2026"},{id:"05BpOsdQldpc",filename:"05_bp_osd_qldpc.md",title:"BP-OSD for qLDPC Hypergraphs",description:"Log-domain belief propagation, ordered statistics, residual GF(2) solving, and faithful non-graphlike decoding.",category:"qLDPC and AI",date:"August 2026"},{id:"06AmbiguityGnnNeural",filename:"06_ambiguity_gnn_neural.md",title:"Ambiguity Clustering and Learned Predecoders",description:"Freeze confident qubits, solve ambiguous components, and add learned priors without moving the correctness proof.",category:"qLDPC and AI",date:"August 2026"},{id:"07SpaceTimeDecoder",filename:"07_space_time_decoder.md",title:"Space-Time Decoding with Noisy Measurements",description:"Detector differencing, temporal and spatial weights, measurement glitches, and streaming scope.",category:"Multi-Round",date:"August 2026"},{id:"08AutoDecoderCascade",filename:"08_autodecoder_cascade.md",title:"Routing, Cascades, and Two-Stage CSS Decoding",description:"Structural backend eligibility, fallback verification, hybrid acceptance, and CSS sector feedforward.",category:"Orchestration",date:"August 2026"},{id:"09GpuAcceleration",filename:"09_gpu_acceleration.md",title:"GPU Batch Decoding and Tested Bit Identity",description:"Per-shot GPU state isolation, deterministic Union-Find, scoped CPU/GPU identity, and deployment gates.",category:"Systems",date:"August 2026"},{id:"10BenchmarksArchitecture",filename:"10_benchmarks_architecture.md",title:"Evidence-First QEC Architecture and Benchmarks",description:"The v1.0.0 backend map, logical scoring, Wilson intervals, metadata, release gates, and claim boundaries.",category:"Evidence",date:"August 2026"},{id:"11SteaneWorkedDecode",filename:"11_steane_worked_decode.md",title:"A Hand-Worked Steane Decode",description:"Compute a Steane syndrome by hand and see why stabilizer cosets matter more than raw correction equality.",category:"Foundations",date:"August 2026"},{id:"12RotatedSurfaceD3",filename:"12_rotated_surface_d3.md",title:"Rotated Surface Code d=3",description:"Nine data qubits, boundaries, graphlike eligibility, logical strings, and a complete structural audit.",category:"Foundations",date:"August 2026"},{id:"13DemPipeline",filename:"13_dem_pipeline.md",title:"Detector Error Models from Faults to Graphs",description:"Parse DEMs, classify hyperedges, collapse parallel mechanisms, set weights, and preserve observables.",category:"Noise Models",date:"August 2026"},{id:"14WeightedDecoding",filename:"14_weighted_decoding.md",title:"Weighted Decoding and Likelihood Priors",description:"Why log((1-p)/p) belongs in the graph and how matching, Union-Find, and space-time paths use weights.",category:"Noise Models",date:"August 2026"},{id:"15LogicalErrorRates",filename:"15_logical_error_rates.md",title:"Logical Error Rates Without the Wrong Metric",description:"Score observables, compute Wilson intervals, keep noise models comparable, and report reproducible LERs.",category:"Evidence",date:"August 2026"},{id:"16DecoderSelection",filename:"16_decoder_selection.md",title:"Choosing a Decoder From the Matrix",description:"A practical decision guide for graphlike, qLDPC, space-time, streaming, CSS, and batch workloads.",category:"Orchestration",date:"August 2026"},{id:"17ReproducibleBenchmarks",filename:"17_reproducible_benchmarks.md",title:"Reproducible QEC Benchmarks",description:"Separate correctness from performance and make every benchmark claim traceable to an artifact and hash.",category:"Evidence",date:"August 2026"},{id:"18RustPyo3Architecture",filename:"18_rust_pyo3_architecture.md",title:"Rust, PyO3, and QEC Memory Discipline",description:"FFI buffers, selective repacking, GIL release, Rayon worker state, and memory metrics at the Python boundary.",category:"Systems",date:"August 2026"},{id:"19ReleaseLicensing",filename:"19_release_licensing.md",title:"Shipping a QEC Decoder Responsibly",description:"API stability, wheels, offline licensing, release gates, and the difference between local and network deployment.",category:"Deployment",date:"August 2026"},{id:"20EcosystemIntegration",filename:"20_ecosystem_integration.md",title:"Stim, Sinter, PyMatching, and Qiskit Integration",description:"Connect QECTOR to common quantum software workflows while preserving detector, observable, and noise contracts.",category:"Ecosystem",date:"August 2026"}];export{e as b}; diff --git a/assets/faqData-B9kvzm8o.js b/assets/faqData-B9kvzm8o.js deleted file mode 100644 index 770fe108..00000000 --- a/assets/faqData-B9kvzm8o.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as w}from"./index-c1PDYu0j.js";function j({name:u,price:c,period:d="",desc:m,features:o,excluded:p,featured:r=!1,showRibbon:v=!0,featuredLabel:h="Most Popular",accent:n="cyan",ctaLabel:s="Contact Sales",ctaHref:a="/contact",centered:i=!1,className:f=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",b=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",q=n==="gold"?"btn-gold":"btn-cyan",x=/^https?:\/\//i.test(a),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${r?q:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${r?g:""} ${f}`,children:[r&&v&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${b}`,children:h}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),x?e.jsx("a",{href:a,className:l,rel:"noopener",children:s}):e.jsx(w,{to:a,className:l,children:s})]})}const C=[{q:"Does licensing work on air-gapped machines?",a:"Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.'},{q:"Can I try it before committing?",a:"Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab."},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"What does a licence cover?",a:"Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 1.x release of qector-decoder-v3; a new major version such as 2.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],L=[{q:"La licence fonctionne-t-elle sur des machines hors réseau ?",a:"Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.'},{q:"Puis-je l’essayer avant de m’engager ?",a:"Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo."},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Que couvre une licence ?",a:"L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 1.x de qector-decoder-v3; une nouvelle version majeure comme 2.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}];export{C as F,j as P,L as a}; diff --git a/assets/faqData-CCPvMSkf.js b/assets/faqData-CCPvMSkf.js deleted file mode 100644 index ccc90a4a..00000000 --- a/assets/faqData-CCPvMSkf.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as E}from"./vendor-PiU4YGcH.js";function j({name:u,price:c,period:d="",desc:m,features:s,excluded:p,featured:a=!1,showRibbon:h=!0,featuredLabel:v="Most Popular",accent:n="cyan",ctaLabel:o="Contact Sales",ctaHref:r="/contact",centered:i=!1,className:g=""}){const f=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",x=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",b=n==="gold"?"btn-gold":"btn-cyan",q=/^https?:\/\//i.test(r),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${a?b:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${a?f:""} ${g}`,children:[a&&h&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 text-xs font-bold uppercase tracking-wider rounded-full ${x}`,children:v}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),s&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[s.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),q?e.jsx("a",{href:r,className:l,rel:"noopener",children:o}):e.jsx(E,{to:r,className:l,children:o})]})}const T=[{q:"How is the license delivered, and does the package change once I have a token?",a:"Automatically, by email, within minutes of payment: if nothing arrives within 10 minutes, check your spam folder, then email admin@qector.store with your Stripe receipt. Everyone installs the same wheel via pip install qector-decoder-v3==1.0.0; there is no separate commercial build. The v1.0.0 tier manager unlocks tier-scoped features from that same token: distance caps of 7, 19, or 63 depending on tier, and GPU batch paths on Pro and Enterprise tiers. Set both QECTOR_LICENSE and QECTOR_LICENSE_KEY to the token so the import notice and v1.0.0 tier manager use the same credential. Set QECTOR_SILENT=1 if you also want quiet CI logs. The token verifies offline against a public key embedded in the package, so it works air-gapped and in CI with no license server and no phone-home. There is no hard stop: decoding runs either way. The token plus your Stripe receipt are what procurement and audit need."},{q:"What exactly happens when the 60-day evaluation expires?",a:"The $499 evaluation is a flat, non-recurring 60-day license: it is not a subscription and it does not auto-renew. The token carries a 60-day expiry. After that date your commercial evaluation rights end and the licensing notice returns on import, but nothing is disabled, no code stops working, and your data and results remain yours. To continue commercial use you move to an annual tier. The $499 is 100% creditable toward any annual license purchased within 90 days of your evaluation start: buy Solo/Indie at $1,299/yr within that window and you pay $800, not $1,299. Email admin@qector.store with your Stripe invoice number and we invoice the difference."},{q:"How many seats does each tier cover, and what counts as production?",a:"The $499 evaluation covers unlimited internal seats for 60 days, but it is scoped to evaluation and pilot work: benchmarking, integration testing, threshold studies, and architecture assessment. It does not grant production rights. Annual tiers grant production rights for internal use and are seat-counted: Solo/Indie $1,299/yr (1 named user), Startup/Growth $4,499/yr (up to 10), Professional $11,500/yr (up to 25), Enterprise & OEM custom pricing (unlimited seats and logical qubits, OEM bundling rights, dedicated support engineer, custom builds). A Solo/Indie perpetual license is also available at $3,299 one-time for v3.x (all v3.x patch/minor updates included; major version upgrades such as v4.0 are a new license)."},{q:"Is a hosted or customer-facing API covered by an annual tier?",a:"No. Annual tiers cover internal use: your own team, on your own infrastructure. The moment QECTOR sits behind an API, product, or service that anyone outside your organization can reach, that deployment is SaaS or redistribution and it requires an Enterprise/OEM agreement, regardless of which annual tier you hold. Internal hosted endpoints used only by your own employees are fine under an annual tier. If you are unsure which side of the line you are on, email admin@qector.store and describe the deployment."},{q:"Can I redistribute QECTOR inside my product?",a:"No: standard tiers cover internal use only. Enterprise OEM licenses cover redistribution, SaaS hosting, and hardware bundling. Email admin@qector.store for a custom agreement."},{q:"Do I need a license for non-commercial research?",a:"No. Non-commercial, academic, and personal use is free under the PolyForm Noncommercial License 1.0.0. Only commercial deployment requires a paid tier. The licensing notice on import is informational: it does not restrict non-commercial use, and QECTOR_SILENT=1 suppresses it."},{q:"What currency are prices in, and is tax included?",a:"All prices are in US dollars (USD). Listed prices are exclusive of tax. Stripe calculates and adds any applicable sales tax, GST/HST, or VAT at checkout based on your billing location: Canadian, UK, and EU buyers should expect tax on top of the listed price. If your organization is tax-exempt or has a valid VAT/GST registration number, enter it at checkout, or email admin@qector.store with your Stripe invoice number for a corrected invoice."},{q:"What is your refund policy?",a:"License tokens are delivered immediately on payment, so all sales are final and commercial licenses are non-refundable. That is precisely why the $499 60-day evaluation exists: it is the low-cost, fully creditable way to validate QECTOR against your own workloads before committing to an annual tier. If a token never arrives or fails to verify, that is a delivery fault rather than a refund matter: email admin@qector.store and we will reissue it. This policy does not limit non-waivable statutory rights where they apply. Full terms are on the refund policy page."},{q:"Can we get a signed corporate EULA or tax form?",a:"Yes. If procurement requires a signed PDF agreement, vendor profile, W-8BEN or equivalent tax form, or a security questionnaire, email your request with your Stripe invoice number to admin@qector.store."}],I=[{q:"Comment la licence est-elle livrée, et le paquet change-t-il une fois que j’ai un jeton ?",a:"Automatiquement, par courriel, dans les minutes qui suivent le paiement : si rien n’arrive dans les 10 minutes, vérifiez votre courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe. Tout le monde installe la même wheel via pip install qector-decoder-v3==1.0.0; il n’existe pas de build commercial séparé. Le gestionnaire de palier v1.0.0 déverrouille les fonctionnalités propres à chaque palier à partir de ce même jeton : plafonds de distance de 7, 19 ou 63 selon le palier, et chemins GPU batch sur les paliers Pro et Entreprise. Définissez QECTOR_LICENSE et QECTOR_LICENSE_KEY au jeton pour que l’avis d’import et le gestionnaire de palier v1.0.0 utilisent le même jeton. Définissez QECTOR_SILENT=1 si vous voulez aussi des journaux CI silencieux. Le jeton se vérifie hors ligne contre une clé publique embarquée dans le paquet : il fonctionne hors réseau et en CI, sans serveur de licence ni appel maison. Il n’y a pas de blocage : le décodage fonctionne de toute façon. Le jeton et votre reçu Stripe sont ce dont les achats et l’audit ont besoin."},{q:"Que se passe-t-il exactement à l’expiration de l’évaluation de 60 jours ?",a:"L’évaluation à 499 $ est une licence forfaitaire de 60 jours, non récurrente : ce n’est pas un abonnement et elle ne se renouvelle pas automatiquement. Le jeton porte une échéance de 60 jours. Après cette date, vos droits d’évaluation commerciale prennent fin et l’avis de licence réapparaît à l’import, mais rien n’est désactivé, aucun code ne cesse de fonctionner, et vos données et résultats restent à vous. Pour poursuivre un usage commercial, vous passez à un palier annuel. Les 499 $ sont crédités à 100 % vers toute licence annuelle achetée dans les 90 jours suivant le début de votre évaluation : achetez Solo/Indie à 1 299 $/an dans ce délai et vous payez 800 $, pas 1 299 $. Écrivez à admin@qector.store avec votre numéro de facture Stripe et nous facturons la différence."},{q:"Combien de sièges chaque palier couvre-t-il, et qu’est-ce qui compte comme production ?",a:"L’évaluation à 499 $ couvre des sièges internes illimités pendant 60 jours, mais elle est limitée à l’évaluation et aux pilotes : tests de référence (benchmarks), tests d’intégration, études de seuil et évaluation d’architecture. Elle n’accorde pas de droits de production. Les paliers annuels accordent des droits de production pour usage interne et sont comptés par sièges : Solo/Indie 1 299 $/an (1 utilisateur nommé), Startup/Growth 4 499 $/an (jusqu’à 10), Professionnel 11 500 $/an (jusqu’à 25), Entreprise & OEM sur mesure (sièges et qubits logiques illimités, droits de regroupement OEM, ingénieur de support dédié, versions personnalisées). Une licence perpétuelle Solo/Indie est aussi disponible à 3 299 $ paiement unique pour v3.x (toutes les mises à jour mineures et correctives v3.x incluses; les montées de version majeure comme v4.0 sont une nouvelle licence)."},{q:"Une API hébergée ou orientée client est-elle couverte par un palier annuel ?",a:"Non. Les paliers annuels couvrent l’usage interne : votre propre équipe, sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible à quiconque hors de votre organisation, c’est du SaaS ou de la redistribution et cela exige un contrat Entreprise/OEM, quel que soit le palier annuel détenu. Les points d’accès hébergés internes utilisés uniquement par vos propres employés sont couverts par un palier annuel. En cas de doute, écrivez à admin@qector.store et décrivez le déploiement."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Non : les paliers standards couvrent l’usage interne seulement. Les licences Entreprise OEM couvrent la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store pour un contrat sur mesure."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage non commercial, académique et personnel est gratuit sous la licence PolyForm Noncommercial 1.0.0. Seul le déploiement commercial exige un palier payant. L’avis de licence à l’import est informatif : il ne restreint pas l’usage non commercial, et QECTOR_SILENT=1 le désactive."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Tous les prix sont en dollars américains (USD). Les prix affichés sont hors taxes. Stripe calcule et ajoute toute taxe de vente, TPS/TVH ou TVA applicable au paiement selon votre adresse de facturation : les acheteurs canadiens, britanniques et européens doivent s’attendre à une taxe en sus du prix affiché. Si votre organisation est exonérée ou possède un numéro d’enregistrement TPS/TVA valide, saisissez-le au paiement, ou écrivez à admin@qector.store avec votre numéro de facture Stripe pour une facture corrigée."},{q:"Quelle est votre politique de remboursement ?",a:"Les jetons de licence sont livrés immédiatement au paiement : toutes les ventes sont donc finales et les licences commerciales ne sont pas remboursables. C’est précisément pourquoi l’évaluation à 499 $ pour 60 jours existe : c’est le moyen économique et entièrement créditable de valider QECTOR sur vos propres charges de travail avant de vous engager sur un palier annuel. Si un jeton n’arrive jamais ou ne se vérifie pas, c’est un défaut de livraison plutôt qu’un sujet de remboursement : écrivez à admin@qector.store et nous le réémettrons. Cette politique ne limite pas les droits statutaires non renonçables là où ils s’appliquent. Les conditions complètes sont sur la page de politique de remboursement."},{q:"Pouvons-nous obtenir un contrat EULA signé ou un formulaire fiscal ?",a:"Oui. Si vos achats exigent un contrat PDF signé, un profil de fournisseur, un W-8BEN ou formulaire fiscal équivalent ou un questionnaire de sécurité, envoyez votre demande avec votre numéro de facture Stripe à admin@qector.store."}];export{T as F,j as P,I as a}; diff --git a/assets/faqData-CHsSn8s2.js b/assets/faqData-CHsSn8s2.js deleted file mode 100644 index 5c7cf701..00000000 --- a/assets/faqData-CHsSn8s2.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as w}from"./vendor-PiU4YGcH.js";function j({name:u,price:c,period:d="",desc:m,features:s,excluded:p,featured:r=!1,showRibbon:h=!0,featuredLabel:v="Most Popular",accent:n="cyan",ctaLabel:o="Contact Sales",ctaHref:a="/contact",centered:i=!1,className:f=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",b=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",x=n==="gold"?"btn-gold":"btn-cyan",q=/^https?:\/\//i.test(a),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${r?x:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${r?g:""} ${f}`,children:[r&&h&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${b}`,children:v}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),s&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[s.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),q?e.jsx("a",{href:a,className:l,rel:"noopener",children:o}):e.jsx(w,{to:a,className:l,children:o})]})}const C=[{q:"Does licensing work on air-gapped machines?",a:"Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.'},{q:"Can I try it before committing?",a:"Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab."},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"What does a licence cover?",a:"Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 3.x release; a major version such as 4.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],L=[{q:"La licence fonctionne-t-elle sur des machines hors réseau ?",a:"Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.'},{q:"Puis-je l’essayer avant de m’engager ?",a:"Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo."},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Que couvre une licence ?",a:"L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 3.x; une version majeure comme 4.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}];export{C as F,j as P,L as a}; diff --git a/assets/faqData-CYz7igrM.js b/assets/faqData-CYz7igrM.js deleted file mode 100644 index bb020dc7..00000000 --- a/assets/faqData-CYz7igrM.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as E}from"./vendor-PiU4YGcH.js";function j({name:u,price:c,period:d="",desc:m,features:s,excluded:p,featured:a=!1,showRibbon:v=!0,featuredLabel:h="Most Popular",accent:n="cyan",ctaLabel:o="Contact Sales",ctaHref:i="/contact",centered:r=!1,className:g=""}){const f=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",x=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",b=n==="gold"?"btn-gold":"btn-cyan",q=/^https?:\/\//i.test(i),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${a?b:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${r?"text-center":""} ${a?f:""} ${g}`,children:[a&&v&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 text-xs font-bold uppercase tracking-wider rounded-full ${x}`,children:h}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),s&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[s.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${r?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${r?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),q?e.jsx("a",{href:i,className:l,rel:"noopener",children:o}):e.jsx(E,{to:i,className:l,children:o})]})}const T=[{q:"How is the license delivered, and does the package change once I have a token?",a:"Automatically, by email, within minutes of payment: if nothing arrives within 10 minutes, check your spam folder, then email admin@qector.store with your Stripe receipt. Everyone installs the same wheel via pip install qector-decoder-v3==1.0.0; there is no separate commercial build and no feature gating. Set both QECTOR_LICENSE and QECTOR_LICENSE_KEY to the token so the import notice and v1.0.0 tier manager use the same credential. Set QECTOR_SILENT=1 if you also want quiet CI logs. The token verifies offline against a public key embedded in the package, so it works air-gapped and in CI with no license server and no phone-home. There is no hard stop: decoding runs either way. The token plus your Stripe receipt are what procurement and audit need."},{q:"What exactly happens when the 60-day evaluation expires?",a:"The $499 evaluation is a flat, non-recurring 60-day license: it is not a subscription and it does not auto-renew. The token carries a 60-day expiry. After that date your commercial evaluation rights end and the licensing notice returns on import, but nothing is disabled, no code stops working, and your data and results remain yours. To continue commercial use you move to an annual tier. The $499 is 100% creditable toward any annual license purchased within 90 days of your evaluation start: buy Solo/Indie at $1,299/yr within that window and you pay $800, not $1,299. Email admin@qector.store with your Stripe invoice number and we invoice the difference."},{q:"How many seats does each tier cover, and what counts as production?",a:"The $499 evaluation covers unlimited internal seats for 60 days, but it is scoped to evaluation and pilot work: benchmarking, integration testing, threshold studies, and architecture assessment. It does not grant production rights. Annual tiers grant production rights for internal use and are seat-counted: Solo/Indie $1,299/yr (1 named user), Startup/Growth $4,499/yr (up to 10), Professional $11,500/yr (up to 25), Enterprise & OEM custom pricing (unlimited seats and logical qubits, OEM bundling rights, dedicated support engineer, custom builds). A Solo/Indie perpetual license is also available at $3,299 one-time for v3.x (all v3.x patch/minor updates included; major version upgrades such as v4.0 are a new license)."},{q:"Is a hosted or customer-facing API covered by an annual tier?",a:"No. Annual tiers cover internal use: your own team, on your own infrastructure. The moment QECTOR sits behind an API, product, or service that anyone outside your organization can reach, that deployment is SaaS or redistribution and it requires an Enterprise/OEM agreement, regardless of which annual tier you hold. Internal hosted endpoints used only by your own employees are fine under an annual tier. If you are unsure which side of the line you are on, email admin@qector.store and describe the deployment."},{q:"Can I redistribute QECTOR inside my product?",a:"No: standard tiers cover internal use only. Enterprise OEM licenses cover redistribution, SaaS hosting, and hardware bundling. Email admin@qector.store for a custom agreement."},{q:"Do I need a license for non-commercial research?",a:"No. Non-commercial, academic, and personal use is free under the PolyForm Noncommercial License 1.0.0. Only commercial deployment requires a paid tier. The licensing notice on import is informational: it does not restrict non-commercial use, and QECTOR_SILENT=1 suppresses it."},{q:"What currency are prices in, and is tax included?",a:"All prices are in US dollars (USD). Listed prices are exclusive of tax. Stripe calculates and adds any applicable sales tax, GST/HST, or VAT at checkout based on your billing location: Canadian, UK, and EU buyers should expect tax on top of the listed price. If your organization is tax-exempt or has a valid VAT/GST registration number, enter it at checkout, or email admin@qector.store with your Stripe invoice number for a corrected invoice."},{q:"What is your refund policy?",a:"License tokens are delivered immediately on payment, so all sales are final and commercial licenses are non-refundable. That is precisely why the $499 60-day evaluation exists: it is the low-cost, fully creditable way to validate QECTOR against your own workloads before committing to an annual tier. If a token never arrives or fails to verify, that is a delivery fault rather than a refund matter: email admin@qector.store and we will reissue it. This policy does not limit non-waivable statutory rights where they apply. Full terms are on the refund policy page."},{q:"Can we get a signed corporate EULA or tax form?",a:"Yes. If procurement requires a signed PDF agreement, vendor profile, W-8BEN or equivalent tax form, or a security questionnaire, email your request with your Stripe invoice number to admin@qector.store."}],I=[{q:"Comment la licence est-elle livrée, et le paquet change-t-il une fois que j’ai un jeton ?",a:"Automatiquement, par courriel, dans les minutes qui suivent le paiement : si rien n’arrive dans les 10 minutes, vérifiez votre courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe. Tout le monde installe la même wheel via pip install qector-decoder-v3==1.0.0; il n’existe pas de build commercial séparé et aucune fonctionnalité n’est verrouillée. Définissez QECTOR_LICENSE et QECTOR_LICENSE_KEY au jeton pour que l’avis d’import et le gestionnaire de palier v1.0.0 utilisent le même jeton. Définissez QECTOR_SILENT=1 si vous voulez aussi des journaux CI silencieux. Le jeton se vérifie hors ligne contre une clé publique embarquée dans le paquet : il fonctionne hors réseau et en CI, sans serveur de licence ni appel maison. Il n’y a pas de blocage : le décodage fonctionne de toute façon. Le jeton et votre reçu Stripe sont ce dont les achats et l’audit ont besoin."},{q:"Que se passe-t-il exactement à l’expiration de l’évaluation de 60 jours ?",a:"L’évaluation à 499 $ est une licence forfaitaire de 60 jours, non récurrente : ce n’est pas un abonnement et elle ne se renouvelle pas automatiquement. Le jeton porte une échéance de 60 jours. Après cette date, vos droits d’évaluation commerciale prennent fin et l’avis de licence réapparaît à l’import, mais rien n’est désactivé, aucun code ne cesse de fonctionner, et vos données et résultats restent à vous. Pour poursuivre un usage commercial, vous passez à un palier annuel. Les 499 $ sont crédités à 100 % vers toute licence annuelle achetée dans les 90 jours suivant le début de votre évaluation : achetez Solo/Indie à 1 299 $/an dans ce délai et vous payez 800 $, pas 1 299 $. Écrivez à admin@qector.store avec votre numéro de facture Stripe et nous facturons la différence."},{q:"Combien de sièges chaque palier couvre-t-il, et qu’est-ce qui compte comme production ?",a:"L’évaluation à 499 $ couvre des sièges internes illimités pendant 60 jours, mais elle est limitée à l’évaluation et aux pilotes : tests de référence (benchmarks), tests d’intégration, études de seuil et évaluation d’architecture. Elle n’accorde pas de droits de production. Les paliers annuels accordent des droits de production pour usage interne et sont comptés par sièges : Solo/Indie 1 299 $/an (1 utilisateur nommé), Startup/Growth 4 499 $/an (jusqu’à 10), Professionnel 11 500 $/an (jusqu’à 25), Entreprise & OEM sur mesure (sièges et qubits logiques illimités, droits de regroupement OEM, ingénieur de support dédié, versions personnalisées). Une licence perpétuelle Solo/Indie est aussi disponible à 3 299 $ paiement unique pour v3.x (toutes les mises à jour mineures et correctives v3.x incluses; les montées de version majeure comme v4.0 sont une nouvelle licence)."},{q:"Une API hébergée ou orientée client est-elle couverte par un palier annuel ?",a:"Non. Les paliers annuels couvrent l’usage interne : votre propre équipe, sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible à quiconque hors de votre organisation, c’est du SaaS ou de la redistribution et cela exige un contrat Entreprise/OEM, quel que soit le palier annuel détenu. Les points d’accès hébergés internes utilisés uniquement par vos propres employés sont couverts par un palier annuel. En cas de doute, écrivez à admin@qector.store et décrivez le déploiement."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Non : les paliers standards couvrent l’usage interne seulement. Les licences Entreprise OEM couvrent la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store pour un contrat sur mesure."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage non commercial, académique et personnel est gratuit sous la licence PolyForm Noncommercial 1.0.0. Seul le déploiement commercial exige un palier payant. L’avis de licence à l’import est informatif : il ne restreint pas l’usage non commercial, et QECTOR_SILENT=1 le désactive."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Tous les prix sont en dollars américains (USD). Les prix affichés sont hors taxes. Stripe calcule et ajoute toute taxe de vente, TPS/TVH ou TVA applicable au paiement selon votre adresse de facturation : les acheteurs canadiens, britanniques et européens doivent s’attendre à une taxe en sus du prix affiché. Si votre organisation est exonérée ou possède un numéro d’enregistrement TPS/TVA valide, saisissez-le au paiement, ou écrivez à admin@qector.store avec votre numéro de facture Stripe pour une facture corrigée."},{q:"Quelle est votre politique de remboursement ?",a:"Les jetons de licence sont livrés immédiatement au paiement : toutes les ventes sont donc finales et les licences commerciales ne sont pas remboursables. C’est précisément pourquoi l’évaluation à 499 $ pour 60 jours existe : c’est le moyen économique et entièrement créditable de valider QECTOR sur vos propres charges de travail avant de vous engager sur un palier annuel. Si un jeton n’arrive jamais ou ne se vérifie pas, c’est un défaut de livraison plutôt qu’un sujet de remboursement : écrivez à admin@qector.store et nous le réémettrons. Cette politique ne limite pas les droits statutaires non renonçables là où ils s’appliquent. Les conditions complètes sont sur la page de politique de remboursement."},{q:"Pouvons-nous obtenir un contrat EULA signé ou un formulaire fiscal ?",a:"Oui. Si vos achats exigent un contrat PDF signé, un profil de fournisseur, un W-8BEN ou formulaire fiscal équivalent ou un questionnaire de sécurité, envoyez votre demande avec votre numéro de facture Stripe à admin@qector.store."}];export{T as F,j as P,I as a}; diff --git a/assets/faqData-CvhYJZQK.js b/assets/faqData-CvhYJZQK.js deleted file mode 100644 index 90141901..00000000 --- a/assets/faqData-CvhYJZQK.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as w}from"./index-DayaklK-.js";function j({name:u,price:c,period:d="",desc:m,features:o,excluded:p,featured:r=!1,showRibbon:v=!0,featuredLabel:h="Most Popular",accent:n="cyan",ctaLabel:s="Contact Sales",ctaHref:a="/contact",centered:i=!1,className:f=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",b=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",q=n==="gold"?"btn-gold":"btn-cyan",x=/^https?:\/\//i.test(a),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${r?q:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${r?g:""} ${f}`,children:[r&&v&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${b}`,children:h}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),x?e.jsx("a",{href:a,className:l,rel:"noopener",children:s}):e.jsx(w,{to:a,className:l,children:s})]})}const C=[{q:"Does licensing work on air-gapped machines?",a:"Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.'},{q:"Can I try it before committing?",a:"Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab."},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"What does a licence cover?",a:"Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 1.x release of qector-decoder-v3; a new major version such as 2.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],L=[{q:"La licence fonctionne-t-elle sur des machines hors réseau ?",a:"Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.'},{q:"Puis-je l’essayer avant de m’engager ?",a:"Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo."},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Que couvre une licence ?",a:"L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 1.x de qector-decoder-v3; une nouvelle version majeure comme 2.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}];export{C as F,j as P,L as a}; diff --git a/assets/faqData-D7ZwBN6k.js b/assets/faqData-D7ZwBN6k.js deleted file mode 100644 index 905856b1..00000000 --- a/assets/faqData-D7ZwBN6k.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as w}from"./vendor-PiU4YGcH.js";function j({name:u,price:c,period:d="",desc:m,features:o,excluded:p,featured:r=!1,showRibbon:v=!0,featuredLabel:h="Most Popular",accent:n="cyan",ctaLabel:s="Contact Sales",ctaHref:a="/contact",centered:i=!1,className:f=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",b=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",q=n==="gold"?"btn-gold":"btn-cyan",x=/^https?:\/\//i.test(a),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${r?q:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${r?g:""} ${f}`,children:[r&&v&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${b}`,children:h}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),x?e.jsx("a",{href:a,className:l,rel:"noopener",children:s}):e.jsx(w,{to:a,className:l,children:s})]})}const C=[{q:"Does licensing work on air-gapped machines?",a:"Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.'},{q:"Can I try it before committing?",a:"Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab."},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"What does a licence cover?",a:"Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 1.x release of qector-decoder-v3; a new major version such as 2.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],L=[{q:"La licence fonctionne-t-elle sur des machines hors réseau ?",a:"Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.'},{q:"Puis-je l’essayer avant de m’engager ?",a:"Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo."},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Que couvre une licence ?",a:"L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 1.x de qector-decoder-v3; une nouvelle version majeure comme 2.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}];export{C as F,j as P,L as a}; diff --git a/assets/faqData-DUePwhCA.js b/assets/faqData-DUePwhCA.js deleted file mode 100644 index 96cf86f8..00000000 --- a/assets/faqData-DUePwhCA.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as w}from"./index-CcwlvHYJ.js";function j({name:u,price:c,period:d="",desc:m,features:o,excluded:p,featured:r=!1,showRibbon:v=!0,featuredLabel:h="Most Popular",accent:n="cyan",ctaLabel:s="Contact Sales",ctaHref:a="/contact",centered:i=!1,className:f=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",b=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",q=n==="gold"?"btn-gold":"btn-cyan",x=/^https?:\/\//i.test(a),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${r?q:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${r?g:""} ${f}`,children:[r&&v&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${b}`,children:h}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),x?e.jsx("a",{href:a,className:l,rel:"noopener",children:s}):e.jsx(w,{to:a,className:l,children:s})]})}const C=[{q:"Does licensing work on air-gapped machines?",a:"Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.'},{q:"Can I try it before committing?",a:"Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab."},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"What does a licence cover?",a:"Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 1.x release of qector-decoder-v3; a new major version such as 2.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],L=[{q:"La licence fonctionne-t-elle sur des machines hors réseau ?",a:"Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.'},{q:"Puis-je l’essayer avant de m’engager ?",a:"Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo."},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Que couvre une licence ?",a:"L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 1.x de qector-decoder-v3; une nouvelle version majeure comme 2.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}];export{C as F,j as P,L as a}; diff --git a/assets/faqData-De1eOWz0.js b/assets/faqData-De1eOWz0.js deleted file mode 100644 index 01e78508..00000000 --- a/assets/faqData-De1eOWz0.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as w}from"./index-CCmwjNGU.js";function j({name:u,price:c,period:d="",desc:m,features:o,excluded:p,featured:r=!1,showRibbon:v=!0,featuredLabel:h="Most Popular",accent:n="cyan",ctaLabel:s="Contact Sales",ctaHref:a="/contact",centered:i=!1,className:f=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",b=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",q=n==="gold"?"btn-gold":"btn-cyan",x=/^https?:\/\//i.test(a),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${r?q:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${r?g:""} ${f}`,children:[r&&v&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${b}`,children:h}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),x?e.jsx("a",{href:a,className:l,rel:"noopener",children:s}):e.jsx(w,{to:a,className:l,children:s})]})}const C=[{q:"Does licensing work on air-gapped machines?",a:"Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.'},{q:"Can I try it before committing?",a:"Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab."},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"What does a licence cover?",a:"Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 1.x release of qector-decoder-v3; a new major version such as 2.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],L=[{q:"La licence fonctionne-t-elle sur des machines hors réseau ?",a:"Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.'},{q:"Puis-je l’essayer avant de m’engager ?",a:"Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo."},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Que couvre une licence ?",a:"L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 1.x de qector-decoder-v3; une nouvelle version majeure comme 2.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}];export{C as F,j as P,L as a}; diff --git a/assets/faqData-IO8c0Ufu.js b/assets/faqData-IO8c0Ufu.js deleted file mode 100644 index c6b24850..00000000 --- a/assets/faqData-IO8c0Ufu.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as w}from"./index-PdoH5kLF.js";function j({name:u,price:c,period:d="",desc:m,features:o,excluded:p,featured:r=!1,showRibbon:v=!0,featuredLabel:h="Most Popular",accent:n="cyan",ctaLabel:s="Contact Sales",ctaHref:a="/contact",centered:i=!1,className:f=""}){const g=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",b=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",q=n==="gold"?"btn-gold":"btn-cyan",x=/^https?:\/\//i.test(a),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${r?q:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${r?g:""} ${f}`,children:[r&&v&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 whitespace-nowrap text-xs font-bold uppercase tracking-wider rounded-full ${b}`,children:h}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),o&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[o.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),x?e.jsx("a",{href:a,className:l,rel:"noopener",children:s}):e.jsx(w,{to:a,className:l,children:s})]})}const C=[{q:"Does licensing work on air-gapped machines?",a:"Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems."},{q:"How is the licence delivered, and what does the token unlock?",a:'By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.'},{q:"Can I try it before committing?",a:"Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab."},{q:"Do plans renew automatically, and how do I cancel?",a:"Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew."},{q:"What is your refund policy?",a:"14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights."},{q:"What does a licence cover?",a:"Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 1.x release of qector-decoder-v3; a new major version such as 2.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production."},{q:"Is a hosted or customer-facing API covered?",a:"No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store."},{q:"Can I redistribute QECTOR inside my product?",a:"Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store."},{q:"Do I need a licence for non-commercial research?",a:"No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail."},{q:"What currency are prices in, and is tax included?",a:"Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout."},{q:"Can we get a signed agreement, tax form or security questionnaire?",a:"Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts."}],L=[{q:"La licence fonctionne-t-elle sur des machines hors réseau ?",a:"Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau."},{q:"Comment la licence est-elle livrée, et que déverrouille le jeton ?",a:'Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.'},{q:"Puis-je l’essayer avant de m’engager ?",a:"Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo."},{q:"Les forfaits se renouvellent-ils automatiquement, et comment annuler ?",a:"Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais."},{q:"Quelle est votre politique de remboursement ?",a:"Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer."},{q:"Que couvre une licence ?",a:"L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 1.x de qector-decoder-v3; une nouvelle version majeure comme 2.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production."},{q:"Une API hébergée ou offerte aux clients est-elle couverte ?",a:"Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement."},{q:"Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?",a:"Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés."}];export{C as F,j as P,L as a}; diff --git a/assets/faqData-gdKKGDcm.js b/assets/faqData-gdKKGDcm.js deleted file mode 100644 index d0af78f4..00000000 --- a/assets/faqData-gdKKGDcm.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-BiHfrq0e.js";import{L as E}from"./vendor-PiU4YGcH.js";function j({name:u,price:c,period:d="",desc:m,features:s,excluded:p,featured:a=!1,showRibbon:h=!0,featuredLabel:v="Most Popular",accent:n="cyan",ctaLabel:o="Contact Sales",ctaHref:r="/contact",centered:i=!1,className:g=""}){const f=n==="gold"?"border-gold-400/30 neon-border-gold":"border-cyan-300/30 neon-border-cyan",y=n==="gold"?"text-gold-400":"text-cyan-300",x=n==="gold"?"bg-gold-400 text-void":"bg-cyan-300 text-void",b=n==="gold"?"btn-gold":"btn-cyan",q=/^https?:\/\//i.test(r),l=`block w-full text-center py-2.5 rounded-lg font-medium text-sm transition-all ${a?b:"btn-outline"}`;return e.jsxs("div",{className:`card-surface flex flex-col relative ${i?"text-center":""} ${a?f:""} ${g}`,children:[a&&h&&e.jsx("span",{className:`absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 text-xs font-bold uppercase tracking-wider rounded-full ${x}`,children:v}),e.jsx("div",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-2",children:u}),e.jsxs("div",{className:"text-primary font-bold text-3xl mb-1",children:[c,e.jsx("span",{className:"text-muted-foreground text-sm font-normal",children:d})]}),e.jsx("p",{className:"text-secondary text-sm mb-4",children:m}),s&&e.jsxs("ul",{className:"space-y-2 flex-1 mb-6",children:[s.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-secondary ${i?"text-left":""}`,children:[e.jsx("span",{className:`${y} mt-0.5`,"aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Included: "}),t]})]},t)),p?.map(t=>e.jsxs("li",{className:`flex items-start gap-2 text-sm text-muted-foreground/70 ${i?"text-left":""}`,children:[e.jsx("span",{className:"text-muted-foreground/60 mt-0.5","aria-hidden":"true",children:"✓"}),e.jsxs("span",{children:[e.jsx("span",{className:"sr-only",children:"Not included: "}),t]})]},t))]}),q?e.jsx("a",{href:r,className:l,rel:"noopener",children:o}):e.jsx(E,{to:r,className:l,children:o})]})}const T=[{q:"How is the license delivered, and does the package change once I have a token?",a:"Automatically, by email, within minutes of payment: if nothing arrives within 10 minutes, check your spam folder, then email admin@qector.store with your Stripe receipt. Everyone installs the same wheel via pip install qector-decoder-v3==1.0.0; there is no separate commercial build. The v1.0.0 tier manager unlocks tier-scoped features from that same token: distance caps of 7, 19, or 63 depending on tier, and GPU batch paths on Enterprise tiers. Set both QECTOR_LICENSE and QECTOR_LICENSE_KEY to the token so the import notice and v1.0.0 tier manager use the same credential. Set QECTOR_SILENT=1 if you also want quiet CI logs. The token verifies offline against a public key embedded in the package, so it works air-gapped and in CI with no license server and no phone-home. There is no hard stop: decoding runs either way. The token plus your Stripe receipt are what procurement and audit need."},{q:"What exactly happens when the 60-day evaluation expires?",a:"The $499 evaluation is a flat, non-recurring 60-day license: it is not a subscription and it does not auto-renew. The token carries a 60-day expiry. After that date your commercial evaluation rights end and the licensing notice returns on import, but nothing is disabled, no code stops working, and your data and results remain yours. To continue commercial use you move to an annual tier. The $499 is 100% creditable toward any annual license purchased within 90 days of your evaluation start: buy Solo/Indie at $1,299/yr within that window and you pay $800, not $1,299. Email admin@qector.store with your Stripe invoice number and we invoice the difference."},{q:"How many seats does each tier cover, and what counts as production?",a:"The $499 evaluation covers unlimited internal seats for 60 days, but it is scoped to evaluation and pilot work: benchmarking, integration testing, threshold studies, and architecture assessment. It does not grant production rights. Annual tiers grant production rights for internal use and are seat-counted: Solo/Indie $1,299/yr (1 named user), Startup/Growth $4,499/yr (up to 10), Professional $11,500/yr (up to 25), Enterprise & OEM custom pricing (unlimited seats and logical qubits, OEM bundling rights, dedicated support engineer, custom builds). A Solo/Indie perpetual license is also available at $3,299 one-time for v3.x (all v3.x patch/minor updates included; major version upgrades such as v4.0 are a new license)."},{q:"Is a hosted or customer-facing API covered by an annual tier?",a:"No. Annual tiers cover internal use: your own team, on your own infrastructure. The moment QECTOR sits behind an API, product, or service that anyone outside your organization can reach, that deployment is SaaS or redistribution and it requires an Enterprise/OEM agreement, regardless of which annual tier you hold. Internal hosted endpoints used only by your own employees are fine under an annual tier. If you are unsure which side of the line you are on, email admin@qector.store and describe the deployment."},{q:"Can I redistribute QECTOR inside my product?",a:"No: standard tiers cover internal use only. Enterprise OEM licenses cover redistribution, SaaS hosting, and hardware bundling. Email admin@qector.store for a custom agreement."},{q:"Do I need a license for non-commercial research?",a:"No. Non-commercial, academic, and personal use is free under the PolyForm Noncommercial License 1.0.0. Only commercial deployment requires a paid tier. The licensing notice on import is informational: it does not restrict non-commercial use, and QECTOR_SILENT=1 suppresses it."},{q:"What currency are prices in, and is tax included?",a:"All prices are in US dollars (USD). Listed prices are exclusive of tax. Stripe calculates and adds any applicable sales tax, GST/HST, or VAT at checkout based on your billing location: Canadian, UK, and EU buyers should expect tax on top of the listed price. If your organization is tax-exempt or has a valid VAT/GST registration number, enter it at checkout, or email admin@qector.store with your Stripe invoice number for a corrected invoice."},{q:"What is your refund policy?",a:"License tokens are delivered immediately on payment, so all sales are final and commercial licenses are non-refundable. That is precisely why the $499 60-day evaluation exists: it is the low-cost, fully creditable way to validate QECTOR against your own workloads before committing to an annual tier. If a token never arrives or fails to verify, that is a delivery fault rather than a refund matter: email admin@qector.store and we will reissue it. This policy does not limit non-waivable statutory rights where they apply. Full terms are on the refund policy page."},{q:"Can we get a signed corporate EULA or tax form?",a:"Yes. If procurement requires a signed PDF agreement, vendor profile, W-8BEN or equivalent tax form, or a security questionnaire, email your request with your Stripe invoice number to admin@qector.store."}],I=[{q:"Comment la licence est-elle livrée, et le paquet change-t-il une fois que j’ai un jeton ?",a:"Automatiquement, par courriel, dans les minutes qui suivent le paiement : si rien n’arrive dans les 10 minutes, vérifiez votre courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe. Tout le monde installe la même wheel via pip install qector-decoder-v3==1.0.0; il n’existe pas de build commercial séparé. Le gestionnaire de palier v1.0.0 déverrouille les fonctionnalités propres à chaque palier à partir de ce même jeton : plafonds de distance de 7, 19 ou 63 selon le palier, et chemins GPU batch sur les paliers Entreprise. Définissez QECTOR_LICENSE et QECTOR_LICENSE_KEY au jeton pour que l’avis d’import et le gestionnaire de palier v1.0.0 utilisent le même jeton. Définissez QECTOR_SILENT=1 si vous voulez aussi des journaux CI silencieux. Le jeton se vérifie hors ligne contre une clé publique embarquée dans le paquet : il fonctionne hors réseau et en CI, sans serveur de licence ni appel maison. Il n’y a pas de blocage : le décodage fonctionne de toute façon. Le jeton et votre reçu Stripe sont ce dont les achats et l’audit ont besoin."},{q:"Que se passe-t-il exactement à l’expiration de l’évaluation de 60 jours ?",a:"L’évaluation à 499 $ est une licence forfaitaire de 60 jours, non récurrente : ce n’est pas un abonnement et elle ne se renouvelle pas automatiquement. Le jeton porte une échéance de 60 jours. Après cette date, vos droits d’évaluation commerciale prennent fin et l’avis de licence réapparaît à l’import, mais rien n’est désactivé, aucun code ne cesse de fonctionner, et vos données et résultats restent à vous. Pour poursuivre un usage commercial, vous passez à un palier annuel. Les 499 $ sont crédités à 100 % vers toute licence annuelle achetée dans les 90 jours suivant le début de votre évaluation : achetez Solo/Indie à 1 299 $/an dans ce délai et vous payez 800 $, pas 1 299 $. Écrivez à admin@qector.store avec votre numéro de facture Stripe et nous facturons la différence."},{q:"Combien de sièges chaque palier couvre-t-il, et qu’est-ce qui compte comme production ?",a:"L’évaluation à 499 $ couvre des sièges internes illimités pendant 60 jours, mais elle est limitée à l’évaluation et aux pilotes : tests de référence (benchmarks), tests d’intégration, études de seuil et évaluation d’architecture. Elle n’accorde pas de droits de production. Les paliers annuels accordent des droits de production pour usage interne et sont comptés par sièges : Solo/Indie 1 299 $/an (1 utilisateur nommé), Startup/Growth 4 499 $/an (jusqu’à 10), Professionnel 11 500 $/an (jusqu’à 25), Entreprise & OEM sur mesure (sièges et qubits logiques illimités, droits de regroupement OEM, ingénieur de support dédié, versions personnalisées). Une licence perpétuelle Solo/Indie est aussi disponible à 3 299 $ paiement unique pour v3.x (toutes les mises à jour mineures et correctives v3.x incluses; les montées de version majeure comme v4.0 sont une nouvelle licence)."},{q:"Une API hébergée ou orientée client est-elle couverte par un palier annuel ?",a:"Non. Les paliers annuels couvrent l’usage interne : votre propre équipe, sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible à quiconque hors de votre organisation, c’est du SaaS ou de la redistribution et cela exige un contrat Entreprise/OEM, quel que soit le palier annuel détenu. Les points d’accès hébergés internes utilisés uniquement par vos propres employés sont couverts par un palier annuel. En cas de doute, écrivez à admin@qector.store et décrivez le déploiement."},{q:"Puis-je redistribuer QECTOR dans mon produit ?",a:"Non : les paliers standards couvrent l’usage interne seulement. Les licences Entreprise OEM couvrent la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store pour un contrat sur mesure."},{q:"Ai-je besoin d’une licence pour la recherche non commerciale ?",a:"Non. L’usage non commercial, académique et personnel est gratuit sous la licence PolyForm Noncommercial 1.0.0. Seul le déploiement commercial exige un palier payant. L’avis de licence à l’import est informatif : il ne restreint pas l’usage non commercial, et QECTOR_SILENT=1 le désactive."},{q:"En quelle devise sont les prix, et la taxe est-elle incluse ?",a:"Tous les prix sont en dollars américains (USD). Les prix affichés sont hors taxes. Stripe calcule et ajoute toute taxe de vente, TPS/TVH ou TVA applicable au paiement selon votre adresse de facturation : les acheteurs canadiens, britanniques et européens doivent s’attendre à une taxe en sus du prix affiché. Si votre organisation est exonérée ou possède un numéro d’enregistrement TPS/TVA valide, saisissez-le au paiement, ou écrivez à admin@qector.store avec votre numéro de facture Stripe pour une facture corrigée."},{q:"Quelle est votre politique de remboursement ?",a:"Les jetons de licence sont livrés immédiatement au paiement : toutes les ventes sont donc finales et les licences commerciales ne sont pas remboursables. C’est précisément pourquoi l’évaluation à 499 $ pour 60 jours existe : c’est le moyen économique et entièrement créditable de valider QECTOR sur vos propres charges de travail avant de vous engager sur un palier annuel. Si un jeton n’arrive jamais ou ne se vérifie pas, c’est un défaut de livraison plutôt qu’un sujet de remboursement : écrivez à admin@qector.store et nous le réémettrons. Cette politique ne limite pas les droits statutaires non renonçables là où ils s’appliquent. Les conditions complètes sont sur la page de politique de remboursement."},{q:"Pouvons-nous obtenir un contrat EULA signé ou un formulaire fiscal ?",a:"Oui. Si vos achats exigent un contrat PDF signé, un profil de fournisseur, un W-8BEN ou formulaire fiscal équivalent ou un questionnaire de sécurité, envoyez votre demande avec votre numéro de facture Stripe à admin@qector.store."}];export{T as F,j as P,I as a}; diff --git a/assets/g.png b/assets/g.png deleted file mode 100644 index 5266f345..00000000 Binary files a/assets/g.png and /dev/null differ diff --git a/assets/index-1mmfOXJK.css b/assets/index-1mmfOXJK.css deleted file mode 100644 index df138397..00000000 --- a/assets/index-1mmfOXJK.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px}:root{--background: 222 47% 4%;--foreground: 210 40% 93%;--card: 222 47% 7%;--card-foreground: 210 40% 93%;--popover: 222 47% 8%;--popover-foreground: 210 40% 93%;--primary: 187 92% 69%;--primary-foreground: 222 47% 4%;--secondary: 215 25% 70%;--secondary-foreground: 210 40% 93%;--muted: 215 25% 20%;--muted-foreground: 215 16% 72%;--accent: 187 92% 69%;--accent-foreground: 222 47% 4%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 215 25% 18%;--input: 215 25% 18%;--ring: 187 92% 69%;--radius: 1rem}html{scroll-behavior:smooth}.js-enabled #prerendered{display:none!important}body{overflow-x:hidden;--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));font-family:Inter,system-ui,-apple-system,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(circle at 10% 20%,rgba(103,232,249,.04) 0%,transparent 40%),radial-gradient(circle at 90% 80%,rgba(251,191,36,.02) 0%,transparent 40%),linear-gradient(to bottom,#020617,#0b1329);background-attachment:fixed}h1,h2,h3,h4,h5,h6{font-family:Inter,system-ui,-apple-system,sans-serif;letter-spacing:-.025em;color:hsl(var(--primary))}@media(min-width:768px){h1,h2,h3,h4,h5,h6{text-wrap:balance}}code{font-family:JetBrains Mono,Fira Code,monospace}::-moz-selection{background:#67e8f94d;color:#e2e8f0}::selection{background:#67e8f94d;color:#e2e8f0}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-cyan{--tw-prose-links: #0891b2;--tw-prose-invert-links: #06b6d4}.prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.btn-cyan{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #67e8f9 var(--tw-gradient-to-position);padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-cyan:hover{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #a5f3fc var(--tw-gradient-to-position);--tw-shadow: 0 0 24px rgba(103,232,249,.45);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-cyan:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-gold{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;border-color:#fbbf2499;background-color:#fbbf240d;padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-gold:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1));background-color:#fbbf241a;--tw-shadow: 0 0 24px rgba(251,191,36,.25);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-gold:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1));padding:.75rem 1.5rem;color:hsl(var(--secondary));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-outline:hover{border-color:#67e8f966;background-color:#ffffff0d;color:hsl(var(--primary))}.btn-outline:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.card-surface{border-radius:1rem;border-width:1px;border-color:#1e293bcc;background-color:#0b132966;padding:1.5rem;--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;animation-duration:.5s}.card-surface:hover{border-color:#67e8f94d;--tw-shadow: 0 0 30px rgba(103,232,249,.12);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-surface:not(.revealed),.prose:not(.revealed){opacity:0;transform:translateY(30px)}.card-surface.revealed,.prose.revealed{opacity:1;transform:translateY(0);transition:opacity .7s ease-out,transform .7s ease-out}.section-padding{padding-left:1.5rem;padding-right:1.5rem}@media(min-width:640px){.section-padding{padding-left:2rem;padding-right:2rem}}@media(min-width:1024px){.section-padding{padding-left:4rem;padding-right:4rem}}@media(min-width:1280px){.section-padding{padding-left:6rem;padding-right:6rem}}.eyebrow-pill{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#67e8f933;background-color:#67e8f91a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.eyebrow-pill-gold{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#fbbf2433;background-color:#fbbf241a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.link-accent{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1));text-underline-offset:4px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.link-accent:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1));text-decoration-line:underline}.section-feature{padding-top:5rem;padding-bottom:5rem}@media(min-width:768px){.section-feature{padding-top:7rem;padding-bottom:7rem}}.section-band{padding-top:4rem;padding-bottom:4rem}@media(min-width:768px){.section-band{padding-top:5rem;padding-bottom:5rem}}.section-thin{padding-top:2.5rem;padding-bottom:2.5rem}@media(min-width:768px){.section-thin{padding-top:3rem;padding-bottom:3rem}}.glass-nav{border-width:1px;border-color:#ffffff1a;background-color:#0b1329bf;--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.neon-border-cyan{box-shadow:0 0 24px #67e8f91f,inset 0 0 24px #67e8f90a}.neon-border-gold{box-shadow:0 0 24px #fbbf241f,inset 0 0 24px #fbbf240a}.quantum-grid-bg{background-size:30px 30px;background-image:linear-gradient(to right,rgba(255,255,255,.015) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.015) 1px,transparent 1px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-left-\[40px\]{left:-40px}.-right-12{right:-3rem}.-top-12{top:-3rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[-1px\]{left:-1px}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-1\/3{top:33.333333%}.top-1\/4{top:25%}.top-24{top:6rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.order-last{order:9999}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2 / span 2}.row-start-1{grid-row-start:1}.\!m-0{margin:0!important}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-10{width:2.5rem;height:2.5rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1\.15rem\]{height:1.15rem}.h-\[36rem\]{height:36rem}.h-\[500px\]{height:500px}.h-\[600px\]{height:600px}.h-\[800px\]{height:800px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:0px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[calc\(100dvh-110px\)\]{max-height:calc(100dvh - 110px)}.min-h-0{min-height:0px}.min-h-16{min-height:4rem}.min-h-4{min-height:1rem}.min-h-\[44px\]{min-height:44px}.min-h-\[500px\]{min-height:500px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[1000px\]{width:1000px}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[36rem\]{width:36rem}.w-\[600px\]{width:600px}.w-\[800px\]{width:800px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-5{min-width:1.25rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[120px\]{min-width:120px}.min-w-\[12rem\]{min-width:12rem}.min-w-\[140px\]{min-width:140px}.min-w-\[44px\]{min-width:44px}.min-w-\[560px\]{min-width:560px}.min-w-\[640px\]{min-width:640px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[11rem\]{max-width:11rem}.max-w-\[440px\]{max-width:440px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/3{--tw-translate-x: -33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[140\%\]{--tw-translate-y: -140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/3{--tw-translate-x: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/3{--tw-translate-y: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-45{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.scroll-py-1{scroll-padding-top:.25rem;scroll-padding-bottom:.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-8{gap:2rem}.gap-\[--spacing\(var\(--gap\)\)\]{gap:var(--spacing(var(--gap)))}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-8{row-gap:2rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-14>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gridline>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 41 59 / var(--tw-divide-opacity, 1))}.divide-gridline\/50>:not([hidden])~:not([hidden]){border-color:#1e293b80}.divide-slate-800\/60>:not([hidden])~:not([hidden]){border-color:#1e293b99}.self-start{align-self:flex-start}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:calc(var(--radius) - 6px)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-blue-400\/30{border-color:#60a5fa4d}.border-border{border-color:hsl(var(--border))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-300\/10{border-color:#67e8f91a}.border-cyan-300\/20{border-color:#67e8f933}.border-cyan-300\/25{border-color:#67e8f940}.border-cyan-300\/30{border-color:#67e8f94d}.border-cyan-300\/35{border-color:#67e8f959}.border-cyan-300\/40{border-color:#67e8f966}.border-cyan-800\/40{border-color:#155e7566}.border-cyan-800\/50{border-color:#155e7580}.border-cyan-800\/60{border-color:#155e7599}.border-cyan-900\/40{border-color:#164e6366}.border-cyan-900\/50{border-color:#164e6380}.border-cyan-900\/60{border-color:#164e6399}.border-emerald-500\/30{border-color:#10b9814d}.border-gold-400\/20{border-color:#fbbf2433}.border-gold-400\/25{border-color:#fbbf2440}.border-gold-400\/30{border-color:#fbbf244d}.border-gold-400\/60{border-color:#fbbf2499}.border-green-400\/20{border-color:#4ade8033}.border-gridline{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-gridline\/30{border-color:#1e293b4d}.border-gridline\/40{border-color:#1e293b66}.border-gridline\/50{border-color:#1e293b80}.border-gridline\/60{border-color:#1e293b99}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-purple-400\/20{border-color:#c084fc33}.border-red-400\/20{border-color:#f8717133}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/60{border-color:#1e293b99}.border-slate-800\/80{border-color:#1e293bcc}.border-slate-800\/90{border-color:#1e293be6}.border-transparent{border-color:transparent}.border-void{--tw-border-opacity: 1;border-color:rgb(2 6 23 / var(--tw-border-opacity, 1))}.border-white\/5{border-color:#ffffff0d}.border-l-transparent{border-left-color:transparent}.border-t-cyan-300{--tw-border-opacity: 1;border-top-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#050b14\]{--tw-bg-opacity: 1;background-color:rgb(5 11 20 / var(--tw-bg-opacity, 1))}.bg-\[\#0b1329\]\/40{background-color:#0b132966}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-black\/50{background-color:#00000080}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-300\/10{background-color:#67e8f91a}.bg-cyan-300\/5{background-color:#67e8f90d}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.bg-cyan-400\/10{background-color:#22d3ee1a}.bg-cyan-400\/5{background-color:#22d3ee0d}.bg-cyan-900\/10{background-color:#164e631a}.bg-cyan-950\/50{background-color:#08334480}.bg-cyan-950\/60{background-color:#08334499}.bg-cyan-950\/80{background-color:#083344cc}.bg-destructive{--tw-bg-opacity: 1;background-color:hsl(var(--destructive) / var(--tw-bg-opacity, 1))}.bg-emerald-950\/50{background-color:#022c2280}.bg-foreground{background-color:hsl(var(--foreground))}.bg-gold-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-gold-400\/10{background-color:#fbbf241a}.bg-gold-400\/5{background-color:#fbbf240d}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-400\/10{background-color:#4ade801a}.bg-green-400\/5{background-color:#4ade800d}.bg-green-500\/80{background-color:#22c55ecc}.bg-gridline{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-purple-400\/10{background-color:#c084fc1a}.bg-red-400\/5{background-color:#f871710d}.bg-red-500\/80{background-color:#ef4444cc}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/20{background-color:#1e293b33}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/90{background-color:#020617e6}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-surface\/10{background-color:#0f172a1a}.bg-surface\/20{background-color:#0f172a33}.bg-surface\/30{background-color:#0f172a4d}.bg-surface\/50{background-color:#0f172a80}.bg-surface\/70{background-color:#0f172ab3}.bg-surface\/90{background-color:#0f172ae6}.bg-transparent{background-color:transparent}.bg-void{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-void\/30{background-color:#0206174d}.bg-void\/50{background-color:#02061780}.bg-void\/70{background-color:#020617b3}.bg-void\/80{background-color:#020617cc}.bg-void\/90{background-color:#020617e6}.bg-void\/95{background-color:#020617f2}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/80{background-color:#eab308cc}.bg-\[radial-gradient\(ellipse_at_top\,_var\(--tw-gradient-stops\)\)\]{background-image:radial-gradient(ellipse at top,var(--tw-gradient-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-cyan-300{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/10{--tw-gradient-from: rgb(103 232 249 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/5{--tw-gradient-from: rgb(103 232 249 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/80{--tw-gradient-from: rgb(103 232 249 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400\/5{--tw-gradient-from: rgb(34 211 238 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500\/\[0\.04\]{--tw-gradient-from: rgb(6 182 212 / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-900\/20{--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-950\/40{--tw-gradient-from: rgb(8 51 68 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(8 51 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gold-400\/5{--tw-gradient-from: rgb(251 191 36 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-400\/5{--tw-gradient-from: rgb(74 222 128 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from: #020617 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-surface\/50{--tw-gradient-from: rgb(15 23 42 / .5) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-void\/60{--tw-gradient-from: rgb(2 6 23 / .6) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-gold-400\/30{--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(251 191 36 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #0f172a var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/30{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/40{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .4) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/60{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .6) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-transparent{--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #020617 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void\/25{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(2 6 23 / .25) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-cyan-300\/10{--tw-gradient-to: rgb(103 232 249 / .1) var(--tw-gradient-to-position)}.to-cyan-400{--tw-gradient-to: #22d3ee var(--tw-gradient-to-position)}.to-cyan-950\/20{--tw-gradient-to: rgb(8 51 68 / .2) var(--tw-gradient-to-position)}.to-slate-400{--tw-gradient-to: #94a3b8 var(--tw-gradient-to-position)}.to-slate-950{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-void{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-white\/70{--tw-gradient-to: rgb(255 255 255 / .7) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.fill-foreground{fill:hsl(var(--foreground))}.fill-primary{fill:hsl(var(--primary))}.object-cover{-o-object-fit:cover;object-fit:cover}.\!p-5{padding:1.25rem!important}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-32{padding-top:8rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.font-sans{font-family:Inter,system-ui,-apple-system,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-8xl{font-size:6rem;line-height:1}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.05\]{line-height:1.05}.leading-\[1\.1\]{line-height:1.1}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-background{color:hsl(var(--background))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-300\/20{color:#67e8f933}.text-cyan-300\/80{color:#67e8f9cc}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-destructive{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-gold-200\/60{color:#fde68a99}.text-gold-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-gold-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-gold-400\/60{color:#fbbf2499}.text-gold-400\/80{color:#fbbf24cc}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-secondary{color:hsl(var(--secondary))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-secondary\/80{color:hsl(var(--secondary) / .8)}.text-secondary\/90{color:hsl(var(--secondary) / .9)}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-void{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.placeholder-cyan-300\/60::-moz-placeholder{color:#67e8f999}.placeholder-cyan-300\/60::placeholder{color:#67e8f999}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(103\,232\,249\,0\.35\)\]{--tw-shadow: 0 0 12px rgba(103,232,249,.35);--tw-shadow-colored: 0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.5\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.5);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.8\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.8);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-deep{--tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, .5);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-cyan-300\/20{--tw-shadow-color: rgb(103 232 249 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-400\/20{--tw-shadow-color: rgb(34 211 238 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur: blur(100px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[120px\]{--tw-blur: blur(120px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-bottom-8{--tw-enter-translate-y: 2rem}.duration-100{animation-duration:.1s}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.duration-700{animation-duration:.7s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.animate-pulse-dot{animation:pulse-dot 2s ease-in-out infinite}.\[--cell-size\:--spacing\(8\)\]{--cell-size: var(--spacing(8))}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}@keyframes gradient-xy{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#020617}::-webkit-scrollbar-thumb{background:#1e293b;border-radius:5px;border:2px solid #020617}::-webkit-scrollbar-thumb:hover{background:#334155}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.card-surface,.prose{opacity:1;transform:none;transition:none}}@media(forced-colors:active){.text-gradient-cyan,.text-gradient-gold{color:CanvasText!important}}.marker\:text-cyan-300\/60 *::marker{color:#67e8f999}.marker\:text-cyan-300\/60::marker{color:#67e8f999}.selection\:bg-cyan-400\/30 *::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30 *::selection{background-color:#22d3ee4d}.selection\:bg-primary *::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary *::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground *::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground *::selection{color:hsl(var(--primary-foreground))}.selection\:bg-cyan-400\/30::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30::selection{background-color:#22d3ee4d}.selection\:bg-primary::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground::selection{color:hsl(var(--primary-foreground))}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:mt-0:last-child{margin-top:0}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-cyan-300\/30:hover{border-color:#67e8f94d}.hover\:border-cyan-300\/40:hover{border-color:#67e8f966}.hover\:border-cyan-400\/30:hover{border-color:#22d3ee4d}.hover\:border-cyan-400\/40:hover{border-color:#22d3ee66}.hover\:border-cyan-500\/30:hover{border-color:#06b6d44d}.hover\:border-cyan-500\/40:hover{border-color:#06b6d466}.hover\:border-red-900\/30:hover{border-color:#7f1d1d4d}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300:hover{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300\/10:hover{background-color:#67e8f91a}.hover\:bg-cyan-300\/20:hover{background-color:#67e8f933}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gold-400\/10:hover{background-color:#fbbf241a}.hover\:bg-gold-400\/20:hover{background-color:#fbbf2433}.hover\:bg-green-400\/20:hover{background-color:#4ade8033}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-950\/20:hover{background-color:#450a0a33}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/50:hover{background-color:#1e293b80}.hover\:bg-slate-900\/40:hover{background-color:#0f172a66}.hover\:bg-surface:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-surface\/20:hover{background-color:#0f172a33}.hover\:bg-surface\/30:hover{background-color:#0f172a4d}.hover\:bg-surface\/40:hover{background-color:#0f172a66}.hover\:bg-surface\/60:hover{background-color:#0f172a99}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-cyan-100:hover{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.hover\:text-cyan-200:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.hover\:text-cyan-300:hover{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.hover\:text-emerald-300:hover{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:fixed:focus{position:fixed}.focus\:left-4:focus{left:1rem}.focus\:top-4:focus{top:1rem}.focus\:z-10:focus{z-index:10}.focus\:z-\[100\]:focus{z-index:100}.focus\:rounded-lg:focus{border-radius:var(--radius)}.focus\:border-cyan-300\/50:focus{border-color:#67e8f980}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-cyan-300:focus{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:font-semibold:focus{font-weight:600}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-void:focus{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color: hsl(var(--destructive) / .2)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: hsl(var(--ring) / .5)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-cyan-300\/20:disabled{background-color:#67e8f933}.disabled\:text-muted\/20:disabled{color:hsl(var(--muted) / .2)}.disabled\:text-void\/40:disabled{color:#02061766}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:border-cyan-300\/30{border-color:#67e8f94d}.group:hover .group-hover\:bg-cyan-300\/20{background-color:#67e8f933}.group:hover .group-hover\:fill-cyan-300{fill:#67e8f9}.group:hover .group-hover\:stroke-cyan-200{stroke:#a5f3fc}.group:hover .group-hover\:stroke-cyan-300\/40{stroke:#67e8f966}.group:hover .group-hover\:text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\>button\]\:ml-\[-0\.45rem\]:has(>button){margin-left:-.45rem}.has-\[\>button\]\:mr-\[-0\.45rem\]:has(>button){margin-right:-.45rem}.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(>kbd){margin-left:-.35rem}.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(>kbd){margin-right:-.35rem}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:.5rem}.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:.75rem}.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:.75rem}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-width:1px}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:hsl(var(--ring))}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){--tw-border-opacity: 1;border-color:hsl(var(--destructive) / var(--tw-border-opacity, 1))}.has-\[\>svg\]\:p-0:has(>svg){padding:0}.has-\[\>svg\]\:px-2:has(>svg){padding-left:.5rem;padding-right:.5rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color: hsl(var(--ring) / .5)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color: hsl(var(--destructive) / .2)}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start{align-self:flex-start}.group\/field:has([data-orientation=horizontal]) .group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance{text-wrap:balance}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pb-2\.5{padding-bottom:.625rem}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pt-2\.5{padding-top:.625rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{left:0;right:0}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{top:0;bottom:0}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{left:0;right:0}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:0}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:0}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:0}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:0}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:6rem}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:6rem}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:.375rem}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[size\=default\]\:h-9[data-size=default]{height:2.25rem}.data-\[size\=sm\]\:h-8[data-size=sm]{height:2rem}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom],.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:11rem}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:.375rem}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical],.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:.75rem}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) - 2px)}.data-\[selected\=true\]\:rounded-none[data-selected=true],.data-\[spacing\=0\]\:rounded-none[data-spacing="0"]{border-radius:0}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-variant=outline][data-spacing="0"]{border-left-width:0px}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-width:1px}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:hsl(var(--ring))}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:hsl(var(--primary))}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:hsl(var(--accent) / .5)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:hsl(var(--primary))}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:hsl(var(--accent))}.data-\[range-start\=true\]\:bg-primary[data-range-start=true],.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:hsl(var(--primary))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:.875rem;line-height:1.25rem}.data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:1rem;line-height:1.5rem}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:hsl(var(--accent-foreground))}.data-\[error\=true\]\:text-destructive[data-error=true],.data-\[invalid\=true\]\:text-destructive[data-invalid=true]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:hsl(var(--primary-foreground))}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:hsl(var(--accent-foreground))}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true],.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:hsl(var(--primary-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[spacing\=0\]\:shadow-none[data-spacing="0"]{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline][data-spacing=default],.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color: hsl(var(--ring) / .5)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot=select-value]>*{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\*\:data-\[slot\=select-value\]\:flex[data-slot=select-value]>*{display:flex}.\*\:data-\[slot\=select-value\]\:items-center[data-slot=select-value]>*{align-items:center}.\*\:data-\[slot\=select-value\]\:gap-2[data-slot=select-value]>*{gap:.5rem}.\*\:data-\[slot\=alert-description\]\:text-destructive\/90[data-slot=alert-description]>*{color:hsl(var(--destructive) / .9)}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[spacing\=0\]\:first\:rounded-l-md:first-child[data-spacing="0"]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l:first-child[data-variant=outline][data-spacing="0"]{border-left-width:1px}.data-\[spacing\=0\]\:last\:rounded-r-md:last-child[data-spacing="0"]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[active\=true\]\:hover\:bg-accent:hover[data-active=true],.data-\[state\=open\]\:hover\:bg-accent:hover[data-state=open]{background-color:hsl(var(--accent))}.data-\[active\=true\]\:focus\:bg-accent:focus[data-active=true]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:focus\:bg-accent:focus[data-state=open]{background-color:hsl(var(--accent))}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant=destructive]{background-color:hsl(var(--destructive) / .1)}.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.group[data-disabled=true] .group-data-\[disabled\=true\]\:pointer-events-none{pointer-events:none}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:relative{position:relative}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:top-full{top:100%}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:z-10{z-index:10}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group\/field-group[data-variant=outline] .group-data-\[variant\=outline\]\/field-group\:-mb-2{margin-bottom:-.5rem}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5{margin-top:.375rem}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block{display:block}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:border-ring{border-color:hsl(var(--ring))}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:bg-popover{background-color:hsl(var(--popover))}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center,.group\/drawer-content[data-vaul-drawer-direction=top] .group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center{text-align:center}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground{color:hsl(var(--popover-foreground))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group\/field[data-disabled=true] .group-data-\[disabled\=true\]\/field\:opacity-50,.group\/input-group[data-disabled=true] .group-data-\[disabled\=true\]\/input-group\:opacity-50,.group[data-disabled=true] .group-data-\[disabled\=true\]\:opacity-50{opacity:.5}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-\[3px\]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:duration-200{transition-duration:.2s;animation-duration:.2s}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.prose-headings\:font-bold :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:700}.prose-headings\:tracking-tight :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){letter-spacing:-.025em}.prose-a\:text-cyan-300 :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-code\:rounded-md :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) - 2px)}.prose-code\:bg-cyan-950\/30 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#0833444d}.prose-code\:px-1\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.375rem;padding-right:.375rem}.prose-code\:py-0\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.125rem;padding-bottom:.125rem}.prose-code\:text-cyan-200 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.prose-pre\:border :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-pre\:border-slate-800 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.prose-pre\:bg-slate-950\/80 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#020617cc}.prose-img\:rounded-xl :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) + 4px)}.prose-img\:border :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-img\:border-slate-800 :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-input:is(.dark *){border-color:hsl(var(--input))}.dark\:bg-destructive\/60:is(.dark *){background-color:hsl(var(--destructive) / .6)}.dark\:bg-input\/30:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:text-muted-foreground:is(.dark *){color:hsl(var(--muted-foreground))}.dark\:hover\:bg-accent\/50:hover:is(.dark *){background-color:hsl(var(--accent) / .5)}.dark\:hover\:bg-input\/50:hover:is(.dark *){background-color:hsl(var(--input) / .5)}.dark\:hover\:text-accent-foreground:hover:is(.dark *){color:hsl(var(--accent-foreground))}.dark\:focus-visible\:ring-destructive\/40:focus-visible:is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:has([data-slot][aria-invalid=true]):is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:data-\[state\=active\]\:border-input[data-state=active]:is(.dark *){border-color:hsl(var(--input))}.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]:is(.dark *){background-color:hsl(var(--primary))}.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state=checked]:is(.dark *){background-color:hsl(var(--primary-foreground))}.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state=unchecked]:is(.dark *){background-color:hsl(var(--foreground))}.dark\:data-\[state\=unchecked\]\:bg-input\/80[data-state=unchecked]:is(.dark *){background-color:hsl(var(--input) / .8)}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]:is(.dark *){color:hsl(var(--foreground))}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant=destructive]:is(.dark *){background-color:hsl(var(--destructive) / .2)}@media not all and (min-width:640px){.max-sm\:opacity-100{opacity:1}}@media(min-width:640px){.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:hidden{display:none}.sm\:w-auto{width:auto}.sm\:min-w-\[80px\]{min-width:80px}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:gap-4{gap:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pl-2\.5{padding-left:.625rem}.sm\:pr-2\.5{padding-right:.625rem}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:24rem}}@media(min-width:768px){.md\:absolute{position:absolute}.md\:mx-0{margin-left:0;margin-right:0}.md\:mb-16{margin-bottom:4rem}.md\:ml-8{margin-left:2rem}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:gap-1\.5{gap:.375rem}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.md\:divide-white\/5>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.md\:p-12{padding:3rem}.md\:p-6{padding:1.5rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:text-left{text-align:left}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-7xl{font-size:4.5rem;line-height:1}.md\:text-9xl{font-size:8rem;line-height:1}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}.md\:opacity-0{opacity:0}.md\:after\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:gap-8{gap:2rem}.lg\:text-6xl{font-size:3.75rem;line-height:1}.lg\:text-7xl{font-size:4.5rem;line-height:1}}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none>*:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>*:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0>*:not(:first-child){border-left-width:0px}.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>*:not(:first-child){border-top-width:0px}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>*:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none>*:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:focus-visible\:relative:focus-visible>*{position:relative}.\[\&\>\*\]\:focus-visible\:z-10:focus-visible>*{z-index:10}.\[\&\>\*\]\:data-\[slot\=field\]\:p-4[data-slot=field]>*{padding:1rem}.\[\&\>\.sr-only\]\:w-auto>.sr-only{width:auto}.\[\&\>\[data-slot\=field-group\]\]\:gap-4>[data-slot=field-group]{gap:1rem}.\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:1 1 auto}.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md>[data-slot=select-trigger]:last-of-type:has(select[aria-hidden=true]:last-child){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=w-]){width:-moz-fit-content;width:fit-content}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>a\:hover\]\:text-primary>a:hover{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>input\]\:flex-1>input{flex:1 1 0%}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3>input:has(>[data-align=block-end]){padding-top:.75rem}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3>input:has(>[data-align=block-start]){padding-bottom:.75rem}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2>input:has(>[data-align=inline-end]){padding-right:.5rem}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2>input:has(>[data-align=inline-start]){padding-left:.5rem}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:1rem;height:1rem}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:.75rem;height:.75rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{-o-object-fit:cover;object-fit:cover}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:hsl(var(--muted-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:transparent}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:hsl(var(--background) / .2)}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:hsl(var(--background))}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:hsl(var(--background) / .1)}[data-variant=legend]+.\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:-.375rem}a.\[a\&\]\:hover\:bg-accent:hover{background-color:hsl(var(--accent))}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:hsl(var(--secondary) / .9)}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))} diff --git a/assets/index-Ad_ZSp8G.css b/assets/index-Ad_ZSp8G.css deleted file mode 100644 index b49a7cda..00000000 --- a/assets/index-Ad_ZSp8G.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px}:root{--background: 222 47% 4%;--foreground: 210 40% 93%;--card: 222 47% 7%;--card-foreground: 210 40% 93%;--popover: 222 47% 8%;--popover-foreground: 210 40% 93%;--primary: 187 92% 69%;--primary-foreground: 222 47% 4%;--secondary: 215 25% 70%;--secondary-foreground: 210 40% 93%;--muted: 215 25% 20%;--muted-foreground: 215 16% 72%;--accent: 187 92% 69%;--accent-foreground: 222 47% 4%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 215 25% 18%;--input: 215 25% 18%;--ring: 187 92% 69%;--radius: 1rem}html{scroll-behavior:smooth}.js-enabled #prerendered{display:none!important}body{overflow-x:hidden;--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));font-family:Inter,system-ui,-apple-system,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(circle at 10% 20%,rgba(103,232,249,.04) 0%,transparent 40%),radial-gradient(circle at 90% 80%,rgba(251,191,36,.02) 0%,transparent 40%),linear-gradient(to bottom,#020617,#0b1329);background-attachment:fixed}h1,h2,h3,h4,h5,h6{font-family:Inter,system-ui,-apple-system,sans-serif;letter-spacing:-.025em;color:hsl(var(--primary))}@media(min-width:768px){h1,h2,h3,h4,h5,h6{text-wrap:balance}}code{font-family:JetBrains Mono,Fira Code,monospace}::-moz-selection{background:#67e8f94d;color:#e2e8f0}::selection{background:#67e8f94d;color:#e2e8f0}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-cyan{--tw-prose-links: #0891b2;--tw-prose-invert-links: #06b6d4}.prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.btn-cyan{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #67e8f9 var(--tw-gradient-to-position);padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-cyan:hover{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #a5f3fc var(--tw-gradient-to-position);--tw-shadow: 0 0 24px rgba(103,232,249,.45);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-cyan:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-gold{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;border-color:#fbbf2499;background-color:#fbbf240d;padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-gold:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1));background-color:#fbbf241a;--tw-shadow: 0 0 24px rgba(251,191,36,.25);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-gold:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1));padding:.75rem 1.5rem;color:hsl(var(--secondary));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-outline:hover{border-color:#67e8f966;background-color:#ffffff0d;color:hsl(var(--primary))}.btn-outline:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.card-surface{min-width:0;border-radius:1rem;border-width:1px;border-color:#1e293bcc;background-color:#0b132966;padding:1.5rem;--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;animation-duration:.5s}.card-surface:hover{border-color:#67e8f94d;--tw-shadow: 0 0 30px rgba(103,232,249,.12);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-surface:not(.revealed),.prose:not(.revealed){opacity:0;transform:translateY(30px)}.card-surface.revealed,.prose.revealed{opacity:1;transform:translateY(0);transition:opacity .7s ease-out,transform .7s ease-out}.section-padding{padding-left:1.5rem;padding-right:1.5rem}@media(min-width:640px){.section-padding{padding-left:2rem;padding-right:2rem}}@media(min-width:1024px){.section-padding{padding-left:4rem;padding-right:4rem}}@media(min-width:1280px){.section-padding{padding-left:6rem;padding-right:6rem}}.eyebrow-pill{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#67e8f933;background-color:#67e8f91a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.eyebrow-pill-gold{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#fbbf2433;background-color:#fbbf241a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.link-accent{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1));text-underline-offset:4px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.link-accent:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1));text-decoration-line:underline}.section-feature{padding-top:5rem;padding-bottom:5rem}@media(min-width:768px){.section-feature{padding-top:7rem;padding-bottom:7rem}}.section-band{padding-top:4rem;padding-bottom:4rem}@media(min-width:768px){.section-band{padding-top:5rem;padding-bottom:5rem}}.section-thin{padding-top:2.5rem;padding-bottom:2.5rem}@media(min-width:768px){.section-thin{padding-top:3rem;padding-bottom:3rem}}.glass-nav{border-width:1px;border-color:#ffffff1a;background-color:#0b1329bf;--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.neon-border-cyan{box-shadow:0 0 24px #67e8f91f,inset 0 0 24px #67e8f90a}.neon-border-gold{box-shadow:0 0 24px #fbbf241f,inset 0 0 24px #fbbf240a}.quantum-grid-bg{background-size:30px 30px;background-image:linear-gradient(to right,rgba(255,255,255,.015) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.015) 1px,transparent 1px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-left-\[40px\]{left:-40px}.-right-12{right:-3rem}.-top-12{top:-3rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[-1px\]{left:-1px}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-1\/3{top:33.333333%}.top-1\/4{top:25%}.top-24{top:6rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.order-last{order:9999}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2 / span 2}.row-start-1{grid-row-start:1}.\!m-0{margin:0!important}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-10{width:2.5rem;height:2.5rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1\.15rem\]{height:1.15rem}.h-\[36rem\]{height:36rem}.h-\[500px\]{height:500px}.h-\[600px\]{height:600px}.h-\[800px\]{height:800px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:0px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[calc\(100dvh-110px\)\]{max-height:calc(100dvh - 110px)}.min-h-0{min-height:0px}.min-h-16{min-height:4rem}.min-h-4{min-height:1rem}.min-h-\[44px\]{min-height:44px}.min-h-\[500px\]{min-height:500px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[1000px\]{width:1000px}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[36rem\]{width:36rem}.w-\[600px\]{width:600px}.w-\[800px\]{width:800px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-5{min-width:1.25rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[120px\]{min-width:120px}.min-w-\[12rem\]{min-width:12rem}.min-w-\[140px\]{min-width:140px}.min-w-\[44px\]{min-width:44px}.min-w-\[560px\]{min-width:560px}.min-w-\[640px\]{min-width:640px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[11rem\]{max-width:11rem}.max-w-\[440px\]{max-width:440px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/3{--tw-translate-x: -33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[140\%\]{--tw-translate-y: -140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/3{--tw-translate-x: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/3{--tw-translate-y: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-45{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.scroll-py-1{scroll-padding-top:.25rem;scroll-padding-bottom:.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-8{gap:2rem}.gap-\[--spacing\(var\(--gap\)\)\]{gap:var(--spacing(var(--gap)))}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-8{row-gap:2rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-14>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gridline>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 41 59 / var(--tw-divide-opacity, 1))}.divide-gridline\/50>:not([hidden])~:not([hidden]){border-color:#1e293b80}.divide-slate-800\/60>:not([hidden])~:not([hidden]){border-color:#1e293b99}.self-start{align-self:flex-start}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:calc(var(--radius) - 6px)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-blue-400\/30{border-color:#60a5fa4d}.border-border{border-color:hsl(var(--border))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-300\/10{border-color:#67e8f91a}.border-cyan-300\/20{border-color:#67e8f933}.border-cyan-300\/25{border-color:#67e8f940}.border-cyan-300\/30{border-color:#67e8f94d}.border-cyan-300\/35{border-color:#67e8f959}.border-cyan-300\/40{border-color:#67e8f966}.border-cyan-800\/40{border-color:#155e7566}.border-cyan-800\/50{border-color:#155e7580}.border-cyan-800\/60{border-color:#155e7599}.border-cyan-900\/40{border-color:#164e6366}.border-cyan-900\/50{border-color:#164e6380}.border-cyan-900\/60{border-color:#164e6399}.border-emerald-500\/30{border-color:#10b9814d}.border-gold-400\/20{border-color:#fbbf2433}.border-gold-400\/25{border-color:#fbbf2440}.border-gold-400\/30{border-color:#fbbf244d}.border-gold-400\/60{border-color:#fbbf2499}.border-green-400\/20{border-color:#4ade8033}.border-gridline{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-gridline\/30{border-color:#1e293b4d}.border-gridline\/40{border-color:#1e293b66}.border-gridline\/50{border-color:#1e293b80}.border-gridline\/60{border-color:#1e293b99}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-purple-400\/20{border-color:#c084fc33}.border-red-400\/20{border-color:#f8717133}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/60{border-color:#1e293b99}.border-slate-800\/80{border-color:#1e293bcc}.border-slate-800\/90{border-color:#1e293be6}.border-transparent{border-color:transparent}.border-void{--tw-border-opacity: 1;border-color:rgb(2 6 23 / var(--tw-border-opacity, 1))}.border-white\/5{border-color:#ffffff0d}.border-l-transparent{border-left-color:transparent}.border-t-cyan-300{--tw-border-opacity: 1;border-top-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#050b14\]{--tw-bg-opacity: 1;background-color:rgb(5 11 20 / var(--tw-bg-opacity, 1))}.bg-\[\#0b1329\]\/40{background-color:#0b132966}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-black\/50{background-color:#00000080}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-300\/10{background-color:#67e8f91a}.bg-cyan-300\/5{background-color:#67e8f90d}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.bg-cyan-400\/10{background-color:#22d3ee1a}.bg-cyan-400\/5{background-color:#22d3ee0d}.bg-cyan-900\/10{background-color:#164e631a}.bg-cyan-950\/50{background-color:#08334480}.bg-cyan-950\/60{background-color:#08334499}.bg-cyan-950\/80{background-color:#083344cc}.bg-destructive{--tw-bg-opacity: 1;background-color:hsl(var(--destructive) / var(--tw-bg-opacity, 1))}.bg-emerald-950\/50{background-color:#022c2280}.bg-foreground{background-color:hsl(var(--foreground))}.bg-gold-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-gold-400\/10{background-color:#fbbf241a}.bg-gold-400\/5{background-color:#fbbf240d}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-400\/10{background-color:#4ade801a}.bg-green-400\/5{background-color:#4ade800d}.bg-green-500\/80{background-color:#22c55ecc}.bg-gridline{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-purple-400\/10{background-color:#c084fc1a}.bg-red-400\/5{background-color:#f871710d}.bg-red-500\/80{background-color:#ef4444cc}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/20{background-color:#1e293b33}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/90{background-color:#020617e6}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-surface\/10{background-color:#0f172a1a}.bg-surface\/20{background-color:#0f172a33}.bg-surface\/30{background-color:#0f172a4d}.bg-surface\/50{background-color:#0f172a80}.bg-surface\/70{background-color:#0f172ab3}.bg-surface\/90{background-color:#0f172ae6}.bg-transparent{background-color:transparent}.bg-void{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-void\/30{background-color:#0206174d}.bg-void\/50{background-color:#02061780}.bg-void\/70{background-color:#020617b3}.bg-void\/80{background-color:#020617cc}.bg-void\/90{background-color:#020617e6}.bg-void\/95{background-color:#020617f2}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/80{background-color:#eab308cc}.bg-\[radial-gradient\(ellipse_at_top\,_var\(--tw-gradient-stops\)\)\]{background-image:radial-gradient(ellipse at top,var(--tw-gradient-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-cyan-300{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/10{--tw-gradient-from: rgb(103 232 249 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/5{--tw-gradient-from: rgb(103 232 249 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/80{--tw-gradient-from: rgb(103 232 249 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400\/5{--tw-gradient-from: rgb(34 211 238 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500\/\[0\.04\]{--tw-gradient-from: rgb(6 182 212 / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-900\/20{--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-950\/40{--tw-gradient-from: rgb(8 51 68 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(8 51 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gold-400\/5{--tw-gradient-from: rgb(251 191 36 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-400\/5{--tw-gradient-from: rgb(74 222 128 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from: #020617 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-surface\/50{--tw-gradient-from: rgb(15 23 42 / .5) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-void\/60{--tw-gradient-from: rgb(2 6 23 / .6) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-gold-400\/30{--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(251 191 36 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #0f172a var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/30{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/40{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .4) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/60{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .6) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-transparent{--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #020617 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void\/25{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(2 6 23 / .25) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-cyan-300\/10{--tw-gradient-to: rgb(103 232 249 / .1) var(--tw-gradient-to-position)}.to-cyan-400{--tw-gradient-to: #22d3ee var(--tw-gradient-to-position)}.to-cyan-950\/20{--tw-gradient-to: rgb(8 51 68 / .2) var(--tw-gradient-to-position)}.to-slate-400{--tw-gradient-to: #94a3b8 var(--tw-gradient-to-position)}.to-slate-950{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-void{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-white\/70{--tw-gradient-to: rgb(255 255 255 / .7) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.fill-foreground{fill:hsl(var(--foreground))}.fill-primary{fill:hsl(var(--primary))}.object-cover{-o-object-fit:cover;object-fit:cover}.\!p-5{padding:1.25rem!important}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-32{padding-top:8rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.font-sans{font-family:Inter,system-ui,-apple-system,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-8xl{font-size:6rem;line-height:1}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.05\]{line-height:1.05}.leading-\[1\.1\]{line-height:1.1}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-background{color:hsl(var(--background))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-300\/20{color:#67e8f933}.text-cyan-300\/80{color:#67e8f9cc}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-destructive{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-gold-200\/60{color:#fde68a99}.text-gold-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-gold-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-gold-400\/60{color:#fbbf2499}.text-gold-400\/80{color:#fbbf24cc}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-secondary{color:hsl(var(--secondary))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-secondary\/80{color:hsl(var(--secondary) / .8)}.text-secondary\/90{color:hsl(var(--secondary) / .9)}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-void{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.placeholder-cyan-300\/60::-moz-placeholder{color:#67e8f999}.placeholder-cyan-300\/60::placeholder{color:#67e8f999}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(103\,232\,249\,0\.35\)\]{--tw-shadow: 0 0 12px rgba(103,232,249,.35);--tw-shadow-colored: 0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.5\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.5);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.8\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.8);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-deep{--tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, .5);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-cyan-300\/20{--tw-shadow-color: rgb(103 232 249 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-400\/20{--tw-shadow-color: rgb(34 211 238 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur: blur(100px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[120px\]{--tw-blur: blur(120px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-bottom-8{--tw-enter-translate-y: 2rem}.duration-100{animation-duration:.1s}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.duration-700{animation-duration:.7s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.animate-pulse-dot{animation:pulse-dot 2s ease-in-out infinite}.\[--cell-size\:--spacing\(8\)\]{--cell-size: var(--spacing(8))}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}@keyframes gradient-xy{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#020617}::-webkit-scrollbar-thumb{background:#1e293b;border-radius:5px;border:2px solid #020617}::-webkit-scrollbar-thumb:hover{background:#334155}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.card-surface,.prose{opacity:1;transform:none;transition:none}}@media(forced-colors:active){.text-gradient-cyan,.text-gradient-gold{color:CanvasText!important}}.marker\:text-cyan-300\/60 *::marker{color:#67e8f999}.marker\:text-cyan-300\/60::marker{color:#67e8f999}.selection\:bg-cyan-400\/30 *::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30 *::selection{background-color:#22d3ee4d}.selection\:bg-primary *::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary *::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground *::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground *::selection{color:hsl(var(--primary-foreground))}.selection\:bg-cyan-400\/30::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30::selection{background-color:#22d3ee4d}.selection\:bg-primary::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground::selection{color:hsl(var(--primary-foreground))}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:mt-0:last-child{margin-top:0}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-cyan-300\/30:hover{border-color:#67e8f94d}.hover\:border-cyan-300\/40:hover{border-color:#67e8f966}.hover\:border-cyan-400\/30:hover{border-color:#22d3ee4d}.hover\:border-cyan-400\/40:hover{border-color:#22d3ee66}.hover\:border-cyan-500\/30:hover{border-color:#06b6d44d}.hover\:border-cyan-500\/40:hover{border-color:#06b6d466}.hover\:border-red-900\/30:hover{border-color:#7f1d1d4d}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300:hover{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300\/10:hover{background-color:#67e8f91a}.hover\:bg-cyan-300\/20:hover{background-color:#67e8f933}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gold-400\/10:hover{background-color:#fbbf241a}.hover\:bg-gold-400\/20:hover{background-color:#fbbf2433}.hover\:bg-green-400\/20:hover{background-color:#4ade8033}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-950\/20:hover{background-color:#450a0a33}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/50:hover{background-color:#1e293b80}.hover\:bg-slate-900\/40:hover{background-color:#0f172a66}.hover\:bg-surface:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-surface\/20:hover{background-color:#0f172a33}.hover\:bg-surface\/30:hover{background-color:#0f172a4d}.hover\:bg-surface\/40:hover{background-color:#0f172a66}.hover\:bg-surface\/60:hover{background-color:#0f172a99}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-cyan-100:hover{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.hover\:text-cyan-200:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.hover\:text-cyan-300:hover{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.hover\:text-emerald-300:hover{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:fixed:focus{position:fixed}.focus\:left-4:focus{left:1rem}.focus\:top-4:focus{top:1rem}.focus\:z-10:focus{z-index:10}.focus\:z-\[100\]:focus{z-index:100}.focus\:rounded-lg:focus{border-radius:var(--radius)}.focus\:border-cyan-300\/50:focus{border-color:#67e8f980}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-cyan-300:focus{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:font-semibold:focus{font-weight:600}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-void:focus{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color: hsl(var(--destructive) / .2)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: hsl(var(--ring) / .5)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-cyan-300\/20:disabled{background-color:#67e8f933}.disabled\:text-muted\/20:disabled{color:hsl(var(--muted) / .2)}.disabled\:text-void\/40:disabled{color:#02061766}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:border-cyan-300\/30{border-color:#67e8f94d}.group:hover .group-hover\:bg-cyan-300\/20{background-color:#67e8f933}.group:hover .group-hover\:fill-cyan-300{fill:#67e8f9}.group:hover .group-hover\:stroke-cyan-200{stroke:#a5f3fc}.group:hover .group-hover\:stroke-cyan-300\/40{stroke:#67e8f966}.group:hover .group-hover\:text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\>button\]\:ml-\[-0\.45rem\]:has(>button){margin-left:-.45rem}.has-\[\>button\]\:mr-\[-0\.45rem\]:has(>button){margin-right:-.45rem}.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(>kbd){margin-left:-.35rem}.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(>kbd){margin-right:-.35rem}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:.5rem}.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:.75rem}.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:.75rem}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-width:1px}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:hsl(var(--ring))}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){--tw-border-opacity: 1;border-color:hsl(var(--destructive) / var(--tw-border-opacity, 1))}.has-\[\>svg\]\:p-0:has(>svg){padding:0}.has-\[\>svg\]\:px-2:has(>svg){padding-left:.5rem;padding-right:.5rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color: hsl(var(--ring) / .5)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color: hsl(var(--destructive) / .2)}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start{align-self:flex-start}.group\/field:has([data-orientation=horizontal]) .group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance{text-wrap:balance}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pb-2\.5{padding-bottom:.625rem}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pt-2\.5{padding-top:.625rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{left:0;right:0}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{top:0;bottom:0}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{left:0;right:0}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:0}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:0}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:0}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:0}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:6rem}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:6rem}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:.375rem}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[size\=default\]\:h-9[data-size=default]{height:2.25rem}.data-\[size\=sm\]\:h-8[data-size=sm]{height:2rem}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom],.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:11rem}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:.375rem}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical],.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:.75rem}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) - 2px)}.data-\[selected\=true\]\:rounded-none[data-selected=true],.data-\[spacing\=0\]\:rounded-none[data-spacing="0"]{border-radius:0}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-variant=outline][data-spacing="0"]{border-left-width:0px}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-width:1px}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:hsl(var(--ring))}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:hsl(var(--primary))}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:hsl(var(--accent) / .5)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:hsl(var(--primary))}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:hsl(var(--accent))}.data-\[range-start\=true\]\:bg-primary[data-range-start=true],.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:hsl(var(--primary))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:.875rem;line-height:1.25rem}.data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:1rem;line-height:1.5rem}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:hsl(var(--accent-foreground))}.data-\[error\=true\]\:text-destructive[data-error=true],.data-\[invalid\=true\]\:text-destructive[data-invalid=true]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:hsl(var(--primary-foreground))}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:hsl(var(--accent-foreground))}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true],.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:hsl(var(--primary-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[spacing\=0\]\:shadow-none[data-spacing="0"]{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline][data-spacing=default],.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color: hsl(var(--ring) / .5)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot=select-value]>*{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\*\:data-\[slot\=select-value\]\:flex[data-slot=select-value]>*{display:flex}.\*\:data-\[slot\=select-value\]\:items-center[data-slot=select-value]>*{align-items:center}.\*\:data-\[slot\=select-value\]\:gap-2[data-slot=select-value]>*{gap:.5rem}.\*\:data-\[slot\=alert-description\]\:text-destructive\/90[data-slot=alert-description]>*{color:hsl(var(--destructive) / .9)}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[spacing\=0\]\:first\:rounded-l-md:first-child[data-spacing="0"]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l:first-child[data-variant=outline][data-spacing="0"]{border-left-width:1px}.data-\[spacing\=0\]\:last\:rounded-r-md:last-child[data-spacing="0"]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[active\=true\]\:hover\:bg-accent:hover[data-active=true],.data-\[state\=open\]\:hover\:bg-accent:hover[data-state=open]{background-color:hsl(var(--accent))}.data-\[active\=true\]\:focus\:bg-accent:focus[data-active=true]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:focus\:bg-accent:focus[data-state=open]{background-color:hsl(var(--accent))}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant=destructive]{background-color:hsl(var(--destructive) / .1)}.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.group[data-disabled=true] .group-data-\[disabled\=true\]\:pointer-events-none{pointer-events:none}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:relative{position:relative}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:top-full{top:100%}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:z-10{z-index:10}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group\/field-group[data-variant=outline] .group-data-\[variant\=outline\]\/field-group\:-mb-2{margin-bottom:-.5rem}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5{margin-top:.375rem}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block{display:block}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:border-ring{border-color:hsl(var(--ring))}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:bg-popover{background-color:hsl(var(--popover))}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center,.group\/drawer-content[data-vaul-drawer-direction=top] .group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center{text-align:center}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground{color:hsl(var(--popover-foreground))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group\/field[data-disabled=true] .group-data-\[disabled\=true\]\/field\:opacity-50,.group\/input-group[data-disabled=true] .group-data-\[disabled\=true\]\/input-group\:opacity-50,.group[data-disabled=true] .group-data-\[disabled\=true\]\:opacity-50{opacity:.5}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-\[3px\]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:duration-200{transition-duration:.2s;animation-duration:.2s}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.prose-headings\:font-bold :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:700}.prose-headings\:tracking-tight :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){letter-spacing:-.025em}.prose-a\:text-cyan-300 :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-code\:rounded-md :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) - 2px)}.prose-code\:bg-cyan-950\/30 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#0833444d}.prose-code\:px-1\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.375rem;padding-right:.375rem}.prose-code\:py-0\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.125rem;padding-bottom:.125rem}.prose-code\:text-cyan-200 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.prose-pre\:border :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-pre\:border-slate-800 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.prose-pre\:bg-slate-950\/80 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#020617cc}.prose-img\:rounded-xl :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) + 4px)}.prose-img\:border :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-img\:border-slate-800 :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-input:is(.dark *){border-color:hsl(var(--input))}.dark\:bg-destructive\/60:is(.dark *){background-color:hsl(var(--destructive) / .6)}.dark\:bg-input\/30:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:text-muted-foreground:is(.dark *){color:hsl(var(--muted-foreground))}.dark\:hover\:bg-accent\/50:hover:is(.dark *){background-color:hsl(var(--accent) / .5)}.dark\:hover\:bg-input\/50:hover:is(.dark *){background-color:hsl(var(--input) / .5)}.dark\:hover\:text-accent-foreground:hover:is(.dark *){color:hsl(var(--accent-foreground))}.dark\:focus-visible\:ring-destructive\/40:focus-visible:is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:has([data-slot][aria-invalid=true]):is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:data-\[state\=active\]\:border-input[data-state=active]:is(.dark *){border-color:hsl(var(--input))}.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]:is(.dark *){background-color:hsl(var(--primary))}.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state=checked]:is(.dark *){background-color:hsl(var(--primary-foreground))}.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state=unchecked]:is(.dark *){background-color:hsl(var(--foreground))}.dark\:data-\[state\=unchecked\]\:bg-input\/80[data-state=unchecked]:is(.dark *){background-color:hsl(var(--input) / .8)}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]:is(.dark *){color:hsl(var(--foreground))}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant=destructive]:is(.dark *){background-color:hsl(var(--destructive) / .2)}@media not all and (min-width:640px){.max-sm\:opacity-100{opacity:1}}@media(min-width:640px){.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:hidden{display:none}.sm\:w-auto{width:auto}.sm\:min-w-\[80px\]{min-width:80px}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:gap-4{gap:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pl-2\.5{padding-left:.625rem}.sm\:pr-2\.5{padding-right:.625rem}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:24rem}}@media(min-width:768px){.md\:absolute{position:absolute}.md\:mx-0{margin-left:0;margin-right:0}.md\:mb-16{margin-bottom:4rem}.md\:ml-8{margin-left:2rem}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:gap-1\.5{gap:.375rem}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.md\:divide-white\/5>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.md\:p-12{padding:3rem}.md\:p-6{padding:1.5rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:text-left{text-align:left}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-7xl{font-size:4.5rem;line-height:1}.md\:text-9xl{font-size:8rem;line-height:1}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}.md\:opacity-0{opacity:0}.md\:after\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:gap-8{gap:2rem}.lg\:text-6xl{font-size:3.75rem;line-height:1}.lg\:text-7xl{font-size:4.5rem;line-height:1}}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none>*:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>*:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0>*:not(:first-child){border-left-width:0px}.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>*:not(:first-child){border-top-width:0px}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>*:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none>*:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:focus-visible\:relative:focus-visible>*{position:relative}.\[\&\>\*\]\:focus-visible\:z-10:focus-visible>*{z-index:10}.\[\&\>\*\]\:data-\[slot\=field\]\:p-4[data-slot=field]>*{padding:1rem}.\[\&\>\.sr-only\]\:w-auto>.sr-only{width:auto}.\[\&\>\[data-slot\=field-group\]\]\:gap-4>[data-slot=field-group]{gap:1rem}.\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:1 1 auto}.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md>[data-slot=select-trigger]:last-of-type:has(select[aria-hidden=true]:last-child){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=w-]){width:-moz-fit-content;width:fit-content}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>a\:hover\]\:text-primary>a:hover{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>input\]\:flex-1>input{flex:1 1 0%}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3>input:has(>[data-align=block-end]){padding-top:.75rem}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3>input:has(>[data-align=block-start]){padding-bottom:.75rem}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2>input:has(>[data-align=inline-end]){padding-right:.5rem}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2>input:has(>[data-align=inline-start]){padding-left:.5rem}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:1rem;height:1rem}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:.75rem;height:.75rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{-o-object-fit:cover;object-fit:cover}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:hsl(var(--muted-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:transparent}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:hsl(var(--background) / .2)}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:hsl(var(--background))}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:hsl(var(--background) / .1)}[data-variant=legend]+.\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:-.375rem}a.\[a\&\]\:hover\:bg-accent:hover{background-color:hsl(var(--accent))}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:hsl(var(--secondary) / .9)}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))} diff --git a/assets/index-B4dH-q6G.css b/assets/index-B4dH-q6G.css deleted file mode 100644 index a3b7530d..00000000 --- a/assets/index-B4dH-q6G.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px}:root{--background: 222 47% 4%;--foreground: 210 40% 93%;--card: 222 47% 7%;--card-foreground: 210 40% 93%;--popover: 222 47% 8%;--popover-foreground: 210 40% 93%;--primary: 187 92% 69%;--primary-foreground: 222 47% 4%;--secondary: 215 25% 70%;--secondary-foreground: 210 40% 93%;--muted: 215 25% 20%;--muted-foreground: 215 16% 72%;--accent: 187 92% 69%;--accent-foreground: 222 47% 4%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 215 25% 18%;--input: 215 25% 18%;--ring: 187 92% 69%;--radius: 1rem}html{scroll-behavior:smooth}.js-enabled #prerendered{display:none!important}body{overflow-x:hidden;--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));font-family:Inter,system-ui,-apple-system,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(circle at 10% 20%,rgba(103,232,249,.04) 0%,transparent 40%),radial-gradient(circle at 90% 80%,rgba(251,191,36,.02) 0%,transparent 40%),linear-gradient(to bottom,#020617,#0b1329);background-attachment:fixed}h1,h2,h3,h4,h5,h6{font-family:Inter,system-ui,-apple-system,sans-serif;letter-spacing:-.025em;color:hsl(var(--primary));text-wrap:balance}code{font-family:JetBrains Mono,Fira Code,monospace}::-moz-selection{background:#67e8f94d;color:#e2e8f0}::selection{background:#67e8f94d;color:#e2e8f0}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-cyan{--tw-prose-links: #0891b2;--tw-prose-invert-links: #06b6d4}.prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.btn-cyan{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #67e8f9 var(--tw-gradient-to-position);padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-cyan:hover{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #a5f3fc var(--tw-gradient-to-position);--tw-shadow: 0 0 24px rgba(103,232,249,.45);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-cyan:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-gold{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;border-color:#fbbf2499;background-color:#fbbf240d;padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-gold:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1));background-color:#fbbf241a;--tw-shadow: 0 0 24px rgba(251,191,36,.25);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-gold:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1));padding:.75rem 1.5rem;color:hsl(var(--secondary));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-outline:hover{border-color:#67e8f966;background-color:#ffffff0d;color:hsl(var(--primary))}.btn-outline:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.card-surface{border-radius:1rem;border-width:1px;border-color:#1e293bcc;background-color:#0b132966;padding:1.5rem;--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;animation-duration:.5s}.card-surface:hover{border-color:#67e8f94d;--tw-shadow: 0 0 30px rgba(103,232,249,.12);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-surface:not(.revealed),.prose:not(.revealed){opacity:0;transform:translateY(30px)}.card-surface.revealed,.prose.revealed{opacity:1;transform:translateY(0);transition:opacity .7s ease-out,transform .7s ease-out}.section-padding{padding-left:1.5rem;padding-right:1.5rem}@media(min-width:640px){.section-padding{padding-left:2rem;padding-right:2rem}}@media(min-width:1024px){.section-padding{padding-left:4rem;padding-right:4rem}}@media(min-width:1280px){.section-padding{padding-left:6rem;padding-right:6rem}}.eyebrow-pill{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#67e8f933;background-color:#67e8f91a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.eyebrow-pill-gold{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#fbbf2433;background-color:#fbbf241a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.eyebrow-pill-emerald{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#10b98133;background-color:#10b9811a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.link-accent{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1));text-underline-offset:4px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.link-accent:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1));text-decoration-line:underline}.section-feature{padding-top:5rem;padding-bottom:5rem}@media(min-width:768px){.section-feature{padding-top:7rem;padding-bottom:7rem}}.section-band{padding-top:4rem;padding-bottom:4rem}@media(min-width:768px){.section-band{padding-top:5rem;padding-bottom:5rem}}.section-thin{padding-top:2.5rem;padding-bottom:2.5rem}@media(min-width:768px){.section-thin{padding-top:3rem;padding-bottom:3rem}}.glass-nav{border-width:1px;border-color:#ffffff1a;background-color:#0b1329bf;--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.neon-border-cyan{box-shadow:0 0 24px #67e8f91f,inset 0 0 24px #67e8f90a}.neon-border-gold{box-shadow:0 0 24px #fbbf241f,inset 0 0 24px #fbbf240a}.quantum-grid-bg{background-size:30px 30px;background-image:linear-gradient(to right,rgba(255,255,255,.015) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.015) 1px,transparent 1px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-left-\[40px\]{left:-40px}.-right-12{right:-3rem}.-top-12{top:-3rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[-1px\]{left:-1px}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-1\/3{top:33.333333%}.top-1\/4{top:25%}.top-24{top:6rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.order-last{order:9999}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2 / span 2}.row-start-1{grid-row-start:1}.\!m-0{margin:0!important}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-10{width:2.5rem;height:2.5rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1\.15rem\]{height:1.15rem}.h-\[36rem\]{height:36rem}.h-\[500px\]{height:500px}.h-\[600px\]{height:600px}.h-\[800px\]{height:800px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:0px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[calc\(100dvh-110px\)\]{max-height:calc(100dvh - 110px)}.min-h-0{min-height:0px}.min-h-16{min-height:4rem}.min-h-4{min-height:1rem}.min-h-\[44px\]{min-height:44px}.min-h-\[500px\]{min-height:500px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[1000px\]{width:1000px}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[36rem\]{width:36rem}.w-\[600px\]{width:600px}.w-\[800px\]{width:800px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-5{min-width:1.25rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[120px\]{min-width:120px}.min-w-\[12rem\]{min-width:12rem}.min-w-\[140px\]{min-width:140px}.min-w-\[44px\]{min-width:44px}.min-w-\[560px\]{min-width:560px}.min-w-\[640px\]{min-width:640px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[11rem\]{max-width:11rem}.max-w-\[440px\]{max-width:440px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/3{--tw-translate-x: -33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[140\%\]{--tw-translate-y: -140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/3{--tw-translate-x: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/3{--tw-translate-y: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-45{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-gradient-xy{animation:gradient-xy 6s ease infinite}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.scroll-mt-32{scroll-margin-top:8rem}.scroll-py-1{scroll-padding-top:.25rem;scroll-padding-bottom:.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-8{gap:2rem}.gap-\[--spacing\(var\(--gap\)\)\]{gap:var(--spacing(var(--gap)))}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-8{row-gap:2rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-14>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gridline>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 41 59 / var(--tw-divide-opacity, 1))}.divide-gridline\/50>:not([hidden])~:not([hidden]){border-color:#1e293b80}.divide-slate-800\/60>:not([hidden])~:not([hidden]){border-color:#1e293b99}.self-start{align-self:flex-start}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[23px\]{border-radius:23px}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:calc(var(--radius) - 6px)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-blue-400\/30{border-color:#60a5fa4d}.border-border{border-color:hsl(var(--border))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-300\/10{border-color:#67e8f91a}.border-cyan-300\/20{border-color:#67e8f933}.border-cyan-300\/25{border-color:#67e8f940}.border-cyan-300\/30{border-color:#67e8f94d}.border-cyan-300\/35{border-color:#67e8f959}.border-cyan-300\/40{border-color:#67e8f966}.border-cyan-800\/40{border-color:#155e7566}.border-cyan-800\/50{border-color:#155e7580}.border-cyan-800\/60{border-color:#155e7599}.border-cyan-900\/40{border-color:#164e6366}.border-cyan-900\/50{border-color:#164e6380}.border-cyan-900\/60{border-color:#164e6399}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-gold-400\/20{border-color:#fbbf2433}.border-gold-400\/25{border-color:#fbbf2440}.border-gold-400\/30{border-color:#fbbf244d}.border-gold-400\/60{border-color:#fbbf2499}.border-green-400\/20{border-color:#4ade8033}.border-gridline{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-gridline\/30{border-color:#1e293b4d}.border-gridline\/40{border-color:#1e293b66}.border-gridline\/50{border-color:#1e293b80}.border-gridline\/60{border-color:#1e293b99}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-purple-400\/20{border-color:#c084fc33}.border-red-400\/20{border-color:#f8717133}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/60{border-color:#1e293b99}.border-slate-800\/80{border-color:#1e293bcc}.border-slate-800\/90{border-color:#1e293be6}.border-transparent{border-color:transparent}.border-void{--tw-border-opacity: 1;border-color:rgb(2 6 23 / var(--tw-border-opacity, 1))}.border-white\/5{border-color:#ffffff0d}.border-l-transparent{border-left-color:transparent}.border-t-cyan-300{--tw-border-opacity: 1;border-top-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#050b14\]{--tw-bg-opacity: 1;background-color:rgb(5 11 20 / var(--tw-bg-opacity, 1))}.bg-\[\#0b1329\]\/40{background-color:#0b132966}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-black\/50{background-color:#00000080}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-300\/10{background-color:#67e8f91a}.bg-cyan-300\/5{background-color:#67e8f90d}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.bg-cyan-400\/10{background-color:#22d3ee1a}.bg-cyan-400\/5{background-color:#22d3ee0d}.bg-cyan-500\/20{background-color:#06b6d433}.bg-cyan-900\/10{background-color:#164e631a}.bg-cyan-950\/50{background-color:#08334480}.bg-cyan-950\/60{background-color:#08334499}.bg-cyan-950\/80{background-color:#083344cc}.bg-destructive{--tw-bg-opacity: 1;background-color:hsl(var(--destructive) / var(--tw-bg-opacity, 1))}.bg-emerald-950\/50{background-color:#022c2280}.bg-foreground{background-color:hsl(var(--foreground))}.bg-gold-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-gold-400\/10{background-color:#fbbf241a}.bg-gold-400\/5{background-color:#fbbf240d}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-400\/10{background-color:#4ade801a}.bg-green-400\/5{background-color:#4ade800d}.bg-green-500\/80{background-color:#22c55ecc}.bg-gridline{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-purple-400\/10{background-color:#c084fc1a}.bg-red-400\/5{background-color:#f871710d}.bg-red-500\/80{background-color:#ef4444cc}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/20{background-color:#1e293b33}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/90{background-color:#020617e6}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-surface\/10{background-color:#0f172a1a}.bg-surface\/20{background-color:#0f172a33}.bg-surface\/30{background-color:#0f172a4d}.bg-surface\/50{background-color:#0f172a80}.bg-surface\/70{background-color:#0f172ab3}.bg-surface\/90{background-color:#0f172ae6}.bg-transparent{background-color:transparent}.bg-void{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-void\/30{background-color:#0206174d}.bg-void\/50{background-color:#02061780}.bg-void\/70{background-color:#020617b3}.bg-void\/80{background-color:#020617cc}.bg-void\/90{background-color:#020617e6}.bg-void\/95{background-color:#020617f2}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/80{background-color:#eab308cc}.bg-\[radial-gradient\(ellipse_at_top\,_var\(--tw-gradient-stops\)\)\]{background-image:radial-gradient(ellipse at top,var(--tw-gradient-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-cyan-300{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/10{--tw-gradient-from: rgb(103 232 249 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/5{--tw-gradient-from: rgb(103 232 249 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/80{--tw-gradient-from: rgb(103 232 249 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400{--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400\/5{--tw-gradient-from: rgb(34 211 238 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500\/\[0\.04\]{--tw-gradient-from: rgb(6 182 212 / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-900\/20{--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-950\/40{--tw-gradient-from: rgb(8 51 68 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(8 51 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gold-400\/5{--tw-gradient-from: rgb(251 191 36 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-400\/5{--tw-gradient-from: rgb(74 222 128 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from: #020617 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-surface\/50{--tw-gradient-from: rgb(15 23 42 / .5) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-void\/60{--tw-gradient-from: rgb(2 6 23 / .6) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-cyan-500{--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #06b6d4 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gold-400\/30{--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(251 191 36 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #0f172a var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/30{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/40{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .4) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/60{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .6) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-transparent{--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #020617 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void\/25{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(2 6 23 / .25) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-cyan-300\/10{--tw-gradient-to: rgb(103 232 249 / .1) var(--tw-gradient-to-position)}.to-cyan-400{--tw-gradient-to: #22d3ee var(--tw-gradient-to-position)}.to-cyan-950\/20{--tw-gradient-to: rgb(8 51 68 / .2) var(--tw-gradient-to-position)}.to-gold-400{--tw-gradient-to: #fbbf24 var(--tw-gradient-to-position)}.to-slate-400{--tw-gradient-to: #94a3b8 var(--tw-gradient-to-position)}.to-slate-950{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-void{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-white\/70{--tw-gradient-to: rgb(255 255 255 / .7) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.fill-foreground{fill:hsl(var(--foreground))}.fill-primary{fill:hsl(var(--primary))}.object-cover{-o-object-fit:cover;object-fit:cover}.\!p-5{padding:1.25rem!important}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-32{padding-top:8rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.font-sans{font-family:Inter,system-ui,-apple-system,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-8xl{font-size:6rem;line-height:1}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.05\]{line-height:1.05}.leading-\[1\.1\]{line-height:1.1}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-background{color:hsl(var(--background))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-cyan-100\/70{color:#cffafeb3}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-300\/20{color:#67e8f933}.text-cyan-300\/80{color:#67e8f9cc}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-destructive{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-gold-200\/60{color:#fde68a99}.text-gold-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-gold-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-gold-400\/60{color:#fbbf2499}.text-gold-400\/80{color:#fbbf24cc}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-secondary{color:hsl(var(--secondary))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-secondary\/80{color:hsl(var(--secondary) / .8)}.text-secondary\/90{color:hsl(var(--secondary) / .9)}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-void{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.placeholder-cyan-300\/60::-moz-placeholder{color:#67e8f999}.placeholder-cyan-300\/60::placeholder{color:#67e8f999}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(103\,232\,249\,0\.35\)\]{--tw-shadow: 0 0 12px rgba(103,232,249,.35);--tw-shadow-colored: 0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_30px_rgba\(34\,211\,238\,0\.3\)\]{--tw-shadow: 0 0 30px rgba(34,211,238,.3);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.5\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.5);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.8\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.8);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-deep{--tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, .5);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-cyan-300\/20{--tw-shadow-color: rgb(103 232 249 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-400\/20{--tw-shadow-color: rgb(34 211 238 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur: blur(100px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[120px\]{--tw-blur: blur(120px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-bottom-8{--tw-enter-translate-y: 2rem}.duration-100{animation-duration:.1s}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.duration-700{animation-duration:.7s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.animate-pulse-dot{animation:pulse-dot 2s ease-in-out infinite}.animate-gradient-xy{background-size:200% 200%;animation:gradient-xy 6s ease-in-out infinite}.\[--cell-size\:--spacing\(8\)\]{--cell-size: var(--spacing(8))}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}@keyframes gradient-xy{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#020617}::-webkit-scrollbar-thumb{background:#1e293b;border-radius:5px;border:2px solid #020617}::-webkit-scrollbar-thumb:hover{background:#334155}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.card-surface,.prose{opacity:1;transform:none;transition:none}}@media(forced-colors:active){.text-gradient-cyan,.text-gradient-gold{color:CanvasText!important}}.marker\:text-cyan-300\/60 *::marker{color:#67e8f999}.marker\:text-cyan-300\/60::marker{color:#67e8f999}.selection\:bg-cyan-400\/30 *::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30 *::selection{background-color:#22d3ee4d}.selection\:bg-primary *::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary *::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground *::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground *::selection{color:hsl(var(--primary-foreground))}.selection\:bg-cyan-400\/30::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30::selection{background-color:#22d3ee4d}.selection\:bg-primary::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground::selection{color:hsl(var(--primary-foreground))}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:mt-0:last-child{margin-top:0}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-cyan-300\/30:hover{border-color:#67e8f94d}.hover\:border-cyan-300\/40:hover{border-color:#67e8f966}.hover\:border-cyan-400\/30:hover{border-color:#22d3ee4d}.hover\:border-cyan-400\/40:hover{border-color:#22d3ee66}.hover\:border-cyan-500\/30:hover{border-color:#06b6d44d}.hover\:border-cyan-500\/40:hover{border-color:#06b6d466}.hover\:border-red-900\/30:hover{border-color:#7f1d1d4d}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300:hover{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300\/10:hover{background-color:#67e8f91a}.hover\:bg-cyan-300\/20:hover{background-color:#67e8f933}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gold-400\/10:hover{background-color:#fbbf241a}.hover\:bg-gold-400\/20:hover{background-color:#fbbf2433}.hover\:bg-green-400\/20:hover{background-color:#4ade8033}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-950\/20:hover{background-color:#450a0a33}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/50:hover{background-color:#1e293b80}.hover\:bg-slate-900\/40:hover{background-color:#0f172a66}.hover\:bg-surface:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-surface\/20:hover{background-color:#0f172a33}.hover\:bg-surface\/30:hover{background-color:#0f172a4d}.hover\:bg-surface\/40:hover{background-color:#0f172a66}.hover\:bg-surface\/60:hover{background-color:#0f172a99}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-cyan-100:hover{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.hover\:text-cyan-200:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.hover\:text-cyan-300:hover{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.hover\:text-emerald-300:hover{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:fixed:focus{position:fixed}.focus\:left-4:focus{left:1rem}.focus\:top-4:focus{top:1rem}.focus\:z-10:focus{z-index:10}.focus\:z-\[100\]:focus{z-index:100}.focus\:rounded-lg:focus{border-radius:var(--radius)}.focus\:border-cyan-300\/50:focus{border-color:#67e8f980}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-cyan-300:focus{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:font-semibold:focus{font-weight:600}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-void:focus{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color: hsl(var(--destructive) / .2)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: hsl(var(--ring) / .5)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-cyan-300\/20:disabled{background-color:#67e8f933}.disabled\:text-muted\/20:disabled{color:hsl(var(--muted) / .2)}.disabled\:text-void\/40:disabled{color:#02061766}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:border-cyan-300\/30{border-color:#67e8f94d}.group:hover .group-hover\:bg-cyan-300\/20{background-color:#67e8f933}.group:hover .group-hover\:fill-cyan-300{fill:#67e8f9}.group:hover .group-hover\:stroke-cyan-200{stroke:#a5f3fc}.group:hover .group-hover\:stroke-cyan-300\/40{stroke:#67e8f966}.group:hover .group-hover\:text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\>button\]\:ml-\[-0\.45rem\]:has(>button){margin-left:-.45rem}.has-\[\>button\]\:mr-\[-0\.45rem\]:has(>button){margin-right:-.45rem}.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(>kbd){margin-left:-.35rem}.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(>kbd){margin-right:-.35rem}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:.5rem}.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:.75rem}.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:.75rem}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-width:1px}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:hsl(var(--ring))}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){--tw-border-opacity: 1;border-color:hsl(var(--destructive) / var(--tw-border-opacity, 1))}.has-\[\>svg\]\:p-0:has(>svg){padding:0}.has-\[\>svg\]\:px-2:has(>svg){padding-left:.5rem;padding-right:.5rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color: hsl(var(--ring) / .5)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color: hsl(var(--destructive) / .2)}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start{align-self:flex-start}.group\/field:has([data-orientation=horizontal]) .group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance{text-wrap:balance}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pb-2\.5{padding-bottom:.625rem}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pt-2\.5{padding-top:.625rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{left:0;right:0}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{top:0;bottom:0}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{left:0;right:0}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:0}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:0}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:0}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:0}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:6rem}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:6rem}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:.375rem}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[size\=default\]\:h-9[data-size=default]{height:2.25rem}.data-\[size\=sm\]\:h-8[data-size=sm]{height:2rem}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom],.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:11rem}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:.375rem}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical],.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:.75rem}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) - 2px)}.data-\[selected\=true\]\:rounded-none[data-selected=true],.data-\[spacing\=0\]\:rounded-none[data-spacing="0"]{border-radius:0}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-variant=outline][data-spacing="0"]{border-left-width:0px}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-width:1px}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:hsl(var(--ring))}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:hsl(var(--primary))}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:hsl(var(--accent) / .5)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:hsl(var(--primary))}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:hsl(var(--accent))}.data-\[range-start\=true\]\:bg-primary[data-range-start=true],.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:hsl(var(--primary))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:.875rem;line-height:1.25rem}.data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:1rem;line-height:1.5rem}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:hsl(var(--accent-foreground))}.data-\[error\=true\]\:text-destructive[data-error=true],.data-\[invalid\=true\]\:text-destructive[data-invalid=true]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:hsl(var(--primary-foreground))}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:hsl(var(--accent-foreground))}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true],.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:hsl(var(--primary-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[spacing\=0\]\:shadow-none[data-spacing="0"]{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline][data-spacing=default],.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color: hsl(var(--ring) / .5)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot=select-value]>*{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\*\:data-\[slot\=select-value\]\:flex[data-slot=select-value]>*{display:flex}.\*\:data-\[slot\=select-value\]\:items-center[data-slot=select-value]>*{align-items:center}.\*\:data-\[slot\=select-value\]\:gap-2[data-slot=select-value]>*{gap:.5rem}.\*\:data-\[slot\=alert-description\]\:text-destructive\/90[data-slot=alert-description]>*{color:hsl(var(--destructive) / .9)}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[spacing\=0\]\:first\:rounded-l-md:first-child[data-spacing="0"]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l:first-child[data-variant=outline][data-spacing="0"]{border-left-width:1px}.data-\[spacing\=0\]\:last\:rounded-r-md:last-child[data-spacing="0"]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[active\=true\]\:hover\:bg-accent:hover[data-active=true],.data-\[state\=open\]\:hover\:bg-accent:hover[data-state=open]{background-color:hsl(var(--accent))}.data-\[active\=true\]\:focus\:bg-accent:focus[data-active=true]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:focus\:bg-accent:focus[data-state=open]{background-color:hsl(var(--accent))}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant=destructive]{background-color:hsl(var(--destructive) / .1)}.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.group[data-disabled=true] .group-data-\[disabled\=true\]\:pointer-events-none{pointer-events:none}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:relative{position:relative}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:top-full{top:100%}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:z-10{z-index:10}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group\/field-group[data-variant=outline] .group-data-\[variant\=outline\]\/field-group\:-mb-2{margin-bottom:-.5rem}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5{margin-top:.375rem}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block{display:block}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:border-ring{border-color:hsl(var(--ring))}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:bg-popover{background-color:hsl(var(--popover))}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center,.group\/drawer-content[data-vaul-drawer-direction=top] .group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center{text-align:center}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground{color:hsl(var(--popover-foreground))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group\/field[data-disabled=true] .group-data-\[disabled\=true\]\/field\:opacity-50,.group\/input-group[data-disabled=true] .group-data-\[disabled\=true\]\/input-group\:opacity-50,.group[data-disabled=true] .group-data-\[disabled\=true\]\:opacity-50{opacity:.5}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-\[3px\]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:duration-200{transition-duration:.2s;animation-duration:.2s}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.prose-headings\:font-bold :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:700}.prose-headings\:tracking-tight :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){letter-spacing:-.025em}.prose-a\:text-cyan-300 :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-code\:rounded-md :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) - 2px)}.prose-code\:bg-cyan-950\/30 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#0833444d}.prose-code\:px-1\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.375rem;padding-right:.375rem}.prose-code\:py-0\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.125rem;padding-bottom:.125rem}.prose-code\:text-cyan-200 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.prose-pre\:border :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-pre\:border-slate-800 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.prose-pre\:bg-slate-950\/80 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#020617cc}.prose-img\:rounded-xl :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) + 4px)}.prose-img\:border :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-img\:border-slate-800 :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-input:is(.dark *){border-color:hsl(var(--input))}.dark\:bg-destructive\/60:is(.dark *){background-color:hsl(var(--destructive) / .6)}.dark\:bg-input\/30:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:text-muted-foreground:is(.dark *){color:hsl(var(--muted-foreground))}.dark\:hover\:bg-accent\/50:hover:is(.dark *){background-color:hsl(var(--accent) / .5)}.dark\:hover\:bg-input\/50:hover:is(.dark *){background-color:hsl(var(--input) / .5)}.dark\:hover\:text-accent-foreground:hover:is(.dark *){color:hsl(var(--accent-foreground))}.dark\:focus-visible\:ring-destructive\/40:focus-visible:is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:has([data-slot][aria-invalid=true]):is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:data-\[state\=active\]\:border-input[data-state=active]:is(.dark *){border-color:hsl(var(--input))}.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]:is(.dark *){background-color:hsl(var(--primary))}.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state=checked]:is(.dark *){background-color:hsl(var(--primary-foreground))}.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state=unchecked]:is(.dark *){background-color:hsl(var(--foreground))}.dark\:data-\[state\=unchecked\]\:bg-input\/80[data-state=unchecked]:is(.dark *){background-color:hsl(var(--input) / .8)}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]:is(.dark *){color:hsl(var(--foreground))}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant=destructive]:is(.dark *){background-color:hsl(var(--destructive) / .2)}@media not all and (min-width:640px){.max-sm\:opacity-100{opacity:1}}@media(min-width:640px){.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:hidden{display:none}.sm\:min-w-\[80px\]{min-width:80px}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:gap-4{gap:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pl-2\.5{padding-left:.625rem}.sm\:pr-2\.5{padding-right:.625rem}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:24rem}}@media(min-width:768px){.md\:absolute{position:absolute}.md\:mx-0{margin-left:0;margin-right:0}.md\:mb-16{margin-bottom:4rem}.md\:ml-8{margin-left:2rem}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:gap-1\.5{gap:.375rem}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.md\:divide-white\/5>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.md\:p-12{padding:3rem}.md\:p-6{padding:1.5rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:text-left{text-align:left}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-7xl{font-size:4.5rem;line-height:1}.md\:text-9xl{font-size:8rem;line-height:1}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}.md\:opacity-0{opacity:0}.md\:after\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:gap-8{gap:2rem}.lg\:text-6xl{font-size:3.75rem;line-height:1}.lg\:text-7xl{font-size:4.5rem;line-height:1}}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none>*:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>*:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0>*:not(:first-child){border-left-width:0px}.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>*:not(:first-child){border-top-width:0px}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>*:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none>*:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:focus-visible\:relative:focus-visible>*{position:relative}.\[\&\>\*\]\:focus-visible\:z-10:focus-visible>*{z-index:10}.\[\&\>\*\]\:data-\[slot\=field\]\:p-4[data-slot=field]>*{padding:1rem}.\[\&\>\.sr-only\]\:w-auto>.sr-only{width:auto}.\[\&\>\[data-slot\=field-group\]\]\:gap-4>[data-slot=field-group]{gap:1rem}.\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:1 1 auto}.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md>[data-slot=select-trigger]:last-of-type:has(select[aria-hidden=true]:last-child){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=w-]){width:-moz-fit-content;width:fit-content}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>a\:hover\]\:text-primary>a:hover{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>input\]\:flex-1>input{flex:1 1 0%}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3>input:has(>[data-align=block-end]){padding-top:.75rem}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3>input:has(>[data-align=block-start]){padding-bottom:.75rem}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2>input:has(>[data-align=inline-end]){padding-right:.5rem}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2>input:has(>[data-align=inline-start]){padding-left:.5rem}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:1rem;height:1rem}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:.75rem;height:.75rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{-o-object-fit:cover;object-fit:cover}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:hsl(var(--muted-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:transparent}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:hsl(var(--background) / .2)}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:hsl(var(--background))}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:hsl(var(--background) / .1)}[data-variant=legend]+.\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:-.375rem}a.\[a\&\]\:hover\:bg-accent:hover{background-color:hsl(var(--accent))}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:hsl(var(--secondary) / .9)}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))} diff --git a/assets/index-B9kEGiWi.js b/assets/index-B9kEGiWi.js deleted file mode 100644 index 5854d094..00000000 --- a/assets/index-B9kEGiWi.js +++ /dev/null @@ -1,3 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/About-DorgToxb.js","assets/vendor-react-BiHfrq0e.js","assets/vendor-gsap-a3sj5zmn.js","assets/vendor-PiU4YGcH.js","assets/vendor-md-CLKxNZoa.js","assets/vendor-md-dRWncRqa.css","assets/vendor-ui-B0ssGG4c.js","assets/Decoder-DKEd4jAQ.js","assets/NeuralReveal-BflyZYSb.js","assets/Workbench-DVV9vcVI.js","assets/releases-DiQz_IDu.js","assets/McpServer-DVGceqba.js","assets/ClaudePlugin-BeNgMSb2.js","assets/Blog-BcO2ftSu.js","assets/blogData-OjR2ZtNr.js","assets/BlogPost-BD36pT-C.js","assets/Pricing-DIy3-kFX.js","assets/faqData-CCPvMSkf.js","assets/PricingFR-DVFFUe5q.js","assets/Commercial-CHRl50uZ.js","assets/Contact-DxkfRI_A.js","assets/CalendlyWidget-BuhQfp2_.js","assets/License-CUAefKwM.js","assets/Privacy-C1rLQMC9.js","assets/Terms-DxyQtSpQ.js","assets/TermsFR-DFr5huZJ.js","assets/Refund-DgWFKD0E.js","assets/Founder-jWl4MVYA.js","assets/Evidence-Cjd1QxOO.js","assets/Changelog-DKAmnRzh.js","assets/TechnicalReference-DNqYMsCV.js","assets/Docs-D2qi4UVs.js","assets/Installer-o7IM3q6A.js","assets/Manual-Cd4jvvKA.js","assets/Success-CysFhypv.js","assets/NotFound-Ceu7jCqq.js"])))=>i.map(i=>d[i]); -import{r as c,j as e,c as X}from"./vendor-react-BiHfrq0e.js";import{z,L as j,R as Z,A as f,B as ee}from"./vendor-PiU4YGcH.js";import{S as Q,C as te,a as re,b as se,R as ae,c as ne,d as oe,F as ie,B as le,P as ce,M as de,e as xe}from"./vendor-ui-B0ssGG4c.js";import{g as $,S as me}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))t(l);new MutationObserver(l=>{for(const d of l)if(d.type==="childList")for(const h of d.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&t(h)}).observe(document,{childList:!0,subtree:!0});function i(l){const d={};return l.integrity&&(d.integrity=l.integrity),l.referrerPolicy&&(d.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?d.credentials="include":l.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function t(l){if(l.ep)return;l.ep=!0;const d=i(l);fetch(l.href,d)}})();const he="modulepreload",pe=function(n){return"/"+n},V={},b=function(s,i,t){let l=Promise.resolve();if(i&&i.length>0){let u=function(x){return Promise.all(x.map(_=>Promise.resolve(_).then(N=>({status:"fulfilled",value:N}),N=>({status:"rejected",reason:N}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),p=h?.nonce||h?.getAttribute("nonce");l=u(i.map(x=>{if(x=pe(x),x in V)return;V[x]=!0;const _=x.endsWith(".css"),N=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${N}`))return;const E=document.createElement("link");if(E.rel=_?"stylesheet":he,_||(E.as="script"),E.crossOrigin="",E.href=x,p&&E.setAttribute("nonce",p),document.head.appendChild(E),_)return new Promise((P,L)=>{E.addEventListener("load",P),E.addEventListener("error",()=>L(new Error(`Unable to preload CSS for ${x}`)))})}))}function d(h){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=h,window.dispatchEvent(p),!p.defaultPrevented)throw h}return l.then(h=>{for(const p of h||[])p.status==="rejected"&&d(p.reason);return s().catch(d)})},B=[{label:"Platform",href:"/"},{label:"Decoder",href:"/decoder"},{label:"Claude Plugin",href:"/claude-plugin"},{label:"Workbench",href:"/workbench"},{label:"MCP Server",href:"/mcp-server"},{label:"Evidence",href:"/evidence"},{label:"Blog",href:"/blog"},{label:"Pricing",href:"/pricing"},{label:"Contact",href:"/contact"}];function ue(){const[n,s]=c.useState(!1),[i,t]=c.useState(!1),[l,d]=c.useState(!1),h=z(),p=c.useCallback(()=>{const x=window.scrollY;d(x>50),x>200?t(x>window.lastScrollY):t(!1),window.lastScrollY=x},[]);c.useEffect(()=>(window.addEventListener("scroll",p,{passive:!0}),()=>window.removeEventListener("scroll",p)),[p]),c.useEffect(()=>{s(!1)},[h]),c.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n]),c.useEffect(()=>{if(!n)return;const x=_=>{_.key==="Escape"&&s(!1)};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[n]);const u=x=>x==="/"?h.pathname==="/":h.pathname===x;return e.jsxs(e.Fragment,{children:[e.jsxs("nav",{"aria-label":"Main",className:`fixed top-4 left-1/2 -translate-x-1/2 z-50 w-[95%] max-w-6xl transition-all duration-500 ease-out ${i&&!n?"-translate-y-[140%]":"translate-y-0"}`,inert:i&&!n,children:[e.jsx("div",{className:`glass-nav rounded-2xl px-4 sm:px-6 py-3 transition-all duration-300 ${l?"shadow-deep":""}`,children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(j,{to:"/",className:"flex items-center gap-2.5 text-cyan-300 hover:text-cyan-100 transition-colors",children:e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"36",height:"36",className:"h-9 w-9 rounded-lg object-cover"})}),e.jsx("div",{className:"hidden lg:flex items-center gap-1",children:B.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`px-3 py-2 rounded-lg text-sm font-medium transition-all duration-300 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,children:x.label},x.href))}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(j,{to:"/pricing",className:"hidden sm:inline-flex items-center px-4 py-2 border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all duration-300",children:"Get License"}),e.jsxs("button",{onClick:()=>s(!n),className:"lg:hidden flex flex-col items-center justify-center gap-1.5 p-2 min-h-[44px] min-w-[44px] rounded-lg hover:bg-white/5 transition-colors","aria-label":h.pathname.startsWith("/fr/")?n?"Fermer le menu":"Ouvrir le menu":n?"Close menu":"Open menu","aria-expanded":n,"aria-controls":"mobile-menu",children:[e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"rotate-45 translate-y-2":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"opacity-0":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"-rotate-45 -translate-y-2":""}`})]})]})]})}),e.jsx("div",{id:"mobile-menu","aria-hidden":!n,className:`lg:hidden mt-2 glass-nav rounded-2xl overflow-hidden transition-all duration-300 ${n?"max-h-[calc(100dvh-110px)] overflow-y-auto opacity-100 visible":"max-h-0 opacity-0 invisible"}`,children:e.jsxs("div",{className:"px-4 py-3 space-y-1",children:[B.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`flex items-center px-4 py-3 min-h-[44px] rounded-lg text-sm font-medium transition-all duration-200 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,onClick:()=>s(!1),children:x.label},x.href)),e.jsx(j,{to:"/pricing",className:"sm:hidden mt-2 text-center px-4 py-3 min-h-[44px] flex items-center justify-center border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all",onClick:()=>s(!1),children:"Get License"})]})})]}),n&&e.jsx("div",{className:"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm lg:hidden",onClick:()=>s(!1)})]})}const D={version:"1.0.0",pypiPackage:"qector-decoder-v3",contactEndpoint:void 0,ogImage:"https://qector.store/images/og-banner.png"},mt="https://calendly.com/qector-info/30min?background_color=0e0d0d&text_color=ffffff&primary_color=0e4088";async function fe(){try{const s=await(await fetch("https://pypi.org/rss/project/qector-decoder-v3/releases.xml")).text(),d=(new DOMParser().parseFromString(s,"text/xml").querySelector("item title")?.textContent||"").match(/qector-decoder-v3\s+([\d.]+)/);return d?d[1]:D.version}catch{return D.version}}function H(){const[n,s]=c.useState(D.version),[i,t]=c.useState(!0);return c.useEffect(()=>{let l=!0;return fe().then(d=>{l&&(s(d),t(!1))}),()=>{l=!1}},[]),{version:n,loading:i}}const ge=[{label:"QECTOR Decoder v3",href:"/decoder",badge:"Library"},{label:"Claude Code Plugin",href:"/claude-plugin",badge:"Claude"},{label:"Workbench GUI",href:"/workbench",badge:"Desktop App"},{label:"QECTOR MCP Server",href:"/mcp-server",badge:"MCP"},{label:"Installer & App Bundles",href:"/installer"},{label:"Pricing & Licensing",href:"/pricing"}],be=[{label:"Evidence & Reports",href:"/evidence"},{label:"Technical Reference",href:"/technical-reference"},{label:"Package User Manual",href:"/manual"},{label:"Documentation Hub",href:"/docs"},{label:"Version Changelog",href:"/changelog"}],ye=[{label:"About QECTOR",href:"/about"},{label:"Guillaume Lessard (Founder)",href:"/guillaume-lessard"},{label:"iD01t Productions"},{label:"Commercial Licensing",href:"/commercial"},{label:"Contact Engineering",href:"/contact"},{label:"EULA & License",href:"/license"},{label:"Terms of Service",href:"/terms"},{label:"Privacy Policy",href:"/privacy"},{label:"Refund Policy",href:"/refund"}];function I({href:n,external:s,badge:i,children:t}){const l="group flex items-center justify-between gap-3 min-h-[44px] py-1.5 text-secondary hover:text-cyan-300 text-sm transition-colors duration-200",d=e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"group-hover:translate-x-0.5 transition-transform duration-200",children:t}),i&&e.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded bg-surface border border-gridline text-muted-foreground group-hover:border-cyan-300/30 group-hover:text-cyan-300 transition-colors",children:i})]});return n?s?e.jsxs("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:l,children:[d,e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}):e.jsx(j,{to:n,className:l,children:d}):e.jsx("span",{className:l,children:d})}function je(){const{version:n}=H();return e.jsxs("footer",{className:"border-t border-cyan-900/40 bg-void/95 relative overflow-hidden text-left",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-1/2 h-16 bg-gradient-to-b from-cyan-400/5 to-transparent blur-3xl pointer-events-none"}),e.jsx("div",{className:"section-padding py-16 relative z-10",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12 lg:gap-8",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[e.jsxs(j,{to:"/",className:"inline-flex items-center gap-3 text-cyan-300 hover:text-cyan-100 transition-colors duration-200",children:[e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"40",height:"40",className:"h-10 w-10 rounded-lg object-cover"}),e.jsxs("span",{className:"text-lg font-extrabold tracking-tight text-white",children:["QECTOR",e.jsx("span",{className:"text-cyan-300",children:"."})]})]}),e.jsx("p",{className:"text-secondary/80 text-sm leading-relaxed max-w-sm",children:"Quantum error correction decoding for Python. Built by Guillaume Lessard at iD01t Productions."}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] text-muted-foreground hover:text-cyan-300 transition-colors","aria-label":"PyPI",children:[e.jsxs("span",{className:"text-sm font-mono border border-gridline rounded px-2 py-1 hover:border-cyan-300/30",children:["v",n]}),e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"GitHub",children:["GitHub",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"ORCID",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Platform"}),e.jsx("div",{className:"flex flex-col gap-1",children:ge.map(s=>e.jsx(I,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Research & Docs"}),e.jsx("div",{className:"flex flex-col gap-1",children:be.map(s=>e.jsx(I,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Company"}),e.jsx("div",{className:"flex flex-col gap-1",children:ye.slice(0,5).map(s=>e.jsx(I,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]})]}),e.jsxs("div",{className:"mt-16 pt-8 border-t border-gridline flex flex-col md:flex-row items-start md:items-center justify-between gap-6",children:[e.jsxs("div",{className:"text-xs text-muted-foreground max-w-xl leading-relaxed",children:[e.jsx("span",{className:"font-semibold text-secondary",children:"Distribution:"})," PyPI (",e.jsx("code",{className:"text-cyan-300/80 font-mono",children:"qector-decoder-v3"}),") is the Python library. The free ",e.jsx(j,{to:"/installer",className:"link-accent",children:"Workbench GUI"})," is a standalone desktop application shipped self-contained for Windows x64 and Linux x64 (no system Python required)."]}),e.jsxs("nav",{"aria-label":"Legal",className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs font-medium text-muted-foreground",children:[e.jsx(j,{to:"/privacy",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Privacy"}),e.jsx(j,{to:"/terms",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Terms"}),e.jsx(j,{to:"/refund",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Refund"}),e.jsx(j,{to:"/license",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"License"}),e.jsxs("a",{href:"/.well-known/security.txt",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:["Security",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]})]})}),e.jsx("div",{className:"bg-[#050b14]",children:e.jsx("div",{className:"section-padding py-4",children:e.jsxs("div",{className:"max-w-7xl mx-auto text-xs text-muted-foreground/70 text-center md:text-left",children:["© 2026 QECTOR Lab / iD01t Productions. All rights reserved.",e.jsx("div",{className:"mt-1",children:"Éditeur : Guillaume Lessard, entrepreneur individuel (iD01t Productions), 2004 De Lorimier, Longueuil, QC J4K 3H7, Canada · admin@qector.store"})]})})})]})}function ve({children:n}){const s=z();return c.useEffect(()=>{window.scrollTo(0,0),document.documentElement.lang=s.pathname.startsWith("/fr/")?"fr":"en",document.getElementById("main-content")?.focus();const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t=(h=document)=>{h.querySelectorAll(".card-surface:not(.revealed), .prose:not(.revealed)").forEach(p=>{i?p.classList.add("revealed"):l.observe(p)})},l=new IntersectionObserver(h=>{h.forEach(p=>{p.isIntersecting&&(p.target.classList.add("revealed"),l.unobserve(p.target))})},{threshold:.1,rootMargin:"0px 0px -10% 0px"});let d=null;return i||(d=new MutationObserver(h=>{h.forEach(p=>{p.addedNodes.forEach(u=>{u.nodeType===Node.ELEMENT_NODE&&t(u)})})}),d.observe(document.body,{childList:!0,subtree:!0})),t(),()=>{l.disconnect(),d&&d.disconnect()}},[s.pathname]),e.jsxs("div",{className:"min-h-screen bg-void text-foreground quantum-grid-bg relative",children:[e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-cyan-300 focus:text-void focus:font-semibold focus:rounded-lg",children:s.pathname.startsWith("/fr/")?"Aller au contenu principal":"Skip to main content"}),e.jsx(ue,{}),e.jsx("main",{id:"main-content",tabIndex:-1,className:"pt-20 outline-none",children:n}),e.jsx(je,{})]})}class Ne extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(s,i){console.error("QECTOR site error boundary caught:",s,i.componentStack)}handleReload=()=>{this.setState({hasError:!1}),window.location.href="/"};render(){return this.state.hasError?e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-void px-6",children:e.jsxs("div",{className:"max-w-md text-center card-surface",children:[e.jsx("div",{className:"w-12 h-12 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center mx-auto mb-4 text-cyan-300 text-xl",children:"!"}),e.jsx("h1",{className:"text-xl font-bold text-primary mb-2",children:"Something went wrong"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"This page hit an unexpected error. No page data was sent; check the browser console for the local error and reload."}),e.jsx("button",{onClick:this.handleReload,className:"btn-cyan",children:"Reload homepage"})]})}):this.props.children}}function we(){return e.jsx("div",{className:"min-h-[60vh] flex items-center justify-center",role:"status","aria-live":"polite",children:e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 border-2 border-cyan-300/20 border-t-cyan-300 rounded-full animate-spin"}),e.jsx("span",{className:"sr-only",children:"Loading page…"})]})})}const Ee={en:"en_US",fr:"fr_FR"};function ke({title:n="QECTOR · Quantum Error Correction Decoding for Python",description:s="QECTOR Decoder v3 - Rust-core Python quantum error correction decoder. v1.0.0 first stable release with API stability tiers, a qector CLI, and a reproducible benchmark harness (qector bench) for measuring on your own hardware.",ogImage:i=D.ogImage,noindex:t=!1,lang:l="en",alternates:d}){const h=z(),p=`https://qector.store${h.pathname==="/"?"/":`${h.pathname.replace(/\/$/,"")}/`}`;return c.useEffect(()=>{document.title=n,document.documentElement.lang=l;const u=(N,E)=>{let P=document.querySelector(N);if(!P){P=document.createElement("meta");const L=N.includes("property=")?"property":"name",R=N.match(/"([^"]+)"/)?.[1]||"";P.setAttribute(L,R),document.head.appendChild(P)}P.content=E};u('meta[name="description"]',s),u('meta[name="robots"]',t?"noindex, follow":"index, follow, max-image-preview:large"),u('meta[property="og:title"]',n),u('meta[property="og:description"]',s),u('meta[property="og:url"]',p),u('meta[property="og:type"]',"website"),u('meta[property="og:locale"]',Ee[l]??"en_US"),u('meta[property="og:image"]',i),u('meta[property="og:image:alt"]',"QECTOR official logo"),u('meta[property="og:site_name"]',"QECTOR"),u('meta[name="twitter:card"]',"summary_large_image"),u('meta[name="twitter:title"]',n),u('meta[name="twitter:description"]',s),u('meta[name="twitter:image"]',i),u('meta[name="twitter:image:alt"]',"QECTOR official logo"),u('meta[name="twitter:site"]',"@DJiD01T"),u('meta[name="theme-color"]',"#24e7ff");let x=document.querySelector('link[rel="canonical"]');x||(x=document.createElement("link"),x.rel="canonical",document.head.appendChild(x)),x.href=p,document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(N=>N.remove());const _=[];for(const N of d??[]){const E=document.createElement("link");E.rel="alternate",E.hreflang=N.lang,E.href=N.href,document.head.appendChild(E),_.push(E)}return()=>{_.forEach(N=>N.remove())}},[n,s,p,i,t,l,d]),null}function _e({data:n}){const s="json-ld-data";return c.useEffect(()=>{let i=document.getElementById(s);return i||(i=document.createElement("script"),i.id=s,i.type="application/ld+json",document.head.appendChild(i)),i.textContent=JSON.stringify(n),()=>{const t=document.getElementById(s);t&&t.remove()}},[n]),null}function Ce({icon:n,label:s,href:i,variant:t="default",className:l=""}){const d=t==="gold"?"bg-gold-400/10 border border-gold-400/30 text-gold-400 hover:bg-gold-400/20":"bg-surface border border-gridline text-secondary hover:text-cyan-300 hover:border-cyan-300/30";return e.jsxs("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:`inline-flex items-center gap-2 px-4 py-2.5 rounded-full text-sm transition-all duration-300 ${d} ${l}`,children:[e.jsx("span",{"aria-hidden":"true",children:n}),e.jsx("span",{children:s})]})}function F({eyebrow:n,heading:s,description:i,align:t="center",maxWidth:l="max-w-3xl",className:d=""}){const h=t==="center"?"text-center mx-auto":"text-left",p=t==="center"?"mx-auto":"";return e.jsxs("div",{className:`${l} ${h} mb-12 md:mb-16 ${d}`,children:[n&&e.jsx("span",{className:"eyebrow-pill mb-4",children:n}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-balance mb-4",children:s}),i&&e.jsx("p",{className:`text-secondary text-lg leading-relaxed text-pretty max-w-prose ${p}`,children:i})]})}const Pe={cyan:"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20",green:"bg-green-400/10 text-green-400 border border-green-400/20",purple:"bg-purple-400/10 text-purple-400 border border-purple-400/20",gold:"bg-gold-400/10 text-gold-400 border border-gold-400/20"};function Le({title:n,tag:s,badge:i,desc:t,proof:l,muted:d=!1,className:h=""}){return e.jsxs("div",{className:`card-surface group ${d?"border-gridline/50 opacity-80":""} ${h}`,children:[s&&e.jsx("div",{className:"text-muted-foreground text-xs font-mono uppercase tracking-wider mb-2",children:s}),e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e.jsx("h3",{className:`font-semibold text-lg transition-colors ${d?"text-gold-400/80":"text-cyan-300 group-hover:text-cyan-200"}`,children:n}),i&&e.jsx("span",{className:`shrink-0 px-2.5 py-1 rounded-full text-xs font-medium ${d?"bg-gold-400/5 text-gold-400/60 border border-gold-400/20":Pe[i.color]}`,children:i.label})]}),e.jsx("p",{className:`leading-relaxed ${d?"text-muted-foreground text-sm":"text-secondary"}`,children:t}),l&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-gridline/60 flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{className:"text-muted-foreground font-mono",children:l})]})]})}function Re({title:n,statement:s,href:i,linkLabel:t="View evidence →",className:l=""}){return e.jsxs("div",{className:`relative rounded-2xl border border-cyan-300/20 bg-void p-6 overflow-hidden ${l}`,children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none bg-gradient-to-br from-cyan-300/5 to-transparent"}),e.jsxs("div",{className:"relative z-10",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300"}),e.jsx("span",{className:"text-xs font-mono uppercase tracking-wider text-cyan-300",children:n})]}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:s}),i&&e.jsx("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm font-medium hover:underline underline-offset-4",children:t})]})]})}function Se(){const[n,s]=c.useState({}),[i,t]=c.useState({}),[l,d]=c.useState(!1),[h,p]=c.useState(!1),u=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)for(let o=0;o<3;o++)a.push({id:`${r}_${o}`,r,c:o,x:120+o*100,y:60+r*100});return a},[]),x=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)a.push({id:`L_${r}`,type:"L",r,c:-1,x1:30,y1:60+r*100,x2:120,y2:60+r*100});for(let r=0;r<3;r++)a.push({id:`R_${r}`,type:"R",r,c:3,x1:320,y1:60+r*100,x2:410,y2:60+r*100});for(let r=0;r<3;r++)for(let o=0;o<2;o++)a.push({id:`H_${r}_${o}`,type:"H",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+(o+1)*100,y2:60+r*100});for(let r=0;r<2;r++)for(let o=0;o<3;o++)a.push({id:`V_${r}_${o}`,type:"V",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+o*100,y2:60+(r+1)*100});return a},[]),_=c.useMemo(()=>{const a={},r=o=>{a[o]=!a[o]};return x.forEach(o=>{n[o.id]&&(o.type==="H"?(r(`${o.r}_${o.c}`),r(`${o.r}_${o.c+1}`)):o.type==="V"?(r(`${o.r}_${o.c}`),r(`${o.r+1}_${o.c}`)):o.type==="L"?r(`${o.r}_0`):o.type==="R"&&r(`${o.r}_2`))}),Object.keys(a).forEach(o=>{a[o]||delete a[o]}),a},[n,x]),N=a=>{t({}),d(!1),s(r=>({...r,[a]:!r[a]}))},E=()=>{s({}),t({}),d(!1)},P=(a=.2)=>{t({}),d(!1);const r={};x.forEach(o=>{Math.random()Math.abs(a.r-r.r)+Math.abs(a.c-r.c),R=c.useCallback((a,r)=>{const o=[],k=Math.min(a.r,r.r),g=Math.max(a.r,r.r),w=a.r{const a=Object.keys(_).map(g=>{const[w,m]=g.split("_").map(Number);return u.find(y=>y.r===w&&y.c===m)});if(a.length===0){t({}),d(!0);return}const r=g=>{if(g.length===0)return{cost:0,pairs:[]};const w=g[0],m=g.slice(1);let y=1/0,v=[];const C=w.c+1,T=r(m);C+T.costK!==S),q=r(J);W+q.cost{if(g==="L"||g==="R"||w==="L"||w==="R"){const m=g==="L"||g==="R"?w:g;if((g==="L"||g==="R"?g:w)==="L"){for(let v=0;v{k[y]=!0})}),t(k),d(!0)},[_,u,R]),Y=c.useMemo(()=>{if(!l)return"idle";const a=x.filter(m=>{const y=n[m.id]||!1,v=i[m.id]||!1;return y!==v}),r={},o=(m,y)=>{r[m]||(r[m]=[]),r[y]||(r[y]=[]),r[m].push(y),r[y].push(m)};a.forEach(m=>{m.type==="H"?o(`${m.r}_${m.c}`,`${m.r}_${m.c+1}`):m.type==="V"?o(`${m.r}_${m.c}`,`${m.r+1}_${m.c}`):m.type==="L"?o("L",`${m.r}_0`):m.type==="R"&&o("R",`${m.r}_2`)});const k={},g=["L"];k.L=!0;let w=!1;for(;g.length>0;){const m=g.shift();if(m==="R"){w=!0;break}(r[m]||[]).forEach(v=>{k[v]||(k[v]=!0,g.push(v))})}return w?"failure":"success"},[l,n,i,x]);return e.jsxs("div",{className:"flex flex-col gap-4 border border-gridline bg-surface/30 rounded-2xl p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider flex items-center gap-1.5",children:[e.jsx(Q,{className:"w-4 h-4"}),"Interactive QEC Simulator"]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-0.5",children:"Planar stabilizer code (d=3). Click edges to toggle physical errors."})]}),e.jsx("button",{onClick:()=>p(!h),className:"min-h-[44px] min-w-[44px] inline-flex items-center justify-center text-secondary hover:text-cyan-300 transition-colors","aria-label":"Toggle help",children:e.jsx(te,{className:"w-5 h-5"})})]}),h&&e.jsxs("div",{className:"p-4 bg-void/80 border border-gridline rounded-xl text-xs text-secondary leading-relaxed space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"How to play:"})," Click on the links (grey/red lines) to inject physical errors. Red lines represent errors."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Syndromes:"})," Grid nodes measure checks. When adjacent errors are odd, a check triggers (lights up orange)."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Decoder:"})," Minimum Weight Perfect Matching (MWPM) matches active checks. When you click ",e.jsx("span",{className:"text-cyan-300",children:"Run Decoder"}),", it draws matching correction paths in cyan."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Success condition:"})," If error + correction paths do not form a logical connection across boundaries (from left to right), the state is successfully corrected!"]})]}),e.jsxs("div",{className:"bg-void/50 border border-gridline rounded-xl flex items-center justify-center p-4 relative overflow-hidden",children:[e.jsxs("svg",{viewBox:"0 0 440 320",className:"w-full max-w-[440px] h-auto select-none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsxs("defs",{children:[e.jsxs("radialGradient",{id:"activeNodeGlow",cx:"50%",cy:"50%",r:"50%",children:[e.jsx("stop",{offset:"0%",stopColor:"#fef08a"}),e.jsx("stop",{offset:"60%",stopColor:"#eab308"}),e.jsx("stop",{offset:"100%",stopColor:"#a16207"})]}),e.jsxs("linearGradient",{id:"inactiveNodeGlow",x1:"0",y1:"0",x2:"1",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#1e293b"}),e.jsx("stop",{offset:"100%",stopColor:"#0f172a"})]}),e.jsx("pattern",{id:"gridDots",width:"20",height:"20",patternUnits:"userSpaceOnUse",children:e.jsx("circle",{cx:"2",cy:"2",r:"1",fill:"#1e293b",fillOpacity:"0.6"})})]}),e.jsx("rect",{width:"440",height:"320",fill:"url(#gridDots)",rx:"10"}),e.jsx("line",{x1:"30",y1:"30",x2:"30",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"20",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(-90, 20, 165)",className:"font-mono",children:"LEFT BOUNDARY"}),e.jsx("line",{x1:"410",y1:"30",x2:"410",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"420",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(90, 420, 165)",className:"font-mono",children:"RIGHT BOUNDARY"}),x.map(a=>{const r=n[a.id]||!1,o=i[a.id]||!1;let k="#334155";return r&&o?k="#e2e8f0":r?k="#ef4444":o&&(k="#06b6d4"),e.jsxs("g",{className:"group",children:[e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:"transparent",strokeWidth:"16",className:"cursor-pointer",tabIndex:0,role:"checkbox","aria-checked":r,"aria-label":`Toggle error on qubit edge ${a.id}`,onClick:()=>N(a.id),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),N(a.id))}}),e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:k,strokeWidth:r||o?4:2,className:"transition-colors duration-200 pointer-events-none group-hover:stroke-cyan-300/40",style:{filter:r?"drop-shadow(0 0 4px rgba(239, 68, 68, 0.4))":o?"drop-shadow(0 0 4px rgba(6, 182, 212, 0.4))":"none"}}),e.jsx("circle",{cx:(a.x1+a.x2)/2,cy:(a.y1+a.y2)/2,r:"5",fill:r?"#ef4444":o?"#06b6d4":"#1e293b",stroke:r||o?"#e2e8f0":"#475569",strokeWidth:"1.5",className:"transition-colors duration-200 pointer-events-none group-hover:fill-cyan-300 group-hover:stroke-cyan-200"})]},a.id)}),u.map(a=>{const r=_[a.id]||!1;return e.jsxs("g",{children:[r&&e.jsx("circle",{cx:a.x,cy:a.y,r:"18",fill:"rgba(251, 191, 36, 0.15)",className:"animate-pulse"}),e.jsx("circle",{cx:a.x,cy:a.y,r:r?12:9,fill:r?"url(#activeNodeGlow)":"url(#inactiveNodeGlow)",stroke:r?"#fbbf24":"#334155",strokeWidth:r?2:1.5,className:"transition-all duration-300 pointer-events-none",style:{filter:r?"drop-shadow(0 0 10px rgba(251, 191, 36, 0.7))":"none"}}),e.jsx("circle",{cx:a.x-(r?3:2),cy:a.y-(r?3:2),r:r?3:2,fill:"white",fillOpacity:"0.25",className:"pointer-events-none"}),r&&e.jsx("circle",{cx:a.x,cy:a.y,r:20,fill:"transparent",stroke:"#fbbf24",strokeWidth:"1",strokeOpacity:"0.4",className:"animate-ping"}),e.jsx("text",{x:a.x,y:a.y+3,textAnchor:"middle",fill:r?"#020617":"#94a3b8",fontSize:"9",fontWeight:"bold",className:"font-mono text-[9px] pointer-events-none",children:r?"!":"S"})]},a.id)})]}),l&&e.jsxs("div",{className:"absolute bottom-3 left-3 right-3 flex items-center justify-between p-3 bg-surface/90 border border-gridline rounded-xl backdrop-blur-md transition-all duration-300",children:[Y==="success"?e.jsxs("div",{className:"flex items-center gap-2 text-green-400 text-sm font-semibold",children:[e.jsx(re,{className:"w-5 h-5"}),e.jsx("span",{children:"SUCCESS: Errors resolved"})]}):e.jsxs("div",{className:"flex items-center gap-2 text-red-400 text-sm font-semibold",children:[e.jsx(se,{className:"w-5 h-5"}),e.jsx("span",{children:"LOGICAL ERROR: Correction failed"})]}),e.jsx("div",{className:"text-[10px] text-muted-foreground font-mono",children:"d=3 code slice"})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("button",{onClick:()=>P(.2),className:"px-3 py-3 bg-surface hover:bg-white/5 border border-gridline rounded-lg text-xs font-semibold text-secondary hover:text-primary transition-all flex items-center justify-center gap-1.5",children:[e.jsx(Q,{className:"w-3.5 h-3.5"}),"Inject Errors"]}),e.jsxs("button",{onClick:U,disabled:Object.keys(_).length===0,className:"px-3 py-3 bg-cyan-300 disabled:bg-cyan-300/20 disabled:text-void/40 hover:bg-cyan-200 text-void rounded-lg text-xs font-bold transition-all flex items-center justify-center gap-1.5",children:[e.jsx(ae,{className:`w-3.5 h-3.5 ${l?"":"animate-spin"}`}),"Run Decoder"]}),e.jsx("button",{onClick:E,className:"px-3 py-3 bg-surface hover:bg-red-950/20 border border-gridline hover:border-red-900/30 rounded-lg text-xs font-semibold text-secondary hover:text-red-400 transition-all",children:"Reset Graph"})]})]})}function Oe({code:n,language:s="python",filename:i,className:t=""}){const[l,d]=c.useState(!1),h=async()=>{try{await navigator.clipboard.writeText(n),d(!0),setTimeout(()=>d(!1),2e3)}catch(p){console.error("Failed to copy text: ",p)}};return e.jsxs("div",{className:`my-4 border border-gridline rounded-xl overflow-hidden bg-void/50 ${t}`,children:[i&&e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gridline bg-surface/50 text-xs font-mono text-muted-foreground",children:[e.jsx("span",{children:i}),e.jsx("span",{className:"uppercase text-[10px] bg-cyan-300/10 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-300/20",children:s})]}),e.jsxs("div",{className:"relative group",children:[e.jsx("pre",{className:"p-4 pr-14 overflow-x-auto overflow-y-auto font-mono text-sm leading-relaxed text-secondary bg-void/30 max-h-[400px]",children:e.jsx("code",{className:`language-${s}`,children:n})}),e.jsx("button",{onClick:h,className:"absolute top-3 right-3 p-1.5 bg-surface border border-gridline rounded-lg text-secondary hover:text-cyan-300 hover:border-cyan-300/30 opacity-0 group-hover:opacity-100 focus:opacity-100 max-sm:opacity-100 transition-all duration-200","aria-label":l?"Copied":"Copy code",children:l?e.jsx(ne,{className:"w-4 h-4 text-green-400"}):e.jsx(oe,{className:"w-4 h-4"})}),e.jsx("span",{className:"sr-only","aria-live":"polite",children:l?"Code copied to clipboard":""})]})]})}$.registerPlugin(me);function O({value:n,label:s}){return e.jsxs("div",{className:"text-center px-4 py-3",children:[e.jsx("div",{className:"text-2xl font-bold text-cyan-300",children:n}),e.jsx("div",{className:"text-xs text-muted-foreground leading-tight max-w-[11rem] mx-auto",children:s})]})}function De(){const n=c.useRef([]),{version:s}=H();c.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const t=document.createElement("script");t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t);const l=$.context(()=>{n.current.filter(Boolean).forEach(h=>{$.fromTo(h,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power2.out",scrollTrigger:{trigger:h,start:"top 85%",once:!0}})})});return()=>{l.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const i=(t,l)=>{t&&(n.current[l]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(ke,{title:"QECTOR · Quantum Error Correction Decoding for Python",description:"QECTOR Decoder v3 - Rust-core Python library with 17 concrete decoder configurations plus 2 Workbench routing kinds, a syndrome-faithful contract, and reproducible validation guidance."}),e.jsx(_e,{data:{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"QECTOR Decoder v3 is the qector-decoder-v3 1.0.0 Rust/Python quantum error correction package with 17 concrete decoder configurations plus 2 Workbench routing kinds, offline Ed25519 licensing, and reproducible validation guidance.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:s,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://github.com/GuillaumeLessard"},maintainer:{"@type":"Organization",name:"iD01t Productions"},identifier:"https://pypi.org/project/qector-decoder-v3/",license:"https://qector.store/license/",offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}},{"@type":"Organization",name:"QECTOR",url:"https://qector.store/",logo:"https://qector.store/images/logo.png",email:"admin@qector.store",founder:{"@type":"Person",name:"Guillaume Lessard",identifier:"0009-0000-3465-3753"},address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-claude-plugin","https://orcid.org/0009-0000-3465-3753"]}]}}),e.jsxs("section",{className:"relative min-h-screen flex items-center justify-center overflow-hidden","aria-label":"QECTOR hero",children:[e.jsx("img",{src:"/images/hero-bg.webp",alt:"","aria-hidden":"true",fetchPriority:"high",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.45) saturate(1.1)"}}),e.jsx("noscript",{children:e.jsx("img",{src:"/images/og-banner.png",alt:"","aria-hidden":"true",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.4)"}})}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-void/60 via-void/25 to-void z-[1]"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-500/[0.04] to-transparent z-[1]"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-5xl mx-auto px-6 pt-24 pb-20",children:[e.jsxs(j,{to:"/changelog",className:"inline-flex max-w-full flex-wrap items-center justify-center gap-2 px-4 py-2 bg-surface/70 border border-cyan-300/20 rounded-full text-center text-xs leading-relaxed text-cyan-300 hover:bg-cyan-300/10 transition-all mb-8 backdrop-blur-sm",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-green-400 animate-pulse-dot"}),e.jsxs("span",{children:["v",s," · First Stable Release · Changelog →"]})]}),e.jsxs("h1",{className:"max-w-4xl mx-auto break-words text-3xl sm:text-5xl md:text-6xl lg:text-7xl font-extrabold tracking-tight leading-[1.05] mb-6",style:{textShadow:"0 4px 32px rgba(0,0,0,0.9)"},children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"QEC Decoding"})," ","for Python"]}),e.jsxs("p",{className:"text-base sm:text-lg md:text-xl text-secondary/90 max-w-3xl mx-auto mb-5 leading-relaxed break-words",style:{textShadow:"0 2px 16px rgba(0,0,0,0.8)"},children:["The v1.0.0 runtime ships 17 concrete decoder configurations, while Workbench v1.0.7 names 19 kinds in total: those configurations plus AutoDecoder and Auto Router orchestration entries."," ",e.jsx("span",{className:"text-primary font-semibold",children:"v1.0.0 is the first stable release:"})," API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points and the qector CLI."]}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed",style:{textShadow:"0 2px 12px rgba(0,0,0,0.8)"},children:"Local measurement tools are documented for declared workloads; this site publishes no universal performance figures. Claim boundaries and verification paths are published with the product documentation."}),e.jsxs("div",{className:"flex flex-col sm:flex-row flex-wrap gap-3 sm:gap-4 justify-center items-stretch sm:items-center mb-10",children:[e.jsx(j,{to:"/pricing",className:"btn-gold px-8 py-4 text-sm sm:text-base font-bold w-full sm:w-auto",children:"Start $499 Evaluation →"}),e.jsx(j,{to:"/decoder",className:"btn-cyan px-8 py-4 text-sm sm:text-base w-full sm:w-auto",children:"Explore the Decoder"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/latest",className:"btn-outline px-8 py-4 text-sm sm:text-base w-full sm:w-auto",target:"_blank",rel:"noopener noreferrer",children:"Free Workbench GUI"})]}),e.jsx("div",{className:"max-w-2xl mx-auto mb-10 text-left",children:e.jsx(Oe,{language:"bash",filename:"Quick start",code:`pip install qector-decoder-v3==${s} -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 md:divide-x md:divide-white/5 border-t border-white/5 pt-6 max-w-2xl mx-auto",children:[e.jsx(O,{value:"19",label:"Workbench Kinds (17 + 2 routing)"}),e.jsx(O,{value:"GF(2)",label:"Faithfulness Contract"}),e.jsx(O,{value:"CPU + GPU",label:"Optional Execution Paths"}),e.jsx(O,{value:"Open",label:"Evidence Policy"})]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-10 p-5 md:p-6 bg-surface/50 border border-cyan-300/20 rounded-2xl text-center shadow-lg backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] text-cyan-300 font-semibold tracking-[0.2em] mb-2 uppercase",children:"Evidence policy"}),e.jsx("div",{className:"text-lg md:text-xl font-bold text-primary tracking-tight mb-2",children:"No hardware-specific results published"}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed max-w-lg mx-auto",children:["QECTOR publishes contracts, methodology, and artifacts rather than portable speed numbers. Read the ",e.jsx(j,{to:"/evidence",className:"link-accent",children:"evidence policy"})," before generating a local measurement."]})]})]})]}),e.jsx("section",{className:"section-band bg-surface/20 border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill-gold mb-4",children:"Release Assurance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"A Clear Path From Code to Evidence"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"The public release, validation contract, and commercial delivery path are explicit by design."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Current Runtime"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"qector-decoder-v3 1.0.0"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"The live PyPI release supports Python 3.9 through 3.13 with 15 binary wheels across Windows, Linux, and macOS."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Contract"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Correctness before speed"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Every correction is checked against H c = s (mod 2). Measurements stay workload-scoped, artifact-hashed, and separate from universal performance claims."})]}),e.jsxs("div",{className:"card-surface p-6 border-gold-400/20",children:[e.jsx("div",{className:"text-gold-400 font-mono text-xs uppercase tracking-wider mb-3",children:"Secure Delivery"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Signed, traceable licensing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Commercial fulfillment requires a live Stripe event, issues a v2 Ed25519 token, and records independent billing and license delivery states."}),e.jsx(j,{to:"/license",className:"inline-block text-gold-400 text-sm font-medium hover:underline mt-3",children:"Read the license activation procedure →"})]})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Registry"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 text-sm",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Normative reference manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"v1.0.0 user manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Verification and proof bundle"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.22046403"})]})]})]})]})}),e.jsx("section",{className:"section-thin border-t border-b border-gridline/30 bg-void/80",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto text-center",children:[e.jsx("p",{className:"text-xs text-muted-foreground uppercase tracking-widest mb-8",children:"Works with your existing stack"}),e.jsxs("div",{className:"flex flex-wrap justify-center items-center gap-x-12 gap-y-8",children:[e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Stim"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install stim"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Sinter"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install sinter"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Qiskit"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install qiskit-qec"})]})]})]})})}),e.jsx("section",{ref:t=>i(t,0),className:"py-8 bg-void",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-7xl mx-auto flex flex-wrap justify-center gap-3",children:[{icon:e.jsx(ie,{size:16}),label:"Artifacts (GitHub)",href:"https://github.com/GuillaumeLessard/qector-decoder"},{icon:e.jsx(le,{size:16}),label:"Mastering QEC · Google Play",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",gold:!0},{icon:e.jsx(ce,{size:16}),label:`PyPI Wheel v${s}`,href:"https://pypi.org/project/qector-decoder-v3/"},{icon:e.jsx(de,{size:16}),label:"Free Workbench App",href:"/workbench"},{icon:e.jsx(xe,{size:16}),label:"ORCID 0009-0000-3465-3753",href:"https://orcid.org/0009-0000-3465-3753"}].map(t=>e.jsx(Ce,{icon:t.icon,label:t.label,href:t.href,variant:t.gold?"gold":"default"},t.label))})})}),e.jsx("section",{className:"section-band bg-void border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Proof Suite"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"Executable Verification for v1.0.0"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"Hashed-lock reproducible install, CERT_STRICT gate, and Lean/Coq kernel evidence - verifiable against Reference Manual v1.0.0."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reproducible Install"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Hashed-lock & CERT_STRICT"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Proof runs are hashed-locked and gated by CERT_STRICT - no universal benchmark figures, only workload-scoped artifacts."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reference Manual v1.0.0"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"DOI 10.5281/zenodo.21941046"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Normative manual with syndrome-faithfulness foundations, 15 backends, and API stability tiers. All proofs trace to this document."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Lean/Coq Evidence"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Kernel-checked proofs"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Executable suite checks GF(2) invariants and logical cosets with Lean/Coq kernels - evidence, not claims."})]})]}),e.jsxs("div",{className:"text-center mt-8",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-proof",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"View qector-proof on GitHub"}),e.jsx("span",{className:"text-muted-foreground text-xs ml-3",children:"github.com/GuillaumeLessard/qector-proof"})]})]})}),e.jsx("section",{className:"section-feature bg-surface/30 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,1),className:"text-center mb-14",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"How It Works"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"From Installation to Validation"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"QECTOR integrates directly into your existing QEC workflow with minimal friction."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:[{step:"01",title:"Install",desc:"Install the v1.0.0 wheel in a supported Python 3.9-3.13 environment alongside your existing Stim or PyMatching workflow.",detail:"pip install qector-decoder-v3==1.0.0",code:!0},{step:"02",title:"Decode",desc:"Access 17 concrete Rust-accelerated decoder configurations through a unified Python API. Workbench also exposes AutoDecoder and Auto Router as two orchestration kinds, for 19 named kinds in total.",detail:"from qector_decoder_v3 import BlossomDecoder, BpOsdDecoder",code:!0},{step:"03",title:"Validate",desc:"Claims are scoped to a declared workload and backed by SHA-256 sealed artifacts. Run qector-doctor before relying on optional paths and preserve the report with the result.",detail:"evidence policy · SHA-256 sealed",code:!1}].map(t=>e.jsxs("div",{className:"card-surface p-6 relative",children:[e.jsx("div",{className:"text-4xl font-black text-cyan-300/20 absolute top-4 right-4 select-none",children:t.step}),e.jsx("div",{className:"w-10 h-10 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 font-bold text-sm mb-4",children:t.step}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:t.desc}),t.code&&e.jsx("code",{className:"block text-xs bg-void border border-gridline rounded-lg px-3 py-2 text-cyan-300 font-mono overflow-x-auto",children:t.detail}),!t.code&&e.jsx("span",{className:"inline-flex items-center gap-1.5 text-xs text-cyan-300 font-mono bg-cyan-300/5 px-3 py-1.5 rounded-lg border border-cyan-300/10",children:t.detail})]},t.step))})]})}),e.jsxs("section",{id:"platform",className:"section-feature relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:"radial-gradient(circle at center, rgba(103, 232, 249, 0.06) 0%, transparent 70%)"}}),e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("div",{ref:t=>i(t,2),children:e.jsx(F,{eyebrow:"Why QECTOR",heading:"More Than Just MWPM",description:"QEC decoding is not one-size-fits-all. Surface codes, qLDPC codes, optional batch paths, and simulation workloads each demand different decoders. QECTOR documents the supported contracts and the evidence needed to evaluate a selected workload."})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[{title:"Blossom MWPM (Exact)",tag:"Blossom",desc:"Weight-optimal exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes.",proof:"Exact optimal matching · Stim-native"},{title:"qLDPC Support",tag:"BP-OSD (qLDPC)",desc:"Matching decoders are restricted to graphlike structures. BP-OSD handles reachable arbitrary GF(2) check matrices, including LDPC and qLDPC workloads.",proof:"Hyperedge-safe GF(2) path"},{title:"Workload-Scoped Execution",tag:"Union-Find + Optional GPU",desc:"Union-Find and optional GPU batch paths are available for supported workloads. Availability and performance must be verified on the target environment.",proof:"Environment-dependent paths"},{title:"One Library, Pluggable",tag:"Stim · PyMatching · Sinter · Qiskit",desc:"Drop QECTOR into any existing Stim or PyMatching workflow. Same API surface, swappable backend. No vendor lock-in.",proof:"Drop-in, same API surface"}].map((t,l)=>e.jsx("div",{ref:d=>i(d,3+l),children:e.jsx(Le,{title:t.title,tag:t.tag,desc:t.desc,proof:t.proof})},t.title))})]})})]}),e.jsx("section",{id:"decoder-section",className:"section-feature bg-surface/50",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{ref:t=>i(t,7),className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"19 Workbench Kinds · 17 Concrete Configs"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-6",children:"Decoding Algorithms"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"Union-Find, Fast Union-Find, Blossom MWPM, Sparse Blossom, Belief-Matching, BP-OSD, GPU Batch (CUDA/OpenCL), Hybrid, Predecoded, two-stage, ambiguity-cluster, colour-code, space-time, and other concrete paths are exposed through a consistent Python API. Workbench adds the two orchestration kinds, AutoDecoder and Auto Router, to make 19 named kinds."}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[{label:" v1.0.0 First Stable",desc:"API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points, qector CLI + qector-doctor."},{label:" 15 Binary Wheels",desc:"Python 3.9-3.13 across Windows amd64, Linux x86_64, and macOS arm64, released on PyPI."},{label:" GPU Batch Paths",desc:"CUDA and OpenCL batch paths are available for supported hardware and drivers; OpenCL via source build."},{label:" Reproducible Harness",desc:"qector bench ships with the package; measure on your own hardware, no universal figures claimed."}].map(t=>e.jsxs("div",{className:"p-4 bg-void/50 border border-gridline/50 rounded-xl",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-sm mb-1",children:t.label}),e.jsx("div",{className:"text-muted-foreground text-xs leading-relaxed",children:t.desc})]},t.label))}),e.jsxs("div",{className:"flex flex-wrap gap-3 mt-8",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/pypi/v/qector-decoder-v3?style=flat-square&color=24e7ff",alt:"qector-decoder-v3 version on PyPI",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/github/v/release/GuillaumeLessard/qector-decoder?style=flat-square&color=24e7ff",alt:"Latest qector-decoder release on GitHub",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/badge/GitHub-Artifacts-blue?logo=github",alt:"GitHub release artifacts for QECTOR",loading:"lazy"})})]})]}),e.jsx("div",{ref:t=>i(t,8),className:"relative w-full",children:e.jsx(Se,{})})]})})})}),e.jsx("section",{className:"section-feature relative",children:e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,9),children:[e.jsx(F,{eyebrow:"Performance",heading:"Measure on Your Own Hardware"}),e.jsx(Re,{title:"Reproducible Benchmark Harness",statement:"No universal benchmark figures are published on this site, because results depend on your hardware, drivers, and workloads. The qector bench harness ships with the package so you can measure logical error rates and throughput on your own machines.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts →",className:"max-w-3xl mx-auto mb-6"})]}),e.jsx("div",{ref:t=>i(t,10),className:"max-w-3xl mx-auto",children:e.jsxs("div",{className:"p-5 bg-void/50 border border-gridline/50 rounded-xl font-mono text-xs text-muted-foreground leading-relaxed overflow-x-auto",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"}),' pip install "qector-decoder-v3[bench]"']}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector-doctor"]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001"]}),e.jsx("div",{className:"text-green-400 mt-2",children:"✓ Logical error rates and throughput written as reproducible JSON"})]})}),e.jsx("div",{className:"text-center mt-8 flex flex-wrap justify-center gap-3",children:e.jsx(j,{to:"/evidence",className:"btn-outline",children:"Evidence & Reports"})})]})})}),e.jsx("section",{className:"section-band bg-surface/20 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-5xl mx-auto",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-center mb-10",children:"Enterprise Compliance & Licensing"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface border-cyan-300/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-300/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-cyan-300 flex items-center gap-2 mb-4",children:"License Clarity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"The package is source-available under PolyForm Noncommercial 1.0.0 for community use. Commercial use, hosted services, and redistribution require the written scope described on the license and pricing pages."}),e.jsx(j,{to:"/commercial",className:"text-cyan-300 text-sm font-medium hover:underline",children:"Learn about licensing →"})]}),e.jsxs("div",{className:"card-surface border-gold-400/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-gold-400/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-gold-400 flex items-center gap-2 mb-4",children:"Start Your Evaluation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"$499 for a 60-day commercial evaluation. Unlimited internal seats, all decoders, priority support, and full validation artifact access. 100% credit toward any annual license purchased within 90 days of your evaluation start."}),e.jsx(j,{to:"/pricing",className:"btn-gold text-sm",children:"View Pricing & Tiers →"})]})]})]})}),e.jsx("section",{id:"pricing-section",className:"section-feature bg-surface/50 border-t border-gridline",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-xl mx-auto text-center",children:[e.jsxs("div",{ref:t=>i(t,11),className:"mb-6",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl font-bold mb-3",children:"Commercial Evaluation License"}),e.jsx("p",{className:"text-secondary text-sm max-w-md mx-auto",children:"One-time payment · 60-day pilot · Fully creditable toward an annual license bought within 90 days"})]}),e.jsxs("div",{ref:t=>i(t,12),className:"card-surface border-cyan-300/35 neon-border-cyan relative overflow-hidden p-8 rounded-2xl bg-void/80 text-center",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 to-transparent pointer-events-none"}),e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"text-4xl font-extrabold text-primary",children:"$499"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-1",children:"Unlimited internal seats · All decoders · Priority support"})]}),e.jsx("div",{className:"flex justify-center mb-6",children:e.jsxs("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan text-base font-bold py-3.5 px-8 rounded-xl shadow-lg shadow-cyan-300/20 inline-flex items-center gap-2",target:"_blank",rel:"noopener noreferrer",children:[e.jsx("span",{children:"Start 60-Day Evaluation: $499"}),e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),e.jsx("polyline",{points:"12 5 19 12 12 19"})]})]})}),e.jsx("div",{className:"border-t border-gridline/60 pt-4 mt-4 text-left space-y-2",children:["Full QECTOR Decoder v3 (all decoder families)","Written license agreement","Priority email support (2 business day response)","Benchmark artifact package","100% credit toward any annual license purchased within 90 days of your evaluation start"].map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-secondary",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{children:t})]},t))})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-4",children:["Need annual pricing, multi-seat, or OEM? ",e.jsx(j,{to:"/commercial",className:"text-cyan-300 hover:underline",children:"View all tiers →"})]})]})})})]})}const Te=c.lazy(()=>b(()=>import("./About-DorgToxb.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),Ae=c.lazy(()=>b(()=>import("./Decoder-DKEd4jAQ.js"),__vite__mapDeps([7,1,8,2,3,4,5,6]))),qe=c.lazy(()=>b(()=>import("./Workbench-DVV9vcVI.js"),__vite__mapDeps([9,1,8,2,10,3,4,5,6]))),Ie=c.lazy(()=>b(()=>import("./McpServer-DVGceqba.js"),__vite__mapDeps([11,1,8,3,4,5,6,2]))),$e=c.lazy(()=>b(()=>import("./ClaudePlugin-BeNgMSb2.js"),__vite__mapDeps([12,1,8,10,6,3,4,5,2]))),ze=c.lazy(()=>b(()=>import("./Blog-BcO2ftSu.js"),__vite__mapDeps([13,1,14,3,4,5,6,2]))),Me=c.lazy(()=>b(()=>import("./BlogPost-BD36pT-C.js"),__vite__mapDeps([15,1,14,4,3,5,6,2]))),Ge=c.lazy(()=>b(()=>import("./Pricing-DIy3-kFX.js"),__vite__mapDeps([16,1,17,3,4,5,8,2,6]))),We=c.lazy(()=>b(()=>import("./PricingFR-DVFFUe5q.js"),__vite__mapDeps([18,1,17,3,4,5,8,2,6]))),Qe=c.lazy(()=>b(()=>import("./Commercial-CHRl50uZ.js"),__vite__mapDeps([19,1,8,3,4,5,6,2]))),Ve=c.lazy(()=>b(()=>import("./Contact-DxkfRI_A.js"),__vite__mapDeps([20,1,21,2,3,4,5,6]))),Be=c.lazy(()=>b(()=>import("./License-CUAefKwM.js"),__vite__mapDeps([22,1,8,3,4,5,6,2]))),Fe=c.lazy(()=>b(()=>import("./Privacy-C1rLQMC9.js"),__vite__mapDeps([23,1,8,3,4,5,6,2]))),He=c.lazy(()=>b(()=>import("./Terms-DxyQtSpQ.js"),__vite__mapDeps([24,1,8,3,4,5,6,2]))),Ue=c.lazy(()=>b(()=>import("./TermsFR-DFr5huZJ.js"),__vite__mapDeps([25,1,8,3,4,5,6,2]))),Ye=c.lazy(()=>b(()=>import("./Refund-DgWFKD0E.js"),__vite__mapDeps([26,1,8,3,4,5,6,2]))),Je=c.lazy(()=>b(()=>import("./Founder-jWl4MVYA.js"),__vite__mapDeps([27,1,21,3,4,5,6,2]))),Ke=c.lazy(()=>b(()=>import("./Evidence-Cjd1QxOO.js"),__vite__mapDeps([28,1,8,2,10,3,4,5,6]))),Xe=c.lazy(()=>b(()=>import("./Changelog-DKAmnRzh.js"),__vite__mapDeps([29,1,8,10,3,4,5,6,2]))),Ze=c.lazy(()=>b(()=>import("./TechnicalReference-DNqYMsCV.js"),__vite__mapDeps([30,1,8,2,6,3,4,5]))),et=c.lazy(()=>b(()=>import("./Docs-D2qi4UVs.js"),__vite__mapDeps([31,1,8,2,3,4,5,6]))),tt=c.lazy(()=>b(()=>import("./Installer-o7IM3q6A.js"),__vite__mapDeps([32,1,8,3,4,5,6,2]))),rt=c.lazy(()=>b(()=>import("./Manual-Cd4jvvKA.js"),__vite__mapDeps([33,1,6,8,3,4,5,2]))),st=c.lazy(()=>b(()=>import("./Success-CysFhypv.js"),__vite__mapDeps([34,1,8,3,4,5,6,2]))),at=c.lazy(()=>b(()=>import("./NotFound-Ceu7jCqq.js"),__vite__mapDeps([35,1,8,3,4,5,6,2])));function nt(){return e.jsx(Ne,{children:e.jsx(ve,{children:e.jsx(c.Suspense,{fallback:e.jsx(we,{}),children:e.jsxs(Z,{children:[e.jsx(f,{path:"/",element:e.jsx(De,{})}),e.jsx(f,{path:"/about",element:e.jsx(Te,{})}),e.jsx(f,{path:"/decoder",element:e.jsx(Ae,{})}),e.jsx(f,{path:"/workbench",element:e.jsx(qe,{})}),e.jsx(f,{path:"/mcp-server",element:e.jsx(Ie,{})}),e.jsx(f,{path:"/claude-plugin",element:e.jsx($e,{})}),e.jsx(f,{path:"/blog",element:e.jsx(ze,{})}),e.jsx(f,{path:"/blog/:id",element:e.jsx(Me,{})}),e.jsx(f,{path:"/pricing",element:e.jsx(Ge,{})}),e.jsx(f,{path:"/fr/pricing",element:e.jsx(We,{})}),e.jsx(f,{path:"/commercial",element:e.jsx(Qe,{})}),e.jsx(f,{path:"/contact",element:e.jsx(Ve,{})}),e.jsx(f,{path:"/license",element:e.jsx(Be,{})}),e.jsx(f,{path:"/privacy",element:e.jsx(Fe,{})}),e.jsx(f,{path:"/terms",element:e.jsx(He,{})}),e.jsx(f,{path:"/fr/terms",element:e.jsx(Ue,{})}),e.jsx(f,{path:"/refund",element:e.jsx(Ye,{})}),e.jsx(f,{path:"/guillaume-lessard",element:e.jsx(Je,{})}),e.jsx(f,{path:"/evidence",element:e.jsx(Ke,{})}),e.jsx(f,{path:"/changelog",element:e.jsx(Xe,{})}),e.jsx(f,{path:"/technical-reference",element:e.jsx(Ze,{})}),e.jsx(f,{path:"/docs",element:e.jsx(et,{})}),e.jsx(f,{path:"/installer",element:e.jsx(tt,{})}),e.jsx(f,{path:"/manual",element:e.jsx(rt,{})}),e.jsx(f,{path:"/success",element:e.jsx(st,{})}),e.jsx(f,{path:"*",element:e.jsx(at,{})})]})})})})}X.createRoot(document.getElementById("root")).render(e.jsx(c.StrictMode,{children:e.jsx(ee,{children:e.jsx(nt,{})})}));export{Le as A,Oe as C,Re as E,_e as J,Se as Q,ke as S,F as a,mt as b,H as u}; diff --git a/assets/index-BN-vOeL2.js b/assets/index-BN-vOeL2.js deleted file mode 100644 index 417b580d..00000000 --- a/assets/index-BN-vOeL2.js +++ /dev/null @@ -1,3 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/About-dHfyUSjm.js","assets/vendor-react-BiHfrq0e.js","assets/vendor-gsap-a3sj5zmn.js","assets/vendor-PiU4YGcH.js","assets/vendor-md-CLKxNZoa.js","assets/vendor-md-dRWncRqa.css","assets/vendor-ui-B0ssGG4c.js","assets/Decoder-CD04ckwI.js","assets/NeuralReveal-BflyZYSb.js","assets/Workbench-KEHB2TYr.js","assets/releases-DiQz_IDu.js","assets/McpServer-619DB13w.js","assets/ClaudePlugin-ClObfYRc.js","assets/Blog-U8RuDZLO.js","assets/blogData-OjR2ZtNr.js","assets/BlogPost-Cft_Na6k.js","assets/Pricing-DJJSKVoA.js","assets/TrialForm-BIjatKya.js","assets/PricingFR-C6aJLaoB.js","assets/Commercial-C0AKNYqz.js","assets/Contact-CNyl61eI.js","assets/CalendlyWidget-BuhQfp2_.js","assets/License-DHRrrKKE.js","assets/Privacy-C4c3BcJK.js","assets/Terms-C28kGJxx.js","assets/TermsFR-BLz2i-t6.js","assets/Refund-CTEPp265.js","assets/Founder-BJJh0MV8.js","assets/Evidence-Bj6L0ipY.js","assets/Changelog-gIx07919.js","assets/TechnicalReference-CBJ6Ke79.js","assets/Docs-D_KRdt5F.js","assets/Installer-AK92G1y0.js","assets/Manual-BOkG7qye.js","assets/Success-Bv54wCpg.js","assets/NotFound-Xb_C85Aw.js"])))=>i.map(i=>d[i]); -import{r as c,j as e,c as ee}from"./vendor-react-BiHfrq0e.js";import{z as G,L as j,R as te,A as f,B as re}from"./vendor-PiU4YGcH.js";import{S as V,C as se,a as ae,b as ne,R as oe,c as ie,d as le,F as ce,B as de,P as xe,M as me,e as he}from"./vendor-ui-B0ssGG4c.js";import{g as z,S as pe}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))t(l);new MutationObserver(l=>{for(const d of l)if(d.type==="childList")for(const h of d.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&t(h)}).observe(document,{childList:!0,subtree:!0});function i(l){const d={};return l.integrity&&(d.integrity=l.integrity),l.referrerPolicy&&(d.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?d.credentials="include":l.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function t(l){if(l.ep)return;l.ep=!0;const d=i(l);fetch(l.href,d)}})();const ue="modulepreload",fe=function(n){return"/"+n},W={},b=function(s,i,t){let l=Promise.resolve();if(i&&i.length>0){let u=function(x){return Promise.all(x.map(_=>Promise.resolve(_).then(N=>({status:"fulfilled",value:N}),N=>({status:"rejected",reason:N}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),p=h?.nonce||h?.getAttribute("nonce");l=u(i.map(x=>{if(x=fe(x),x in W)return;W[x]=!0;const _=x.endsWith(".css"),N=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${N}`))return;const k=document.createElement("link");if(k.rel=_?"stylesheet":ue,_||(k.as="script"),k.crossOrigin="",k.href=x,p&&k.setAttribute("nonce",p),document.head.appendChild(k),_)return new Promise((P,R)=>{k.addEventListener("load",P),k.addEventListener("error",()=>R(new Error(`Unable to preload CSS for ${x}`)))})}))}function d(h){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=h,window.dispatchEvent(p),!p.defaultPrevented)throw h}return l.then(h=>{for(const p of h||[])p.status==="rejected"&&d(p.reason);return s().catch(d)})},B=[{label:"Platform",href:"/"},{label:"Decoder",href:"/decoder"},{label:"Claude Plugin",href:"/claude-plugin"},{label:"Workbench",href:"/workbench"},{label:"MCP Server",href:"/mcp-server"},{label:"Evidence",href:"/evidence"},{label:"Blog",href:"/blog"},{label:"Pricing",href:"/pricing"},{label:"Contact",href:"/contact"}];function ge(){const[n,s]=c.useState(!1),[i,t]=c.useState(!1),[l,d]=c.useState(!1),h=G(),p=c.useCallback(()=>{const x=window.scrollY;d(x>50),x>200?t(x>window.lastScrollY):t(!1),window.lastScrollY=x},[]);c.useEffect(()=>(window.addEventListener("scroll",p,{passive:!0}),()=>window.removeEventListener("scroll",p)),[p]),c.useEffect(()=>{s(!1)},[h]),c.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n]),c.useEffect(()=>{if(!n)return;const x=_=>{_.key==="Escape"&&s(!1)};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[n]);const u=x=>x==="/"?h.pathname==="/":h.pathname===x;return e.jsxs(e.Fragment,{children:[e.jsxs("nav",{"aria-label":"Main",className:`fixed top-4 left-1/2 -translate-x-1/2 z-50 w-[95%] max-w-6xl transition-all duration-500 ease-out ${i&&!n?"-translate-y-[140%]":"translate-y-0"}`,inert:i&&!n,children:[e.jsx("div",{className:`glass-nav rounded-2xl px-4 sm:px-6 py-3 transition-all duration-300 ${l?"shadow-deep":""}`,children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(j,{to:"/",className:"flex items-center gap-2.5 text-cyan-300 hover:text-cyan-100 transition-colors",children:e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"36",height:"36",className:"h-9 w-9 rounded-lg object-cover"})}),e.jsx("div",{className:"hidden lg:flex items-center gap-1",children:B.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`px-3 py-2 rounded-lg text-sm font-medium transition-all duration-300 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,children:x.label},x.href))}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(j,{to:"/pricing",className:"hidden sm:inline-flex items-center px-4 py-2 border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all duration-300",children:"Get License"}),e.jsxs("button",{onClick:()=>s(!n),className:"lg:hidden flex flex-col items-center justify-center gap-1.5 p-2 min-h-[44px] min-w-[44px] rounded-lg hover:bg-white/5 transition-colors","aria-label":h.pathname.startsWith("/fr/")?n?"Fermer le menu":"Ouvrir le menu":n?"Close menu":"Open menu","aria-expanded":n,"aria-controls":"mobile-menu",children:[e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"rotate-45 translate-y-2":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"opacity-0":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"-rotate-45 -translate-y-2":""}`})]})]})]})}),e.jsx("div",{id:"mobile-menu","aria-hidden":!n,className:`lg:hidden mt-2 glass-nav rounded-2xl overflow-hidden transition-all duration-300 ${n?"max-h-[calc(100dvh-110px)] overflow-y-auto opacity-100 visible":"max-h-0 opacity-0 invisible"}`,children:e.jsxs("div",{className:"px-4 py-3 space-y-1",children:[B.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`flex items-center px-4 py-3 min-h-[44px] rounded-lg text-sm font-medium transition-all duration-200 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,onClick:()=>s(!1),children:x.label},x.href)),e.jsx(j,{to:"/pricing",className:"sm:hidden mt-2 text-center px-4 py-3 min-h-[44px] flex items-center justify-center border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all",onClick:()=>s(!1),children:"Get License"})]})})]}),n&&e.jsx("div",{className:"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm lg:hidden",onClick:()=>s(!1)})]})}const A={version:"1.0.0",pypiPackage:"qector-decoder-v3",contactEndpoint:void 0,ogImage:"https://qector.store/images/og-banner.png"},ut="https://calendly.com/qector-info/30min?background_color=0e0d0d&text_color=ffffff&primary_color=0e4088";async function be(){try{const s=await(await fetch("https://pypi.org/rss/project/qector-decoder-v3/releases.xml")).text(),d=(new DOMParser().parseFromString(s,"text/xml").querySelector("item title")?.textContent||"").match(/qector-decoder-v3\s+([\d.]+)/);return d?d[1]:A.version}catch{return A.version}}function Y(){const[n,s]=c.useState(A.version),[i,t]=c.useState(!0);return c.useEffect(()=>{let l=!0;return be().then(d=>{l&&(s(d),t(!1))}),()=>{l=!1}},[]),{version:n,loading:i}}const ye=[{label:"QECTOR Decoder v3",href:"/decoder",badge:"Library"},{label:"Claude Code Plugin",href:"/claude-plugin",badge:"Claude"},{label:"Workbench GUI",href:"/workbench",badge:"Desktop App"},{label:"QECTOR MCP Server",href:"/mcp-server",badge:"MCP"},{label:"Installer & App Bundles",href:"/installer"},{label:"Pricing & Licensing",href:"/pricing"}],je=[{label:"Evidence & Reports",href:"/evidence"},{label:"Technical Reference",href:"/technical-reference"},{label:"Package User Manual",href:"/manual"},{label:"Documentation Hub",href:"/docs"},{label:"Version Changelog",href:"/changelog"}],ve=[{label:"About QECTOR",href:"/about"},{label:"Guillaume Lessard (Founder)",href:"/guillaume-lessard"},{label:"iD01t Productions"},{label:"Commercial Licensing",href:"/commercial"},{label:"Contact Engineering",href:"/contact"},{label:"EULA & License",href:"/license"},{label:"Terms of Service",href:"/terms"},{label:"Privacy Policy",href:"/privacy"},{label:"Refund Policy",href:"/refund"}];function M({href:n,external:s,badge:i,children:t}){const l="group flex items-center justify-between gap-3 min-h-[44px] py-1.5 text-secondary hover:text-cyan-300 text-sm transition-colors duration-200",d=e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"group-hover:translate-x-0.5 transition-transform duration-200",children:t}),i&&e.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded bg-surface border border-gridline text-muted-foreground group-hover:border-cyan-300/30 group-hover:text-cyan-300 transition-colors",children:i})]});return n?s?e.jsxs("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:l,children:[d,e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}):e.jsx(j,{to:n,className:l,children:d}):e.jsx("span",{className:l,children:d})}function Ne(){const{version:n}=Y();return e.jsxs("footer",{className:"border-t border-cyan-900/40 bg-void/95 relative overflow-hidden text-left",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-1/2 h-16 bg-gradient-to-b from-cyan-400/5 to-transparent blur-3xl pointer-events-none"}),e.jsx("div",{className:"section-padding py-16 relative z-10",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12 lg:gap-8",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[e.jsxs(j,{to:"/",className:"inline-flex items-center gap-3 text-cyan-300 hover:text-cyan-100 transition-colors duration-200",children:[e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"40",height:"40",className:"h-10 w-10 rounded-lg object-cover"}),e.jsxs("span",{className:"text-lg font-extrabold tracking-tight text-white",children:["QECTOR",e.jsx("span",{className:"text-cyan-300",children:"."})]})]}),e.jsx("p",{className:"text-secondary/80 text-sm leading-relaxed max-w-sm",children:"Quantum error correction decoding for Python. Built by Guillaume Lessard at iD01t Productions."}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] text-muted-foreground hover:text-cyan-300 transition-colors","aria-label":"PyPI",children:[e.jsxs("span",{className:"text-sm font-mono border border-gridline rounded px-2 py-1 hover:border-cyan-300/30",children:["v",n]}),e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"GitHub",children:["GitHub",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"ORCID",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Platform"}),e.jsx("div",{className:"flex flex-col gap-1",children:ye.map(s=>e.jsx(M,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Research & Docs"}),e.jsx("div",{className:"flex flex-col gap-1",children:je.map(s=>e.jsx(M,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Company"}),e.jsx("div",{className:"flex flex-col gap-1",children:ve.slice(0,5).map(s=>e.jsx(M,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]})]}),e.jsxs("div",{className:"mt-16 pt-8 border-t border-gridline flex flex-col md:flex-row items-start md:items-center justify-between gap-6",children:[e.jsxs("div",{className:"text-xs text-muted-foreground max-w-xl leading-relaxed",children:[e.jsx("span",{className:"font-semibold text-secondary",children:"Distribution:"})," PyPI (",e.jsx("code",{className:"text-cyan-300/80 font-mono",children:"qector-decoder-v3"}),") is the Python library. The free ",e.jsx(j,{to:"/installer",className:"link-accent",children:"Workbench GUI"})," is a standalone desktop application shipped self-contained for Windows x64 and Linux x64 (no system Python required)."]}),e.jsxs("nav",{"aria-label":"Legal",className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs font-medium text-muted-foreground",children:[e.jsx(j,{to:"/privacy",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Privacy"}),e.jsx(j,{to:"/terms",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Terms"}),e.jsx(j,{to:"/refund",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Refund"}),e.jsx(j,{to:"/license",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"License"}),e.jsxs("a",{href:"/.well-known/security.txt",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:["Security",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]})]})}),e.jsx("div",{className:"bg-[#050b14]",children:e.jsx("div",{className:"section-padding py-4",children:e.jsxs("div",{className:"max-w-7xl mx-auto text-xs text-muted-foreground/70 text-center md:text-left",children:["© 2026 QECTOR Lab / iD01t Productions. All rights reserved.",e.jsx("div",{className:"mt-1",children:"Éditeur : Guillaume Lessard, entrepreneur individuel (iD01t Productions), 2004 De Lorimier, Longueuil, QC J4K 3H7, Canada · admin@qector.store"})]})})})]})}function we({children:n}){const s=G();return c.useEffect(()=>{window.scrollTo(0,0),document.documentElement.lang=s.pathname.startsWith("/fr/")?"fr":"en",document.getElementById("main-content")?.focus();const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t=(h=document)=>{h.querySelectorAll(".card-surface:not(.revealed), .prose:not(.revealed)").forEach(p=>{i?p.classList.add("revealed"):l.observe(p)})},l=new IntersectionObserver(h=>{h.forEach(p=>{p.isIntersecting&&(p.target.classList.add("revealed"),l.unobserve(p.target))})},{threshold:.1,rootMargin:"0px 0px -10% 0px"});let d=null;return i||(d=new MutationObserver(h=>{h.forEach(p=>{p.addedNodes.forEach(u=>{u.nodeType===Node.ELEMENT_NODE&&t(u)})})}),d.observe(document.body,{childList:!0,subtree:!0})),t(),()=>{l.disconnect(),d&&d.disconnect()}},[s.pathname]),e.jsxs("div",{className:"min-h-screen bg-void text-foreground quantum-grid-bg relative",children:[e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-cyan-300 focus:text-void focus:font-semibold focus:rounded-lg",children:s.pathname.startsWith("/fr/")?"Aller au contenu principal":"Skip to main content"}),e.jsx(ge,{}),e.jsx("main",{id:"main-content",tabIndex:-1,className:"pt-20 outline-none",children:n}),e.jsx(Ne,{})]})}class ke extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(s,i){console.error("QECTOR site error boundary caught:",s,i.componentStack)}handleReload=()=>{this.setState({hasError:!1}),window.location.href="/"};render(){return this.state.hasError?e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-void px-6",children:e.jsxs("div",{className:"max-w-md text-center card-surface",children:[e.jsx("div",{className:"w-12 h-12 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center mx-auto mb-4 text-cyan-300 text-xl",children:"!"}),e.jsx("h1",{className:"text-xl font-bold text-primary mb-2",children:"Something went wrong"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"This page hit an unexpected error. No page data was sent; check the browser console for the local error and reload."}),e.jsx("button",{onClick:this.handleReload,className:"btn-cyan",children:"Reload homepage"})]})}):this.props.children}}function Ee(){return e.jsx("div",{className:"min-h-[60vh] flex items-center justify-center",role:"status","aria-live":"polite",children:e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 border-2 border-cyan-300/20 border-t-cyan-300 rounded-full animate-spin"}),e.jsx("span",{className:"sr-only",children:"Loading page…"})]})})}const ft="/stripe/trial",_e={proMonthly:"https://buy.stripe.com/5kQcN7eAp3BM5RE5ZMeUU0g",proAnnual:"https://buy.stripe.com/8x228teAp6NY6VI87UeUU0h",proPerpetual:"https://buy.stripe.com/dRm00l0Jzfku4NA0FseUU0i",team:"https://buy.stripe.com/aFafZjcsh6NY1Bobk6eUU0j",lab:"https://buy.stripe.com/aFa7sN9g5fku0xk5ZMeUU0k",pilot:"https://buy.stripe.com/14AeVf9g5b4e0xkdseeUU0l"},L={proMonthly:79,proAnnual:790,proPerpetual:1990,team:3900,lab:9900,pilot:1500,enterpriseFrom:25e3,trialDays:14,pilotDays:60,refundDays:14,academicDiscountPct:40},S=n=>`$${n.toLocaleString("en-US")}`,gt=n=>`${n.toLocaleString("fr-CA").replace(/[\u00a0\u202f]/g," ")} $`,Ce={en:"en_US",fr:"fr_FR"};function Pe({title:n="QECTOR · Quantum Error Correction Decoding for Python",description:s="QECTOR Decoder v3 - Rust-core Python quantum error correction decoder. v1.0.0 first stable release with API stability tiers, a qector CLI, and a reproducible benchmark harness (qector bench) for measuring on your own hardware.",ogImage:i=A.ogImage,noindex:t=!1,lang:l="en",alternates:d}){const h=G(),p=`https://qector.store${h.pathname==="/"?"/":`${h.pathname.replace(/\/$/,"")}/`}`;return c.useEffect(()=>{document.title=n,document.documentElement.lang=l;const u=(N,k)=>{let P=document.querySelector(N);if(!P){P=document.createElement("meta");const R=N.includes("property=")?"property":"name",O=N.match(/"([^"]+)"/)?.[1]||"";P.setAttribute(R,O),document.head.appendChild(P)}P.content=k};u('meta[name="description"]',s),u('meta[name="robots"]',t?"noindex, follow":"index, follow, max-image-preview:large"),u('meta[property="og:title"]',n),u('meta[property="og:description"]',s),u('meta[property="og:url"]',p),u('meta[property="og:type"]',"website"),u('meta[property="og:locale"]',Ce[l]??"en_US"),u('meta[property="og:image"]',i),u('meta[property="og:image:alt"]',"QECTOR official logo"),u('meta[property="og:site_name"]',"QECTOR"),u('meta[name="twitter:card"]',"summary_large_image"),u('meta[name="twitter:title"]',n),u('meta[name="twitter:description"]',s),u('meta[name="twitter:image"]',i),u('meta[name="twitter:image:alt"]',"QECTOR official logo"),u('meta[name="twitter:site"]',"@DJiD01T"),u('meta[name="theme-color"]',"#24e7ff");let x=document.querySelector('link[rel="canonical"]');x||(x=document.createElement("link"),x.rel="canonical",document.head.appendChild(x)),x.href=p,document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(N=>N.remove());const _=[];for(const N of d??[]){const k=document.createElement("link");k.rel="alternate",k.hreflang=N.lang,k.href=N.href,document.head.appendChild(k),_.push(k)}return()=>{_.forEach(N=>N.remove())}},[n,s,p,i,t,l,d]),null}function Le({data:n}){const s="json-ld-data";return c.useEffect(()=>{let i=document.getElementById(s);return i||(i=document.createElement("script"),i.id=s,i.type="application/ld+json",document.head.appendChild(i)),i.textContent=JSON.stringify(n),()=>{const t=document.getElementById(s);t&&t.remove()}},[n]),null}function Re({icon:n,label:s,href:i,variant:t="default",className:l=""}){const d=t==="gold"?"bg-gold-400/10 border border-gold-400/30 text-gold-400 hover:bg-gold-400/20":"bg-surface border border-gridline text-secondary hover:text-cyan-300 hover:border-cyan-300/30";return e.jsxs("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:`inline-flex items-center gap-2 px-4 py-2.5 rounded-full text-sm transition-all duration-300 ${d} ${l}`,children:[e.jsx("span",{"aria-hidden":"true",children:n}),e.jsx("span",{children:s})]})}function H({eyebrow:n,heading:s,description:i,align:t="center",maxWidth:l="max-w-3xl",className:d=""}){const h=t==="center"?"text-center mx-auto":"text-left",p=t==="center"?"mx-auto":"";return e.jsxs("div",{className:`${l} ${h} mb-12 md:mb-16 ${d}`,children:[n&&e.jsx("span",{className:"eyebrow-pill mb-4",children:n}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-balance mb-4",children:s}),i&&e.jsx("p",{className:`text-secondary text-lg leading-relaxed text-pretty max-w-prose ${p}`,children:i})]})}const Se={cyan:"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20",green:"bg-green-400/10 text-green-400 border border-green-400/20",purple:"bg-purple-400/10 text-purple-400 border border-purple-400/20",gold:"bg-gold-400/10 text-gold-400 border border-gold-400/20"};function Oe({title:n,tag:s,badge:i,desc:t,proof:l,muted:d=!1,className:h=""}){return e.jsxs("div",{className:`card-surface group ${d?"border-gridline/50 opacity-80":""} ${h}`,children:[s&&e.jsx("div",{className:"text-muted-foreground text-xs font-mono uppercase tracking-wider mb-2",children:s}),e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e.jsx("h3",{className:`font-semibold text-lg transition-colors ${d?"text-gold-400/80":"text-cyan-300 group-hover:text-cyan-200"}`,children:n}),i&&e.jsx("span",{className:`shrink-0 px-2.5 py-1 rounded-full text-xs font-medium ${d?"bg-gold-400/5 text-gold-400/60 border border-gold-400/20":Se[i.color]}`,children:i.label})]}),e.jsx("p",{className:`leading-relaxed ${d?"text-muted-foreground text-sm":"text-secondary"}`,children:t}),l&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-gridline/60 flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{className:"text-muted-foreground font-mono",children:l})]})]})}function De({title:n,statement:s,href:i,linkLabel:t="View evidence →",className:l=""}){return e.jsxs("div",{className:`relative rounded-2xl border border-cyan-300/20 bg-void p-6 overflow-hidden ${l}`,children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none bg-gradient-to-br from-cyan-300/5 to-transparent"}),e.jsxs("div",{className:"relative z-10",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300"}),e.jsx("span",{className:"text-xs font-mono uppercase tracking-wider text-cyan-300",children:n})]}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:s}),i&&e.jsx("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm font-medium hover:underline underline-offset-4",children:t})]})]})}function Te(){const[n,s]=c.useState({}),[i,t]=c.useState({}),[l,d]=c.useState(!1),[h,p]=c.useState(!1),u=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)for(let o=0;o<3;o++)a.push({id:`${r}_${o}`,r,c:o,x:120+o*100,y:60+r*100});return a},[]),x=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)a.push({id:`L_${r}`,type:"L",r,c:-1,x1:30,y1:60+r*100,x2:120,y2:60+r*100});for(let r=0;r<3;r++)a.push({id:`R_${r}`,type:"R",r,c:3,x1:320,y1:60+r*100,x2:410,y2:60+r*100});for(let r=0;r<3;r++)for(let o=0;o<2;o++)a.push({id:`H_${r}_${o}`,type:"H",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+(o+1)*100,y2:60+r*100});for(let r=0;r<2;r++)for(let o=0;o<3;o++)a.push({id:`V_${r}_${o}`,type:"V",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+o*100,y2:60+(r+1)*100});return a},[]),_=c.useMemo(()=>{const a={},r=o=>{a[o]=!a[o]};return x.forEach(o=>{n[o.id]&&(o.type==="H"?(r(`${o.r}_${o.c}`),r(`${o.r}_${o.c+1}`)):o.type==="V"?(r(`${o.r}_${o.c}`),r(`${o.r+1}_${o.c}`)):o.type==="L"?r(`${o.r}_0`):o.type==="R"&&r(`${o.r}_2`))}),Object.keys(a).forEach(o=>{a[o]||delete a[o]}),a},[n,x]),N=a=>{t({}),d(!1),s(r=>({...r,[a]:!r[a]}))},k=()=>{s({}),t({}),d(!1)},P=(a=.2)=>{t({}),d(!1);const r={};x.forEach(o=>{Math.random()Math.abs(a.r-r.r)+Math.abs(a.c-r.c),O=c.useCallback((a,r)=>{const o=[],E=Math.min(a.r,r.r),g=Math.max(a.r,r.r),w=a.r{const a=Object.keys(_).map(g=>{const[w,m]=g.split("_").map(Number);return u.find(y=>y.r===w&&y.c===m)});if(a.length===0){t({}),d(!0);return}const r=g=>{if(g.length===0)return{cost:0,pairs:[]};const w=g[0],m=g.slice(1);let y=1/0,v=[];const C=w.c+1,I=r(m);C+I.costX!==D),$=r(Z);U+$.cost{if(g==="L"||g==="R"||w==="L"||w==="R"){const m=g==="L"||g==="R"?w:g;if((g==="L"||g==="R"?g:w)==="L"){for(let v=0;v{E[y]=!0})}),t(E),d(!0)},[_,u,O]),K=c.useMemo(()=>{if(!l)return"idle";const a=x.filter(m=>{const y=n[m.id]||!1,v=i[m.id]||!1;return y!==v}),r={},o=(m,y)=>{r[m]||(r[m]=[]),r[y]||(r[y]=[]),r[m].push(y),r[y].push(m)};a.forEach(m=>{m.type==="H"?o(`${m.r}_${m.c}`,`${m.r}_${m.c+1}`):m.type==="V"?o(`${m.r}_${m.c}`,`${m.r+1}_${m.c}`):m.type==="L"?o("L",`${m.r}_0`):m.type==="R"&&o("R",`${m.r}_2`)});const E={},g=["L"];E.L=!0;let w=!1;for(;g.length>0;){const m=g.shift();if(m==="R"){w=!0;break}(r[m]||[]).forEach(v=>{E[v]||(E[v]=!0,g.push(v))})}return w?"failure":"success"},[l,n,i,x]);return e.jsxs("div",{className:"flex flex-col gap-4 border border-gridline bg-surface/30 rounded-2xl p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider flex items-center gap-1.5",children:[e.jsx(V,{className:"w-4 h-4"}),"Interactive QEC Simulator"]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-0.5",children:"Planar stabilizer code (d=3). Click edges to toggle physical errors."})]}),e.jsx("button",{onClick:()=>p(!h),className:"min-h-[44px] min-w-[44px] inline-flex items-center justify-center text-secondary hover:text-cyan-300 transition-colors","aria-label":"Toggle help",children:e.jsx(se,{className:"w-5 h-5"})})]}),h&&e.jsxs("div",{className:"p-4 bg-void/80 border border-gridline rounded-xl text-xs text-secondary leading-relaxed space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"How to play:"})," Click on the links (grey/red lines) to inject physical errors. Red lines represent errors."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Syndromes:"})," Grid nodes measure checks. When adjacent errors are odd, a check triggers (lights up orange)."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Decoder:"})," Minimum Weight Perfect Matching (MWPM) matches active checks. When you click ",e.jsx("span",{className:"text-cyan-300",children:"Run Decoder"}),", it draws matching correction paths in cyan."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Success condition:"})," If error + correction paths do not form a logical connection across boundaries (from left to right), the state is successfully corrected!"]})]}),e.jsxs("div",{className:"bg-void/50 border border-gridline rounded-xl flex items-center justify-center p-4 relative overflow-hidden",children:[e.jsxs("svg",{viewBox:"0 0 440 320",className:"w-full max-w-[440px] h-auto select-none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsxs("defs",{children:[e.jsxs("radialGradient",{id:"activeNodeGlow",cx:"50%",cy:"50%",r:"50%",children:[e.jsx("stop",{offset:"0%",stopColor:"#fef08a"}),e.jsx("stop",{offset:"60%",stopColor:"#eab308"}),e.jsx("stop",{offset:"100%",stopColor:"#a16207"})]}),e.jsxs("linearGradient",{id:"inactiveNodeGlow",x1:"0",y1:"0",x2:"1",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#1e293b"}),e.jsx("stop",{offset:"100%",stopColor:"#0f172a"})]}),e.jsx("pattern",{id:"gridDots",width:"20",height:"20",patternUnits:"userSpaceOnUse",children:e.jsx("circle",{cx:"2",cy:"2",r:"1",fill:"#1e293b",fillOpacity:"0.6"})})]}),e.jsx("rect",{width:"440",height:"320",fill:"url(#gridDots)",rx:"10"}),e.jsx("line",{x1:"30",y1:"30",x2:"30",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"20",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(-90, 20, 165)",className:"font-mono",children:"LEFT BOUNDARY"}),e.jsx("line",{x1:"410",y1:"30",x2:"410",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"420",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(90, 420, 165)",className:"font-mono",children:"RIGHT BOUNDARY"}),x.map(a=>{const r=n[a.id]||!1,o=i[a.id]||!1;let E="#334155";return r&&o?E="#e2e8f0":r?E="#ef4444":o&&(E="#06b6d4"),e.jsxs("g",{className:"group",children:[e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:"transparent",strokeWidth:"16",className:"cursor-pointer",tabIndex:0,role:"checkbox","aria-checked":r,"aria-label":`Toggle error on qubit edge ${a.id}`,onClick:()=>N(a.id),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),N(a.id))}}),e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:E,strokeWidth:r||o?4:2,className:"transition-colors duration-200 pointer-events-none group-hover:stroke-cyan-300/40",style:{filter:r?"drop-shadow(0 0 4px rgba(239, 68, 68, 0.4))":o?"drop-shadow(0 0 4px rgba(6, 182, 212, 0.4))":"none"}}),e.jsx("circle",{cx:(a.x1+a.x2)/2,cy:(a.y1+a.y2)/2,r:"5",fill:r?"#ef4444":o?"#06b6d4":"#1e293b",stroke:r||o?"#e2e8f0":"#475569",strokeWidth:"1.5",className:"transition-colors duration-200 pointer-events-none group-hover:fill-cyan-300 group-hover:stroke-cyan-200"})]},a.id)}),u.map(a=>{const r=_[a.id]||!1;return e.jsxs("g",{children:[r&&e.jsx("circle",{cx:a.x,cy:a.y,r:"18",fill:"rgba(251, 191, 36, 0.15)",className:"animate-pulse"}),e.jsx("circle",{cx:a.x,cy:a.y,r:r?12:9,fill:r?"url(#activeNodeGlow)":"url(#inactiveNodeGlow)",stroke:r?"#fbbf24":"#334155",strokeWidth:r?2:1.5,className:"transition-all duration-300 pointer-events-none",style:{filter:r?"drop-shadow(0 0 10px rgba(251, 191, 36, 0.7))":"none"}}),e.jsx("circle",{cx:a.x-(r?3:2),cy:a.y-(r?3:2),r:r?3:2,fill:"white",fillOpacity:"0.25",className:"pointer-events-none"}),r&&e.jsx("circle",{cx:a.x,cy:a.y,r:20,fill:"transparent",stroke:"#fbbf24",strokeWidth:"1",strokeOpacity:"0.4",className:"animate-ping"}),e.jsx("text",{x:a.x,y:a.y+3,textAnchor:"middle",fill:r?"#020617":"#94a3b8",fontSize:"9",fontWeight:"bold",className:"font-mono text-[9px] pointer-events-none",children:r?"!":"S"})]},a.id)})]}),l&&e.jsxs("div",{className:"absolute bottom-3 left-3 right-3 flex items-center justify-between p-3 bg-surface/90 border border-gridline rounded-xl backdrop-blur-md transition-all duration-300",children:[K==="success"?e.jsxs("div",{className:"flex items-center gap-2 text-green-400 text-sm font-semibold",children:[e.jsx(ae,{className:"w-5 h-5"}),e.jsx("span",{children:"SUCCESS: Errors resolved"})]}):e.jsxs("div",{className:"flex items-center gap-2 text-red-400 text-sm font-semibold",children:[e.jsx(ne,{className:"w-5 h-5"}),e.jsx("span",{children:"LOGICAL ERROR: Correction failed"})]}),e.jsx("div",{className:"text-[10px] text-muted-foreground font-mono",children:"d=3 code slice"})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("button",{onClick:()=>P(.2),className:"px-3 py-3 bg-surface hover:bg-white/5 border border-gridline rounded-lg text-xs font-semibold text-secondary hover:text-primary transition-all flex items-center justify-center gap-1.5",children:[e.jsx(V,{className:"w-3.5 h-3.5"}),"Inject Errors"]}),e.jsxs("button",{onClick:J,disabled:Object.keys(_).length===0,className:"px-3 py-3 bg-cyan-300 disabled:bg-cyan-300/20 disabled:text-void/40 hover:bg-cyan-200 text-void rounded-lg text-xs font-bold transition-all flex items-center justify-center gap-1.5",children:[e.jsx(oe,{className:`w-3.5 h-3.5 ${l?"":"animate-spin"}`}),"Run Decoder"]}),e.jsx("button",{onClick:k,className:"px-3 py-3 bg-surface hover:bg-red-950/20 border border-gridline hover:border-red-900/30 rounded-lg text-xs font-semibold text-secondary hover:text-red-400 transition-all",children:"Reset Graph"})]})]})}function Ae({code:n,language:s="python",filename:i,className:t=""}){const[l,d]=c.useState(!1),h=async()=>{try{await navigator.clipboard.writeText(n),d(!0),setTimeout(()=>d(!1),2e3)}catch(p){console.error("Failed to copy text: ",p)}};return e.jsxs("div",{className:`my-4 border border-gridline rounded-xl overflow-hidden bg-void/50 ${t}`,children:[i&&e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gridline bg-surface/50 text-xs font-mono text-muted-foreground",children:[e.jsx("span",{children:i}),e.jsx("span",{className:"uppercase text-[10px] bg-cyan-300/10 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-300/20",children:s})]}),e.jsxs("div",{className:"relative group",children:[e.jsx("pre",{className:"p-4 pr-14 overflow-x-auto overflow-y-auto font-mono text-sm leading-relaxed text-secondary bg-void/30 max-h-[400px]",children:e.jsx("code",{className:`language-${s}`,children:n})}),e.jsx("button",{onClick:h,className:"absolute top-3 right-3 p-1.5 bg-surface border border-gridline rounded-lg text-secondary hover:text-cyan-300 hover:border-cyan-300/30 opacity-0 group-hover:opacity-100 focus:opacity-100 max-sm:opacity-100 transition-all duration-200","aria-label":l?"Copied":"Copy code",children:l?e.jsx(ie,{className:"w-4 h-4 text-green-400"}):e.jsx(le,{className:"w-4 h-4"})}),e.jsx("span",{className:"sr-only","aria-live":"polite",children:l?"Code copied to clipboard":""})]})]})}z.registerPlugin(pe);function T({value:n,label:s}){return e.jsxs("div",{className:"text-center px-4 py-3",children:[e.jsx("div",{className:"text-2xl font-bold text-cyan-300",children:n}),e.jsx("div",{className:"text-xs text-muted-foreground leading-tight max-w-[11rem] mx-auto",children:s})]})}function Ie(){const n=c.useRef([]),{version:s}=Y();c.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const t=document.createElement("script");t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t);const l=z.context(()=>{n.current.filter(Boolean).forEach(h=>{z.fromTo(h,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power2.out",scrollTrigger:{trigger:h,start:"top 85%",once:!0}})})});return()=>{l.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const i=(t,l)=>{t&&(n.current[l]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(Pe,{title:"QECTOR · Quantum Error Correction Decoding for Python",description:"QECTOR Decoder v3 - Rust-core Python library with 17 concrete decoder configurations plus 2 Workbench routing kinds, a syndrome-faithful contract, and reproducible validation guidance."}),e.jsx(Le,{data:{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"QECTOR Decoder v3 is the qector-decoder-v3 1.0.0 Rust/Python quantum error correction package with 17 concrete decoder configurations plus 2 Workbench routing kinds, offline Ed25519 licensing, and reproducible validation guidance.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:s,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://github.com/GuillaumeLessard"},maintainer:{"@type":"Organization",name:"iD01t Productions"},identifier:"https://pypi.org/project/qector-decoder-v3/",license:"https://qector.store/license/",offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}},{"@type":"Organization",name:"QECTOR",url:"https://qector.store/",logo:"https://qector.store/images/logo.png",email:"admin@qector.store",founder:{"@type":"Person",name:"Guillaume Lessard",identifier:"0009-0000-3465-3753"},address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-claude-plugin","https://orcid.org/0009-0000-3465-3753"]}]}}),e.jsxs("section",{className:"relative min-h-screen flex items-center justify-center overflow-hidden","aria-label":"QECTOR hero",children:[e.jsx("img",{src:"/images/hero-bg.webp",alt:"","aria-hidden":"true",fetchPriority:"high",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.45) saturate(1.1)"}}),e.jsx("noscript",{children:e.jsx("img",{src:"/images/og-banner.png",alt:"","aria-hidden":"true",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.4)"}})}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-void/60 via-void/25 to-void z-[1]"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-500/[0.04] to-transparent z-[1]"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-5xl mx-auto px-6 pt-24 pb-20",children:[e.jsxs(j,{to:"/changelog",className:"inline-flex max-w-full flex-wrap items-center justify-center gap-2 px-4 py-2 bg-surface/70 border border-cyan-300/20 rounded-full text-center text-xs leading-relaxed text-cyan-300 hover:bg-cyan-300/10 transition-all mb-8 backdrop-blur-sm",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-green-400 animate-pulse-dot"}),e.jsxs("span",{children:["v",s," · First Stable Release · Changelog →"]})]}),e.jsxs("h1",{className:"max-w-4xl mx-auto break-words text-3xl sm:text-5xl md:text-6xl lg:text-7xl font-extrabold tracking-tight leading-[1.05] mb-6",style:{textShadow:"0 4px 32px rgba(0,0,0,0.9)"},children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"QEC Decoding"})," ","for Python"]}),e.jsxs("p",{className:"text-base sm:text-lg md:text-xl text-secondary/90 max-w-3xl mx-auto mb-5 leading-relaxed break-words",style:{textShadow:"0 2px 16px rgba(0,0,0,0.8)"},children:["The v1.0.0 runtime ships 17 concrete decoder configurations, while Workbench v1.0.7 names 19 kinds in total: those configurations plus AutoDecoder and Auto Router orchestration entries."," ",e.jsx("span",{className:"text-primary font-semibold",children:"v1.0.0 is the first stable release:"})," API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points and the qector CLI."]}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed",style:{textShadow:"0 2px 12px rgba(0,0,0,0.8)"},children:"Local measurement tools are documented for declared workloads; this site publishes no universal performance figures. Claim boundaries and verification paths are published with the product documentation."}),e.jsxs("div",{className:"flex flex-col sm:flex-row flex-wrap gap-3 sm:gap-4 justify-center items-stretch sm:items-center mb-10",children:[e.jsx(j,{to:"/pricing",className:"btn-gold px-8 py-4 text-sm sm:text-base font-bold w-full sm:w-auto",children:"Start Free 14-Day Trial →"}),e.jsx(j,{to:"/decoder",className:"btn-cyan px-8 py-4 text-sm sm:text-base w-full sm:w-auto",children:"Explore the Decoder"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/latest",className:"btn-outline px-8 py-4 text-sm sm:text-base w-full sm:w-auto",target:"_blank",rel:"noopener noreferrer",children:"Free Workbench GUI"})]}),e.jsx("div",{className:"max-w-2xl mx-auto mb-10 text-left",children:e.jsx(Ae,{language:"bash",filename:"Quick start",code:`pip install qector-decoder-v3==${s} -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 md:divide-x md:divide-white/5 border-t border-white/5 pt-6 max-w-2xl mx-auto",children:[e.jsx(T,{value:"19",label:"Workbench Kinds (17 + 2 routing)"}),e.jsx(T,{value:"GF(2)",label:"Faithfulness Contract"}),e.jsx(T,{value:"CPU + GPU",label:"Optional Execution Paths"}),e.jsx(T,{value:"Open",label:"Evidence Policy"})]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-10 p-5 md:p-6 bg-surface/50 border border-cyan-300/20 rounded-2xl text-center shadow-lg backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] text-cyan-300 font-semibold tracking-[0.2em] mb-2 uppercase",children:"Evidence policy"}),e.jsx("div",{className:"text-lg md:text-xl font-bold text-primary tracking-tight mb-2",children:"No hardware-specific results published"}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed max-w-lg mx-auto",children:["QECTOR publishes contracts, methodology, and artifacts rather than portable speed numbers. Read the ",e.jsx(j,{to:"/evidence",className:"link-accent",children:"evidence policy"})," before generating a local measurement."]})]})]})]}),e.jsx("section",{className:"section-band bg-surface/20 border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill-gold mb-4",children:"Release Assurance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"A Clear Path From Code to Evidence"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"The public release, validation contract, and commercial delivery path are explicit by design."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Current Runtime"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"qector-decoder-v3 1.0.0"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"The live PyPI release supports Python 3.9 through 3.13 with 15 binary wheels across Windows, Linux, and macOS."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Contract"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Correctness before speed"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Every correction is checked against H c = s (mod 2). Measurements stay workload-scoped, artifact-hashed, and separate from universal performance claims."})]}),e.jsxs("div",{className:"card-surface p-6 border-gold-400/20",children:[e.jsx("div",{className:"text-gold-400 font-mono text-xs uppercase tracking-wider mb-3",children:"Secure Delivery"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Signed, traceable licensing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Commercial fulfillment requires a live Stripe event, issues a v2 Ed25519 token, and records independent billing and license delivery states."}),e.jsx(j,{to:"/license",className:"inline-block text-gold-400 text-sm font-medium hover:underline mt-3",children:"Read the license activation procedure →"})]})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Registry"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 text-sm",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Normative reference manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"v1.0.0 user manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Verification and proof bundle"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.22046403"})]})]})]})]})}),e.jsx("section",{className:"section-thin border-t border-b border-gridline/30 bg-void/80",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto text-center",children:[e.jsx("p",{className:"text-xs text-muted-foreground uppercase tracking-widest mb-8",children:"Works with your existing stack"}),e.jsxs("div",{className:"flex flex-wrap justify-center items-center gap-x-12 gap-y-8",children:[e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Stim"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install stim"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Sinter"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install sinter"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Qiskit"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install qiskit-qec"})]})]})]})})}),e.jsx("section",{ref:t=>i(t,0),className:"py-8 bg-void",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-7xl mx-auto flex flex-wrap justify-center gap-3",children:[{icon:e.jsx(ce,{size:16}),label:"Artifacts (GitHub)",href:"https://github.com/GuillaumeLessard/qector-decoder"},{icon:e.jsx(de,{size:16}),label:"Mastering QEC · Google Play",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",gold:!0},{icon:e.jsx(xe,{size:16}),label:`PyPI Wheel v${s}`,href:"https://pypi.org/project/qector-decoder-v3/"},{icon:e.jsx(me,{size:16}),label:"Free Workbench App",href:"/workbench"},{icon:e.jsx(he,{size:16}),label:"ORCID 0009-0000-3465-3753",href:"https://orcid.org/0009-0000-3465-3753"}].map(t=>e.jsx(Re,{icon:t.icon,label:t.label,href:t.href,variant:t.gold?"gold":"default"},t.label))})})}),e.jsx("section",{className:"section-band bg-void border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Proof Suite"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"Executable Verification for v1.0.0"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"Hashed-lock reproducible install, CERT_STRICT gate, and Lean/Coq kernel evidence - verifiable against Reference Manual v1.0.0."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reproducible Install"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Hashed-lock & CERT_STRICT"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Proof runs are hashed-locked and gated by CERT_STRICT - no universal benchmark figures, only workload-scoped artifacts."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reference Manual v1.0.0"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"DOI 10.5281/zenodo.21941046"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Normative manual with syndrome-faithfulness foundations, 15 backends, and API stability tiers. All proofs trace to this document."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Lean/Coq Evidence"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Kernel-checked proofs"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Executable suite checks GF(2) invariants and logical cosets with Lean/Coq kernels - evidence, not claims."})]})]}),e.jsxs("div",{className:"text-center mt-8",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-proof",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"View qector-proof on GitHub"}),e.jsx("span",{className:"text-muted-foreground text-xs ml-3",children:"github.com/GuillaumeLessard/qector-proof"})]})]})}),e.jsx("section",{className:"section-feature bg-surface/30 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,1),className:"text-center mb-14",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"How It Works"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"From Installation to Validation"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"QECTOR integrates directly into your existing QEC workflow with minimal friction."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:[{step:"01",title:"Install",desc:"Install the v1.0.0 wheel in a supported Python 3.9-3.13 environment alongside your existing Stim or PyMatching workflow.",detail:'pip install --upgrade "qector-decoder-v3>=1.0,<2"',code:!0},{step:"02",title:"Decode",desc:"Access 17 concrete Rust-accelerated decoder configurations through a unified Python API. Workbench also exposes AutoDecoder and Auto Router as two orchestration kinds, for 19 named kinds in total.",detail:"from qector_decoder_v3 import BlossomDecoder, BpOsdDecoder",code:!0},{step:"03",title:"Validate",desc:"Claims are scoped to a declared workload and backed by SHA-256 sealed artifacts. Run qector-doctor before relying on optional paths and preserve the report with the result.",detail:"evidence policy · SHA-256 sealed",code:!1}].map(t=>e.jsxs("div",{className:"card-surface p-6 relative",children:[e.jsx("div",{className:"text-4xl font-black text-cyan-300/20 absolute top-4 right-4 select-none",children:t.step}),e.jsx("div",{className:"w-10 h-10 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 font-bold text-sm mb-4",children:t.step}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:t.desc}),t.code&&e.jsx("code",{className:"block text-xs bg-void border border-gridline rounded-lg px-3 py-2 text-cyan-300 font-mono overflow-x-auto",children:t.detail}),!t.code&&e.jsx("span",{className:"inline-flex items-center gap-1.5 text-xs text-cyan-300 font-mono bg-cyan-300/5 px-3 py-1.5 rounded-lg border border-cyan-300/10",children:t.detail})]},t.step))})]})}),e.jsxs("section",{id:"platform",className:"section-feature relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:"radial-gradient(circle at center, rgba(103, 232, 249, 0.06) 0%, transparent 70%)"}}),e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("div",{ref:t=>i(t,2),children:e.jsx(H,{eyebrow:"Why QECTOR",heading:"More Than Just MWPM",description:"QEC decoding is not one-size-fits-all. Surface codes, qLDPC codes, optional batch paths, and simulation workloads each demand different decoders. QECTOR documents the supported contracts and the evidence needed to evaluate a selected workload."})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[{title:"Blossom MWPM (Exact)",tag:"Blossom",desc:"Weight-optimal exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes.",proof:"Exact optimal matching · Stim-native"},{title:"qLDPC Support",tag:"BP-OSD (qLDPC)",desc:"Matching decoders are restricted to graphlike structures. BP-OSD handles reachable arbitrary GF(2) check matrices, including LDPC and qLDPC workloads.",proof:"Hyperedge-safe GF(2) path"},{title:"Workload-Scoped Execution",tag:"Union-Find + Optional GPU",desc:"Union-Find and optional GPU batch paths are available for supported workloads. Availability and performance must be verified on the target environment.",proof:"Environment-dependent paths"},{title:"One Library, Pluggable",tag:"Stim · PyMatching · Sinter · Qiskit",desc:"Drop QECTOR into any existing Stim or PyMatching workflow. Same API surface, swappable backend. No vendor lock-in.",proof:"Drop-in, same API surface"}].map((t,l)=>e.jsx("div",{ref:d=>i(d,3+l),children:e.jsx(Oe,{title:t.title,tag:t.tag,desc:t.desc,proof:t.proof})},t.title))})]})})]}),e.jsx("section",{id:"decoder-section",className:"section-feature bg-surface/50",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{ref:t=>i(t,7),className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"19 Workbench Kinds · 17 Concrete Configs"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-6",children:"Decoding Algorithms"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"Union-Find, Fast Union-Find, Blossom MWPM, Sparse Blossom, Belief-Matching, BP-OSD, GPU Batch (CUDA/OpenCL), Hybrid, Predecoded, two-stage, ambiguity-cluster, colour-code, space-time, and other concrete paths are exposed through a consistent Python API. Workbench adds the two orchestration kinds, AutoDecoder and Auto Router, to make 19 named kinds."}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[{label:" v1.0.0 First Stable",desc:"API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points, qector CLI + qector-doctor."},{label:" 15 Binary Wheels",desc:"Python 3.9-3.13 across Windows amd64, Linux x86_64, and macOS arm64, released on PyPI."},{label:" GPU Batch Paths",desc:"CUDA and OpenCL batch paths are available for supported hardware and drivers; OpenCL via source build."},{label:" Reproducible Harness",desc:"qector bench ships with the package; measure on your own hardware, no universal figures claimed."}].map(t=>e.jsxs("div",{className:"p-4 bg-void/50 border border-gridline/50 rounded-xl",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-sm mb-1",children:t.label}),e.jsx("div",{className:"text-muted-foreground text-xs leading-relaxed",children:t.desc})]},t.label))}),e.jsxs("div",{className:"flex flex-wrap gap-3 mt-8",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/pypi/v/qector-decoder-v3?style=flat-square&color=24e7ff",alt:"qector-decoder-v3 version on PyPI",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/github/v/release/GuillaumeLessard/qector-decoder?style=flat-square&color=24e7ff",alt:"Latest qector-decoder release on GitHub",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/badge/GitHub-Artifacts-blue?logo=github",alt:"GitHub release artifacts for QECTOR",loading:"lazy"})})]})]}),e.jsx("div",{ref:t=>i(t,8),className:"relative w-full",children:e.jsx(Te,{})})]})})})}),e.jsx("section",{className:"section-feature relative",children:e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,9),children:[e.jsx(H,{eyebrow:"Performance",heading:"Measure on Your Own Hardware"}),e.jsx(De,{title:"Reproducible Benchmark Harness",statement:"No universal benchmark figures are published on this site, because results depend on your hardware, drivers, and workloads. The qector bench harness ships with the package so you can measure logical error rates and throughput on your own machines.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts →",className:"max-w-3xl mx-auto mb-6"})]}),e.jsx("div",{ref:t=>i(t,10),className:"max-w-3xl mx-auto",children:e.jsxs("div",{className:"p-5 bg-void/50 border border-gridline/50 rounded-xl font-mono text-xs text-muted-foreground leading-relaxed overflow-x-auto",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"}),' pip install "qector-decoder-v3[bench]"']}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector-doctor"]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001"]}),e.jsx("div",{className:"text-green-400 mt-2",children:"✓ Logical error rates and throughput written as reproducible JSON"})]})}),e.jsx("div",{className:"text-center mt-8 flex flex-wrap justify-center gap-3",children:e.jsx(j,{to:"/evidence",className:"btn-outline",children:"Evidence & Reports"})})]})})}),e.jsx("section",{className:"section-band bg-surface/20 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-5xl mx-auto",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-center mb-10",children:"Enterprise Compliance & Licensing"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface border-cyan-300/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-300/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-cyan-300 flex items-center gap-2 mb-4",children:"License Clarity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"The package is source-available under PolyForm Noncommercial 1.0.0 for community use. Commercial use, hosted services, and redistribution require the written scope described on the license and pricing pages."}),e.jsx(j,{to:"/commercial",className:"text-cyan-300 text-sm font-medium hover:underline",children:"Learn about licensing →"})]}),e.jsxs("div",{className:"card-surface border-gold-400/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-gold-400/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-gold-400 flex items-center gap-2 mb-4",children:"Try It Free, Then Go Pro"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["A free 14-day commercial trial, no card needed. Then Pro from ",S(L.proMonthly),"/month or ",S(L.proAnnual),"/year with GPU batch decoding, Team and Lab plans for groups, and a ",L.refundDays,"-day money-back guarantee on every plan."]}),e.jsx(j,{to:"/pricing",className:"btn-gold text-sm",children:"View Pricing & Tiers →"})]})]})]})}),e.jsx("section",{id:"pricing-section",className:"section-feature bg-surface/50 border-t border-gridline",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-xl mx-auto text-center",children:[e.jsxs("div",{ref:t=>i(t,11),className:"mb-6",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl font-bold mb-3",children:"QECTOR Pro"}),e.jsxs("p",{className:"text-secondary text-sm max-w-md mx-auto",children:["Free ",L.trialDays,"-day trial · Cancel any time · ",L.refundDays,"-day money-back guarantee"]})]}),e.jsxs("div",{ref:t=>i(t,12),className:"card-surface border-cyan-300/35 neon-border-cyan relative overflow-hidden p-8 rounded-2xl bg-void/80 text-center",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 to-transparent pointer-events-none"}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("h3",{className:"text-4xl font-extrabold text-primary",children:[S(L.proMonthly),e.jsx("span",{className:"text-lg font-semibold text-muted-foreground",children:"/mo"})]}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-1",children:["or ",S(L.proAnnual),"/year (2 months free) · 1 named user · Production use"]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row justify-center gap-3 mb-6",children:[e.jsxs("a",{href:_e.proMonthly,className:"btn-cyan text-base font-bold py-3.5 px-8 rounded-xl shadow-lg shadow-cyan-300/20 inline-flex items-center justify-center gap-2",target:"_blank",rel:"noopener noreferrer",children:[e.jsxs("span",{children:["Buy Pro: ",S(L.proMonthly),"/mo"]}),e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),e.jsx("polyline",{points:"12 5 19 12 12 19"})]})]}),e.jsx(j,{to:"/pricing",className:"btn-outline text-base py-3.5 px-8 rounded-xl",children:"Start free trial"})]}),e.jsx("div",{className:"border-t border-gridline/60 pt-4 mt-4 text-left space-y-2",children:["Full QECTOR Decoder v3 (all decoder families)","GPU (CUDA/OpenCL) batch decoding unlocked","Signed licence token, verified offline: works air-gapped","Priority email support (2 business day response)",`${L.refundDays}-day money-back guarantee on your first payment`].map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-secondary",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{children:t})]},t))})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-4",children:["Need Team, Lab, perpetual or OEM? ",e.jsx(j,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"View all tiers →"})]})]})})})]})}const qe=c.lazy(()=>b(()=>import("./About-dHfyUSjm.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),$e=c.lazy(()=>b(()=>import("./Decoder-CD04ckwI.js"),__vite__mapDeps([7,1,8,2,3,4,5,6]))),Me=c.lazy(()=>b(()=>import("./Workbench-KEHB2TYr.js"),__vite__mapDeps([9,1,8,2,10,3,4,5,6]))),ze=c.lazy(()=>b(()=>import("./McpServer-619DB13w.js"),__vite__mapDeps([11,1,8,3,4,5,6,2]))),Ge=c.lazy(()=>b(()=>import("./ClaudePlugin-ClObfYRc.js"),__vite__mapDeps([12,1,8,10,6,3,4,5,2]))),Qe=c.lazy(()=>b(()=>import("./Blog-U8RuDZLO.js"),__vite__mapDeps([13,1,14,3,4,5,6,2]))),Fe=c.lazy(()=>b(()=>import("./BlogPost-Cft_Na6k.js"),__vite__mapDeps([15,1,14,4,3,5,6,2]))),Ue=c.lazy(()=>b(()=>import("./Pricing-DJJSKVoA.js"),__vite__mapDeps([16,1,17,3,4,5,8,2,6]))),Ve=c.lazy(()=>b(()=>import("./PricingFR-C6aJLaoB.js"),__vite__mapDeps([18,1,17,3,4,5,8,2,6]))),We=c.lazy(()=>b(()=>import("./Commercial-C0AKNYqz.js"),__vite__mapDeps([19,1,8,3,4,5,6,2]))),Be=c.lazy(()=>b(()=>import("./Contact-CNyl61eI.js"),__vite__mapDeps([20,1,21,2,3,4,5,6]))),He=c.lazy(()=>b(()=>import("./License-DHRrrKKE.js"),__vite__mapDeps([22,1,8,3,4,5,6,2]))),Ye=c.lazy(()=>b(()=>import("./Privacy-C4c3BcJK.js"),__vite__mapDeps([23,1,8,3,4,5,6,2]))),Je=c.lazy(()=>b(()=>import("./Terms-C28kGJxx.js"),__vite__mapDeps([24,1,8,3,4,5,6,2]))),Ke=c.lazy(()=>b(()=>import("./TermsFR-BLz2i-t6.js"),__vite__mapDeps([25,1,8,3,4,5,6,2]))),Ze=c.lazy(()=>b(()=>import("./Refund-CTEPp265.js"),__vite__mapDeps([26,1,8,3,4,5,6,2]))),Xe=c.lazy(()=>b(()=>import("./Founder-BJJh0MV8.js"),__vite__mapDeps([27,1,21,3,4,5,6,2]))),et=c.lazy(()=>b(()=>import("./Evidence-Bj6L0ipY.js"),__vite__mapDeps([28,1,8,2,10,3,4,5,6]))),tt=c.lazy(()=>b(()=>import("./Changelog-gIx07919.js"),__vite__mapDeps([29,1,8,10,3,4,5,6,2]))),rt=c.lazy(()=>b(()=>import("./TechnicalReference-CBJ6Ke79.js"),__vite__mapDeps([30,1,8,2,6,3,4,5]))),st=c.lazy(()=>b(()=>import("./Docs-D_KRdt5F.js"),__vite__mapDeps([31,1,8,2,3,4,5,6]))),at=c.lazy(()=>b(()=>import("./Installer-AK92G1y0.js"),__vite__mapDeps([32,1,8,3,4,5,6,2]))),nt=c.lazy(()=>b(()=>import("./Manual-BOkG7qye.js"),__vite__mapDeps([33,1,6,8,3,4,5,2]))),ot=c.lazy(()=>b(()=>import("./Success-Bv54wCpg.js"),__vite__mapDeps([34,1,8,3,4,5,6,2]))),it=c.lazy(()=>b(()=>import("./NotFound-Xb_C85Aw.js"),__vite__mapDeps([35,1,8,3,4,5,6,2])));function lt(){return e.jsx(ke,{children:e.jsx(we,{children:e.jsx(c.Suspense,{fallback:e.jsx(Ee,{}),children:e.jsxs(te,{children:[e.jsx(f,{path:"/",element:e.jsx(Ie,{})}),e.jsx(f,{path:"/about",element:e.jsx(qe,{})}),e.jsx(f,{path:"/decoder",element:e.jsx($e,{})}),e.jsx(f,{path:"/workbench",element:e.jsx(Me,{})}),e.jsx(f,{path:"/mcp-server",element:e.jsx(ze,{})}),e.jsx(f,{path:"/claude-plugin",element:e.jsx(Ge,{})}),e.jsx(f,{path:"/blog",element:e.jsx(Qe,{})}),e.jsx(f,{path:"/blog/:id",element:e.jsx(Fe,{})}),e.jsx(f,{path:"/pricing",element:e.jsx(Ue,{})}),e.jsx(f,{path:"/fr/pricing",element:e.jsx(Ve,{})}),e.jsx(f,{path:"/commercial",element:e.jsx(We,{})}),e.jsx(f,{path:"/contact",element:e.jsx(Be,{})}),e.jsx(f,{path:"/license",element:e.jsx(He,{})}),e.jsx(f,{path:"/privacy",element:e.jsx(Ye,{})}),e.jsx(f,{path:"/terms",element:e.jsx(Je,{})}),e.jsx(f,{path:"/fr/terms",element:e.jsx(Ke,{})}),e.jsx(f,{path:"/refund",element:e.jsx(Ze,{})}),e.jsx(f,{path:"/guillaume-lessard",element:e.jsx(Xe,{})}),e.jsx(f,{path:"/evidence",element:e.jsx(et,{})}),e.jsx(f,{path:"/changelog",element:e.jsx(tt,{})}),e.jsx(f,{path:"/technical-reference",element:e.jsx(rt,{})}),e.jsx(f,{path:"/docs",element:e.jsx(st,{})}),e.jsx(f,{path:"/installer",element:e.jsx(at,{})}),e.jsx(f,{path:"/manual",element:e.jsx(nt,{})}),e.jsx(f,{path:"/success",element:e.jsx(ot,{})}),e.jsx(f,{path:"*",element:e.jsx(it,{})})]})})})})}ee.createRoot(document.getElementById("root")).render(e.jsx(c.StrictMode,{children:e.jsx(re,{children:e.jsx(lt,{})})}));export{Oe as A,Ae as C,De as E,Le as J,_e as L,L as P,Te as Q,Pe as S,ft as T,H as a,S as b,gt as c,ut as d,Y as u}; diff --git a/assets/index-BUYYSLdX.js b/assets/index-BUYYSLdX.js deleted file mode 100644 index 39e3dedb..00000000 --- a/assets/index-BUYYSLdX.js +++ /dev/null @@ -1,3 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/About-xwac7kSw.js","assets/vendor-react-BiHfrq0e.js","assets/vendor-gsap-a3sj5zmn.js","assets/vendor-PiU4YGcH.js","assets/vendor-md-CLKxNZoa.js","assets/vendor-md-dRWncRqa.css","assets/vendor-ui-B0ssGG4c.js","assets/Decoder-Esh1GsiS.js","assets/NeuralReveal-BflyZYSb.js","assets/Workbench-DsnWT-94.js","assets/releases-1-HBloZv.js","assets/McpServer-DYX0yvB3.js","assets/ClaudePlugin-C8eza7n_.js","assets/Blog-B7IPXEkA.js","assets/blogData-OjR2ZtNr.js","assets/BlogPost-DeO2pN01.js","assets/Pricing-xevqAEll.js","assets/faqData-CHsSn8s2.js","assets/PricingFR-C8Es19li.js","assets/Commercial-e3jcuxYP.js","assets/Contact-D61L1Z0b.js","assets/CalendlyWidget-BuhQfp2_.js","assets/License-CqqH5PUX.js","assets/Privacy-CwHcJhDF.js","assets/Terms-BSR2RP9l.js","assets/TermsFR-C-UQyznI.js","assets/Refund-D6csSD1J.js","assets/Founder-BS0MLavi.js","assets/Evidence-CiRnbh9a.js","assets/Changelog-BytfgdnJ.js","assets/TechnicalReference-CGYLPxss.js","assets/Docs-DA36t10x.js","assets/Installer-CeDfnoyS.js","assets/Manual-Bgdopadc.js","assets/Success-Gvo6K55X.js","assets/NotFound-BvmxweJ_.js"])))=>i.map(i=>d[i]); -import{r as c,j as e,c as te}from"./vendor-react-BiHfrq0e.js";import{z as G,L as j,R as re,A as f,B as se}from"./vendor-PiU4YGcH.js";import{S as W,C as ae,a as ne,b as oe,R as ie,c as le,d as ce,F as de,B as xe,P as me,M as he,e as pe}from"./vendor-ui-B0ssGG4c.js";import{g as z,S as ue}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))t(l);new MutationObserver(l=>{for(const d of l)if(d.type==="childList")for(const h of d.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&t(h)}).observe(document,{childList:!0,subtree:!0});function i(l){const d={};return l.integrity&&(d.integrity=l.integrity),l.referrerPolicy&&(d.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?d.credentials="include":l.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function t(l){if(l.ep)return;l.ep=!0;const d=i(l);fetch(l.href,d)}})();const fe="modulepreload",ge=function(n){return"/"+n},B={},b=function(s,i,t){let l=Promise.resolve();if(i&&i.length>0){let u=function(x){return Promise.all(x.map(_=>Promise.resolve(_).then(N=>({status:"fulfilled",value:N}),N=>({status:"rejected",reason:N}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),p=h?.nonce||h?.getAttribute("nonce");l=u(i.map(x=>{if(x=ge(x),x in B)return;B[x]=!0;const _=x.endsWith(".css"),N=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${N}`))return;const k=document.createElement("link");if(k.rel=_?"stylesheet":fe,_||(k.as="script"),k.crossOrigin="",k.href=x,p&&k.setAttribute("nonce",p),document.head.appendChild(k),_)return new Promise((P,S)=>{k.addEventListener("load",P),k.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${x}`)))})}))}function d(h){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=h,window.dispatchEvent(p),!p.defaultPrevented)throw h}return l.then(h=>{for(const p of h||[])p.status==="rejected"&&d(p.reason);return s().catch(d)})},F=[{label:"Platform",href:"/"},{label:"Decoder",href:"/decoder"},{label:"Claude Plugin",href:"/claude-plugin"},{label:"Workbench",href:"/workbench"},{label:"MCP Server",href:"/mcp-server"},{label:"Evidence",href:"/evidence"},{label:"Blog",href:"/blog"},{label:"Pricing",href:"/pricing"},{label:"Contact",href:"/contact"}];function be(){const[n,s]=c.useState(!1),[i,t]=c.useState(!1),[l,d]=c.useState(!1),h=G(),p=c.useCallback(()=>{const x=window.scrollY;d(x>50),x>200?t(x>window.lastScrollY):t(!1),window.lastScrollY=x},[]);c.useEffect(()=>(window.addEventListener("scroll",p,{passive:!0}),()=>window.removeEventListener("scroll",p)),[p]),c.useEffect(()=>{s(!1)},[h]),c.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n]),c.useEffect(()=>{if(!n)return;const x=_=>{_.key==="Escape"&&s(!1)};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[n]);const u=x=>x==="/"?h.pathname==="/":h.pathname===x;return e.jsxs(e.Fragment,{children:[e.jsxs("nav",{"aria-label":"Main",className:`fixed top-4 left-1/2 -translate-x-1/2 z-50 w-[95%] max-w-6xl transition-all duration-500 ease-out ${i&&!n?"-translate-y-[140%]":"translate-y-0"}`,inert:i&&!n,children:[e.jsx("div",{className:`glass-nav rounded-2xl px-4 sm:px-6 py-3 transition-all duration-300 ${l?"shadow-deep":""}`,children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(j,{to:"/",className:"flex items-center gap-2.5 text-cyan-300 hover:text-cyan-100 transition-colors",children:e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"36",height:"36",className:"h-9 w-9 rounded-lg object-cover"})}),e.jsx("div",{className:"hidden lg:flex items-center gap-1",children:F.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`px-3 py-2 rounded-lg text-sm font-medium transition-all duration-300 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,children:x.label},x.href))}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(j,{to:"/pricing",className:"hidden sm:inline-flex items-center px-4 py-2 border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all duration-300",children:"Get License"}),e.jsxs("button",{onClick:()=>s(!n),className:"lg:hidden flex flex-col items-center justify-center gap-1.5 p-2 min-h-[44px] min-w-[44px] rounded-lg hover:bg-white/5 transition-colors","aria-label":h.pathname.startsWith("/fr/")?n?"Fermer le menu":"Ouvrir le menu":n?"Close menu":"Open menu","aria-expanded":n,"aria-controls":"mobile-menu",children:[e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"rotate-45 translate-y-2":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"opacity-0":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"-rotate-45 -translate-y-2":""}`})]})]})]})}),e.jsx("div",{id:"mobile-menu","aria-hidden":!n,className:`lg:hidden mt-2 glass-nav rounded-2xl overflow-hidden transition-all duration-300 ${n?"max-h-[calc(100dvh-110px)] overflow-y-auto opacity-100 visible":"max-h-0 opacity-0 invisible"}`,children:e.jsxs("div",{className:"px-4 py-3 space-y-1",children:[F.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`flex items-center px-4 py-3 min-h-[44px] rounded-lg text-sm font-medium transition-all duration-200 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,onClick:()=>s(!1),children:x.label},x.href)),e.jsx(j,{to:"/pricing",className:"sm:hidden mt-2 text-center px-4 py-3 min-h-[44px] flex items-center justify-center border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all",onClick:()=>s(!1),children:"Get License"})]})})]}),n&&e.jsx("div",{className:"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm lg:hidden",onClick:()=>s(!1)})]})}const T={version:"1.0.1",pypiPackage:"qector-decoder-v3",contactEndpoint:void 0,ogImage:"https://qector.store/images/og-banner.png"},ut="https://calendly.com/qector-info/30min?background_color=0e0d0d&text_color=ffffff&primary_color=0e4088";async function ye(){try{const s=await(await fetch("https://pypi.org/rss/project/qector-decoder-v3/releases.xml")).text(),d=(new DOMParser().parseFromString(s,"text/xml").querySelector("item title")?.textContent||"").match(/qector-decoder-v3\s+([\d.]+)/);return d?d[1]:T.version}catch{return T.version}}function K(){const[n,s]=c.useState(T.version),[i,t]=c.useState(!0);return c.useEffect(()=>{let l=!0;return ye().then(d=>{l&&(s(d),t(!1))}),()=>{l=!1}},[]),{version:n,loading:i}}const je=[{label:"QECTOR Decoder v3",href:"/decoder",badge:"Library"},{label:"Claude Code Plugin",href:"/claude-plugin",badge:"Claude"},{label:"Workbench GUI",href:"/workbench",badge:"Desktop App"},{label:"QECTOR MCP Server",href:"/mcp-server",badge:"MCP"},{label:"Installer & App Bundles",href:"/installer"},{label:"Pricing & Licensing",href:"/pricing"}],ve=[{label:"Evidence & Reports",href:"/evidence"},{label:"Technical Reference",href:"/technical-reference"},{label:"Package User Manual",href:"/manual"},{label:"Documentation Hub",href:"/docs"},{label:"Version Changelog",href:"/changelog"}],Ne=[{label:"About QECTOR",href:"/about"},{label:"Guillaume Lessard (Founder)",href:"/guillaume-lessard"},{label:"iD01t Productions"},{label:"Commercial Licensing",href:"/commercial"},{label:"Contact Engineering",href:"/contact"},{label:"EULA & License",href:"/license"},{label:"Terms of Service",href:"/terms"},{label:"Privacy Policy",href:"/privacy"},{label:"Refund Policy",href:"/refund"}];function M({href:n,external:s,badge:i,children:t}){const l="group flex items-center justify-between gap-3 min-h-[44px] py-1.5 text-secondary hover:text-cyan-300 text-sm transition-colors duration-200",d=e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"group-hover:translate-x-0.5 transition-transform duration-200",children:t}),i&&e.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded bg-surface border border-gridline text-muted-foreground group-hover:border-cyan-300/30 group-hover:text-cyan-300 transition-colors",children:i})]});return n?s?e.jsxs("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:l,children:[d,e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}):e.jsx(j,{to:n,className:l,children:d}):e.jsx("span",{className:l,children:d})}function we(){const{version:n}=K();return e.jsxs("footer",{className:"border-t border-cyan-900/40 bg-void/95 relative overflow-hidden text-left",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-1/2 h-16 bg-gradient-to-b from-cyan-400/5 to-transparent blur-3xl pointer-events-none"}),e.jsx("div",{className:"section-padding py-16 relative z-10",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12 lg:gap-8",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[e.jsxs(j,{to:"/",className:"inline-flex items-center gap-3 text-cyan-300 hover:text-cyan-100 transition-colors duration-200",children:[e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"40",height:"40",className:"h-10 w-10 rounded-lg object-cover"}),e.jsxs("span",{className:"text-lg font-extrabold tracking-tight text-white",children:["QECTOR",e.jsx("span",{className:"text-cyan-300",children:"."})]})]}),e.jsx("p",{className:"text-secondary/80 text-sm leading-relaxed max-w-sm",children:"Quantum error correction decoding for Python. Built by Guillaume Lessard at iD01t Productions."}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] text-muted-foreground hover:text-cyan-300 transition-colors","aria-label":"PyPI",children:[e.jsxs("span",{className:"text-sm font-mono border border-gridline rounded px-2 py-1 hover:border-cyan-300/30",children:["v",n]}),e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"GitHub",children:["GitHub",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"ORCID",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Platform"}),e.jsx("div",{className:"flex flex-col gap-1",children:je.map(s=>e.jsx(M,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Research & Docs"}),e.jsx("div",{className:"flex flex-col gap-1",children:ve.map(s=>e.jsx(M,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Company"}),e.jsx("div",{className:"flex flex-col gap-1",children:Ne.slice(0,5).map(s=>e.jsx(M,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]})]}),e.jsxs("div",{className:"mt-16 pt-8 border-t border-gridline flex flex-col md:flex-row items-start md:items-center justify-between gap-6",children:[e.jsxs("div",{className:"text-xs text-muted-foreground max-w-xl leading-relaxed",children:[e.jsx("span",{className:"font-semibold text-secondary",children:"Distribution:"})," PyPI (",e.jsx("code",{className:"text-cyan-300/80 font-mono",children:"qector-decoder-v3"}),") is the Python library. The free ",e.jsx(j,{to:"/installer",className:"link-accent",children:"Workbench GUI"})," is a standalone desktop application shipped self-contained for Windows x64 and Linux x64 (no system Python required)."]}),e.jsxs("nav",{"aria-label":"Legal",className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs font-medium text-muted-foreground",children:[e.jsx(j,{to:"/privacy",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Privacy"}),e.jsx(j,{to:"/terms",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Terms"}),e.jsx(j,{to:"/refund",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Refund"}),e.jsx(j,{to:"/license",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"License"}),e.jsxs("a",{href:"/.well-known/security.txt",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:["Security",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]})]})}),e.jsx("div",{className:"bg-[#050b14]",children:e.jsx("div",{className:"section-padding py-4",children:e.jsxs("div",{className:"max-w-7xl mx-auto text-xs text-muted-foreground/70 text-center md:text-left",children:["© 2026 QECTOR Lab / iD01t Productions. All rights reserved.",e.jsx("div",{className:"mt-1",children:"Éditeur : Guillaume Lessard, entrepreneur individuel (iD01t Productions), 2004 De Lorimier, Longueuil, QC J4K 3H7, Canada · admin@qector.store"})]})})})]})}function ke({children:n}){const s=G();return c.useEffect(()=>{window.scrollTo(0,0),document.documentElement.lang=s.pathname.startsWith("/fr/")?"fr":"en",document.getElementById("main-content")?.focus();const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t=(h=document)=>{h.querySelectorAll(".card-surface:not(.revealed), .prose:not(.revealed)").forEach(p=>{i?p.classList.add("revealed"):l.observe(p)})},l=new IntersectionObserver(h=>{h.forEach(p=>{p.isIntersecting&&(p.target.classList.add("revealed"),l.unobserve(p.target))})},{threshold:.1,rootMargin:"0px 0px -10% 0px"});let d=null;return i||(d=new MutationObserver(h=>{h.forEach(p=>{p.addedNodes.forEach(u=>{u.nodeType===Node.ELEMENT_NODE&&t(u)})})}),d.observe(document.body,{childList:!0,subtree:!0})),t(),()=>{l.disconnect(),d&&d.disconnect()}},[s.pathname]),e.jsxs("div",{className:"min-h-screen bg-void text-foreground quantum-grid-bg relative",children:[e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-cyan-300 focus:text-void focus:font-semibold focus:rounded-lg",children:s.pathname.startsWith("/fr/")?"Aller au contenu principal":"Skip to main content"}),e.jsx(be,{}),e.jsx("main",{id:"main-content",tabIndex:-1,className:"pt-20 outline-none",children:n}),e.jsx(we,{})]})}class Ee extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(s,i){console.error("QECTOR site error boundary caught:",s,i.componentStack)}handleReload=()=>{this.setState({hasError:!1}),window.location.href="/"};render(){return this.state.hasError?e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-void px-6",children:e.jsxs("div",{className:"max-w-md text-center card-surface",children:[e.jsx("div",{className:"w-12 h-12 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center mx-auto mb-4 text-cyan-300 text-xl",children:"!"}),e.jsx("h1",{className:"text-xl font-bold text-primary mb-2",children:"Something went wrong"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"This page hit an unexpected error. No page data was sent; check the browser console for the local error and reload."}),e.jsx("button",{onClick:this.handleReload,className:"btn-cyan",children:"Reload homepage"})]})}):this.props.children}}function _e(){return e.jsx("div",{className:"min-h-[60vh] flex items-center justify-center",role:"status","aria-live":"polite",children:e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 border-2 border-cyan-300/20 border-t-cyan-300 rounded-full animate-spin"}),e.jsx("span",{className:"sr-only",children:"Loading page…"})]})})}const H={proMonthly:"https://buy.stripe.com/5kQcN7eAp3BM5RE5ZMeUU0g",proAnnual:"https://buy.stripe.com/8x228teAp6NY6VI87UeUU0h",proPerpetual:"https://buy.stripe.com/dRm00l0Jzfku4NA0FseUU0i",lab:"https://buy.stripe.com/aFa7sN9g5fku0xk5ZMeUU0k",pilot:"https://buy.stripe.com/14AeVf9g5b4e0xkdseeUU0l"},L={proMonthly:79,proAnnual:790,proPerpetual:1990,lab:9900,pilot:1500,enterpriseFrom:25e3,pilotDays:60,refundDays:14,academicDiscountPct:40},R=n=>`$${n.toLocaleString("en-US")}`,ft=n=>`${n.toLocaleString("fr-CA").replace(/[\u00a0\u202f]/g," ")} $`,Ce={en:"en_US",fr:"fr_FR"};function Pe({title:n="QECTOR · Quantum Error Correction Decoding for Python",description:s="QECTOR Decoder v3 - Rust-core Python quantum error correction decoder. v1.0.1 stable release with API stability tiers, a qector CLI, and a reproducible measurement harness (qector bench) for measuring on your own hardware.",ogImage:i=T.ogImage,noindex:t=!1,lang:l="en",alternates:d}){const h=G(),p=`https://qector.store${h.pathname==="/"?"/":`${h.pathname.replace(/\/$/,"")}/`}`;return c.useEffect(()=>{document.title=n,document.documentElement.lang=l;const u=(N,k)=>{let P=document.querySelector(N);if(!P){P=document.createElement("meta");const S=N.includes("property=")?"property":"name",O=N.match(/"([^"]+)"/)?.[1]||"";P.setAttribute(S,O),document.head.appendChild(P)}P.content=k};u('meta[name="description"]',s),u('meta[name="robots"]',t?"noindex, follow":"index, follow, max-image-preview:large"),u('meta[property="og:title"]',n),u('meta[property="og:description"]',s),u('meta[property="og:url"]',p),u('meta[property="og:type"]',"website"),u('meta[property="og:locale"]',Ce[l]??"en_US"),u('meta[property="og:image"]',i),u('meta[property="og:image:alt"]',"QECTOR official logo"),u('meta[property="og:site_name"]',"QECTOR"),u('meta[name="twitter:card"]',"summary_large_image"),u('meta[name="twitter:title"]',n),u('meta[name="twitter:description"]',s),u('meta[name="twitter:image"]',i),u('meta[name="twitter:image:alt"]',"QECTOR official logo"),u('meta[name="twitter:site"]',"@DJiD01T"),u('meta[name="theme-color"]',"#24e7ff");let x=document.querySelector('link[rel="canonical"]');x||(x=document.createElement("link"),x.rel="canonical",document.head.appendChild(x)),x.href=p,document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(N=>N.remove());const _=[];for(const N of d??[]){const k=document.createElement("link");k.rel="alternate",k.hreflang=N.lang,k.href=N.href,document.head.appendChild(k),_.push(k)}return()=>{_.forEach(N=>N.remove())}},[n,s,p,i,t,l,d]),null}function Le({data:n}){const s="json-ld-data";return c.useEffect(()=>{let i=document.getElementById(s);return i||(i=document.createElement("script"),i.id=s,i.type="application/ld+json",document.head.appendChild(i)),i.textContent=JSON.stringify(n),()=>{const t=document.getElementById(s);t&&t.remove()}},[n]),null}function Re({icon:n,label:s,href:i,variant:t="default",className:l=""}){const d=t==="gold"?"bg-gold-400/10 border border-gold-400/30 text-gold-400 hover:bg-gold-400/20":"bg-surface border border-gridline text-secondary hover:text-cyan-300 hover:border-cyan-300/30";return e.jsxs("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:`inline-flex items-center gap-2 px-4 py-2.5 rounded-full text-sm transition-all duration-300 ${d} ${l}`,children:[e.jsx("span",{"aria-hidden":"true",children:n}),e.jsx("span",{children:s})]})}function J({eyebrow:n,heading:s,description:i,align:t="center",maxWidth:l="max-w-3xl",className:d=""}){const h=t==="center"?"text-center mx-auto":"text-left",p=t==="center"?"mx-auto":"";return e.jsxs("div",{className:`${l} ${h} mb-12 md:mb-16 ${d}`,children:[n&&e.jsx("span",{className:"eyebrow-pill mb-4",children:n}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-balance mb-4",children:s}),i&&e.jsx("p",{className:`text-secondary text-lg leading-relaxed text-pretty max-w-prose ${p}`,children:i})]})}const Se={cyan:"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20",green:"bg-green-400/10 text-green-400 border border-green-400/20",purple:"bg-purple-400/10 text-purple-400 border border-purple-400/20",gold:"bg-gold-400/10 text-gold-400 border border-gold-400/20"};function Oe({title:n,tag:s,badge:i,desc:t,proof:l,muted:d=!1,className:h=""}){return e.jsxs("div",{className:`card-surface group ${d?"border-gridline/50 opacity-80":""} ${h}`,children:[s&&e.jsx("div",{className:"text-muted-foreground text-xs font-mono uppercase tracking-wider mb-2",children:s}),e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e.jsx("h3",{className:`font-semibold text-lg transition-colors ${d?"text-gold-400/80":"text-cyan-300 group-hover:text-cyan-200"}`,children:n}),i&&e.jsx("span",{className:`shrink-0 px-2.5 py-1 rounded-full text-xs font-medium ${d?"bg-gold-400/5 text-gold-400/60 border border-gold-400/20":Se[i.color]}`,children:i.label})]}),e.jsx("p",{className:`leading-relaxed ${d?"text-muted-foreground text-sm":"text-secondary"}`,children:t}),l&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-gridline/60 flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{className:"text-muted-foreground font-mono",children:l})]})]})}function Ae({title:n,statement:s,href:i,linkLabel:t="View evidence →",className:l=""}){return e.jsxs("div",{className:`relative rounded-2xl border border-cyan-300/20 bg-void p-6 overflow-hidden ${l}`,children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none bg-gradient-to-br from-cyan-300/5 to-transparent"}),e.jsxs("div",{className:"relative z-10",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300"}),e.jsx("span",{className:"text-xs font-mono uppercase tracking-wider text-cyan-300",children:n})]}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:s}),i&&e.jsx("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm font-medium hover:underline underline-offset-4",children:t})]})]})}function De(){const[n,s]=c.useState({}),[i,t]=c.useState({}),[l,d]=c.useState(!1),[h,p]=c.useState(!1),u=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)for(let o=0;o<3;o++)a.push({id:`${r}_${o}`,r,c:o,x:120+o*100,y:60+r*100});return a},[]),x=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)a.push({id:`L_${r}`,type:"L",r,c:-1,x1:30,y1:60+r*100,x2:120,y2:60+r*100});for(let r=0;r<3;r++)a.push({id:`R_${r}`,type:"R",r,c:3,x1:320,y1:60+r*100,x2:410,y2:60+r*100});for(let r=0;r<3;r++)for(let o=0;o<2;o++)a.push({id:`H_${r}_${o}`,type:"H",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+(o+1)*100,y2:60+r*100});for(let r=0;r<2;r++)for(let o=0;o<3;o++)a.push({id:`V_${r}_${o}`,type:"V",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+o*100,y2:60+(r+1)*100});return a},[]),_=c.useMemo(()=>{const a={},r=o=>{a[o]=!a[o]};return x.forEach(o=>{n[o.id]&&(o.type==="H"?(r(`${o.r}_${o.c}`),r(`${o.r}_${o.c+1}`)):o.type==="V"?(r(`${o.r}_${o.c}`),r(`${o.r+1}_${o.c}`)):o.type==="L"?r(`${o.r}_0`):o.type==="R"&&r(`${o.r}_2`))}),Object.keys(a).forEach(o=>{a[o]||delete a[o]}),a},[n,x]),N=a=>{t({}),d(!1),s(r=>({...r,[a]:!r[a]}))},k=()=>{s({}),t({}),d(!1)},P=(a=.2)=>{t({}),d(!1);const r={};x.forEach(o=>{Math.random()Math.abs(a.r-r.r)+Math.abs(a.c-r.c),O=c.useCallback((a,r)=>{const o=[],E=Math.min(a.r,r.r),g=Math.max(a.r,r.r),w=a.r{const a=Object.keys(_).map(g=>{const[w,m]=g.split("_").map(Number);return u.find(y=>y.r===w&&y.c===m)});if(a.length===0){t({}),d(!0);return}const r=g=>{if(g.length===0)return{cost:0,pairs:[]};const w=g[0],m=g.slice(1);let y=1/0,v=[];const C=w.c+1,I=r(m);C+I.costee!==A),$=r(X);U+$.cost{if(g==="L"||g==="R"||w==="L"||w==="R"){const m=g==="L"||g==="R"?w:g;if((g==="L"||g==="R"?g:w)==="L"){for(let v=0;v{E[y]=!0})}),t(E),d(!0)},[_,u,O]),Z=c.useMemo(()=>{if(!l)return"idle";const a=x.filter(m=>{const y=n[m.id]||!1,v=i[m.id]||!1;return y!==v}),r={},o=(m,y)=>{r[m]||(r[m]=[]),r[y]||(r[y]=[]),r[m].push(y),r[y].push(m)};a.forEach(m=>{m.type==="H"?o(`${m.r}_${m.c}`,`${m.r}_${m.c+1}`):m.type==="V"?o(`${m.r}_${m.c}`,`${m.r+1}_${m.c}`):m.type==="L"?o("L",`${m.r}_0`):m.type==="R"&&o("R",`${m.r}_2`)});const E={},g=["L"];E.L=!0;let w=!1;for(;g.length>0;){const m=g.shift();if(m==="R"){w=!0;break}(r[m]||[]).forEach(v=>{E[v]||(E[v]=!0,g.push(v))})}return w?"failure":"success"},[l,n,i,x]);return e.jsxs("div",{className:"flex flex-col gap-4 border border-gridline bg-surface/30 rounded-2xl p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider flex items-center gap-1.5",children:[e.jsx(W,{className:"w-4 h-4"}),"Interactive QEC Simulator"]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-0.5",children:"Planar stabilizer code (d=3). Click edges to toggle physical errors."})]}),e.jsx("button",{onClick:()=>p(!h),className:"min-h-[44px] min-w-[44px] inline-flex items-center justify-center text-secondary hover:text-cyan-300 transition-colors","aria-label":"Toggle help",children:e.jsx(ae,{className:"w-5 h-5"})})]}),h&&e.jsxs("div",{className:"p-4 bg-void/80 border border-gridline rounded-xl text-xs text-secondary leading-relaxed space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"How to play:"})," Click on the links (grey/red lines) to inject physical errors. Red lines represent errors."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Syndromes:"})," Grid nodes measure checks. When adjacent errors are odd, a check triggers (lights up orange)."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Decoder:"})," Minimum Weight Perfect Matching (MWPM) matches active checks. When you click ",e.jsx("span",{className:"text-cyan-300",children:"Run Decoder"}),", it draws matching correction paths in cyan."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Success condition:"})," If error + correction paths do not form a logical connection across boundaries (from left to right), the state is successfully corrected!"]})]}),e.jsxs("div",{className:"bg-void/50 border border-gridline rounded-xl flex items-center justify-center p-4 relative overflow-hidden",children:[e.jsxs("svg",{viewBox:"0 0 440 320",className:"w-full max-w-[440px] h-auto select-none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsxs("defs",{children:[e.jsxs("radialGradient",{id:"activeNodeGlow",cx:"50%",cy:"50%",r:"50%",children:[e.jsx("stop",{offset:"0%",stopColor:"#fef08a"}),e.jsx("stop",{offset:"60%",stopColor:"#eab308"}),e.jsx("stop",{offset:"100%",stopColor:"#a16207"})]}),e.jsxs("linearGradient",{id:"inactiveNodeGlow",x1:"0",y1:"0",x2:"1",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#1e293b"}),e.jsx("stop",{offset:"100%",stopColor:"#0f172a"})]}),e.jsx("pattern",{id:"gridDots",width:"20",height:"20",patternUnits:"userSpaceOnUse",children:e.jsx("circle",{cx:"2",cy:"2",r:"1",fill:"#1e293b",fillOpacity:"0.6"})})]}),e.jsx("rect",{width:"440",height:"320",fill:"url(#gridDots)",rx:"10"}),e.jsx("line",{x1:"30",y1:"30",x2:"30",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"20",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(-90, 20, 165)",className:"font-mono",children:"LEFT BOUNDARY"}),e.jsx("line",{x1:"410",y1:"30",x2:"410",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"420",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(90, 420, 165)",className:"font-mono",children:"RIGHT BOUNDARY"}),x.map(a=>{const r=n[a.id]||!1,o=i[a.id]||!1;let E="#334155";return r&&o?E="#e2e8f0":r?E="#ef4444":o&&(E="#06b6d4"),e.jsxs("g",{className:"group",children:[e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:"transparent",strokeWidth:"16",className:"cursor-pointer",tabIndex:0,role:"checkbox","aria-checked":r,"aria-label":`Toggle error on qubit edge ${a.id}`,onClick:()=>N(a.id),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),N(a.id))}}),e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:E,strokeWidth:r||o?4:2,className:"transition-colors duration-200 pointer-events-none group-hover:stroke-cyan-300/40",style:{filter:r?"drop-shadow(0 0 4px rgba(239, 68, 68, 0.4))":o?"drop-shadow(0 0 4px rgba(6, 182, 212, 0.4))":"none"}}),e.jsx("circle",{cx:(a.x1+a.x2)/2,cy:(a.y1+a.y2)/2,r:"5",fill:r?"#ef4444":o?"#06b6d4":"#1e293b",stroke:r||o?"#e2e8f0":"#475569",strokeWidth:"1.5",className:"transition-colors duration-200 pointer-events-none group-hover:fill-cyan-300 group-hover:stroke-cyan-200"})]},a.id)}),u.map(a=>{const r=_[a.id]||!1;return e.jsxs("g",{children:[r&&e.jsx("circle",{cx:a.x,cy:a.y,r:"18",fill:"rgba(251, 191, 36, 0.15)",className:"animate-pulse"}),e.jsx("circle",{cx:a.x,cy:a.y,r:r?12:9,fill:r?"url(#activeNodeGlow)":"url(#inactiveNodeGlow)",stroke:r?"#fbbf24":"#334155",strokeWidth:r?2:1.5,className:"transition-all duration-300 pointer-events-none",style:{filter:r?"drop-shadow(0 0 10px rgba(251, 191, 36, 0.7))":"none"}}),e.jsx("circle",{cx:a.x-(r?3:2),cy:a.y-(r?3:2),r:r?3:2,fill:"white",fillOpacity:"0.25",className:"pointer-events-none"}),r&&e.jsx("circle",{cx:a.x,cy:a.y,r:20,fill:"transparent",stroke:"#fbbf24",strokeWidth:"1",strokeOpacity:"0.4",className:"animate-ping"}),e.jsx("text",{x:a.x,y:a.y+3,textAnchor:"middle",fill:r?"#020617":"#94a3b8",fontSize:"9",fontWeight:"bold",className:"font-mono text-[9px] pointer-events-none",children:r?"!":"S"})]},a.id)})]}),l&&e.jsxs("div",{className:"absolute bottom-3 left-3 right-3 flex items-center justify-between p-3 bg-surface/90 border border-gridline rounded-xl backdrop-blur-md transition-all duration-300",children:[Z==="success"?e.jsxs("div",{className:"flex items-center gap-2 text-green-400 text-sm font-semibold",children:[e.jsx(ne,{className:"w-5 h-5"}),e.jsx("span",{children:"SUCCESS: Errors resolved"})]}):e.jsxs("div",{className:"flex items-center gap-2 text-red-400 text-sm font-semibold",children:[e.jsx(oe,{className:"w-5 h-5"}),e.jsx("span",{children:"LOGICAL ERROR: Correction failed"})]}),e.jsx("div",{className:"text-[10px] text-muted-foreground font-mono",children:"d=3 code slice"})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("button",{onClick:()=>P(.2),className:"px-3 py-3 bg-surface hover:bg-white/5 border border-gridline rounded-lg text-xs font-semibold text-secondary hover:text-primary transition-all flex items-center justify-center gap-1.5",children:[e.jsx(W,{className:"w-3.5 h-3.5"}),"Inject Errors"]}),e.jsxs("button",{onClick:Y,disabled:Object.keys(_).length===0,className:"px-3 py-3 bg-cyan-300 disabled:bg-cyan-300/20 disabled:text-void/40 hover:bg-cyan-200 text-void rounded-lg text-xs font-bold transition-all flex items-center justify-center gap-1.5",children:[e.jsx(ie,{className:`w-3.5 h-3.5 ${l?"":"animate-spin"}`}),"Run Decoder"]}),e.jsx("button",{onClick:k,className:"px-3 py-3 bg-surface hover:bg-red-950/20 border border-gridline hover:border-red-900/30 rounded-lg text-xs font-semibold text-secondary hover:text-red-400 transition-all",children:"Reset Graph"})]})]})}function Te({code:n,language:s="python",filename:i,className:t=""}){const[l,d]=c.useState(!1),h=async()=>{try{await navigator.clipboard.writeText(n),d(!0),setTimeout(()=>d(!1),2e3)}catch(p){console.error("Failed to copy text: ",p)}};return e.jsxs("div",{className:`my-4 border border-gridline rounded-xl overflow-hidden bg-void/50 ${t}`,children:[i&&e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gridline bg-surface/50 text-xs font-mono text-muted-foreground",children:[e.jsx("span",{children:i}),e.jsx("span",{className:"uppercase text-[10px] bg-cyan-300/10 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-300/20",children:s})]}),e.jsxs("div",{className:"relative group",children:[e.jsx("pre",{className:"p-4 pr-14 overflow-x-auto overflow-y-auto font-mono text-sm leading-relaxed text-secondary bg-void/30 max-h-[400px]",children:e.jsx("code",{className:`language-${s}`,children:n})}),e.jsx("button",{onClick:h,className:"absolute top-3 right-3 p-1.5 bg-surface border border-gridline rounded-lg text-secondary hover:text-cyan-300 hover:border-cyan-300/30 opacity-0 group-hover:opacity-100 focus:opacity-100 max-sm:opacity-100 transition-all duration-200","aria-label":l?"Copied":"Copy code",children:l?e.jsx(le,{className:"w-4 h-4 text-green-400"}):e.jsx(ce,{className:"w-4 h-4"})}),e.jsx("span",{className:"sr-only","aria-live":"polite",children:l?"Code copied to clipboard":""})]})]})}z.registerPlugin(ue);function D({value:n,label:s}){return e.jsxs("div",{className:"text-center px-4 py-3",children:[e.jsx("div",{className:"text-2xl font-bold text-cyan-300",children:n}),e.jsx("div",{className:"text-xs text-muted-foreground leading-tight max-w-[11rem] mx-auto",children:s})]})}function Ie(){const n=c.useRef([]),{version:s}=K();c.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const t=document.createElement("script");t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t);const l=z.context(()=>{n.current.filter(Boolean).forEach(h=>{z.fromTo(h,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power2.out",scrollTrigger:{trigger:h,start:"top 85%",once:!0}})})});return()=>{l.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const i=(t,l)=>{t&&(n.current[l]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(Pe,{title:"QECTOR · Quantum Error Correction Decoding for Python",description:"QECTOR Decoder v3 - Rust-core Python library with 17 concrete decoder configurations plus 2 Workbench routing kinds, a syndrome-faithful contract, and reproducible validation guidance."}),e.jsx(Le,{data:{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"QECTOR Decoder v3 is the qector-decoder-v3 1.0.1 Rust/Python quantum error correction package with 17 concrete decoder configurations plus 2 Workbench routing kinds, offline Ed25519 licensing, and reproducible validation guidance.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:s,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://github.com/GuillaumeLessard"},maintainer:{"@type":"Organization",name:"iD01t Productions"},identifier:"https://pypi.org/project/qector-decoder-v3/",license:"https://qector.store/license/",offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}},{"@type":"Organization",name:"QECTOR",url:"https://qector.store/",logo:"https://qector.store/images/logo.png",email:"admin@qector.store",founder:{"@type":"Person",name:"Guillaume Lessard",identifier:"0009-0000-3465-3753"},address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-claude-plugin","https://orcid.org/0009-0000-3465-3753"]}]}}),e.jsxs("section",{className:"relative min-h-screen flex items-center justify-center overflow-hidden","aria-label":"QECTOR hero",children:[e.jsx("img",{src:"/images/hero-bg.webp",alt:"","aria-hidden":"true",fetchPriority:"high",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.45) saturate(1.1)"}}),e.jsx("noscript",{children:e.jsx("img",{src:"/images/og-banner.png",alt:"","aria-hidden":"true",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.4)"}})}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-void/60 via-void/25 to-void z-[1]"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-500/[0.04] to-transparent z-[1]"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-5xl mx-auto px-6 pt-24 pb-20",children:[e.jsxs(j,{to:"/changelog",className:"inline-flex max-w-full flex-wrap items-center justify-center gap-2 px-4 py-2 bg-surface/70 border border-cyan-300/20 rounded-full text-center text-xs leading-relaxed text-cyan-300 hover:bg-cyan-300/10 transition-all mb-8 backdrop-blur-sm",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-green-400 animate-pulse-dot"}),e.jsxs("span",{children:["v",s," · First Stable Release · Changelog →"]})]}),e.jsxs("h1",{className:"max-w-4xl mx-auto break-words text-3xl sm:text-5xl md:text-6xl lg:text-7xl font-extrabold tracking-tight leading-[1.05] mb-6",style:{textShadow:"0 4px 32px rgba(0,0,0,0.9)"},children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"QEC Decoding"})," ","for Python"]}),e.jsxs("p",{className:"text-base sm:text-lg md:text-xl text-secondary/90 max-w-3xl mx-auto mb-5 leading-relaxed break-words",style:{textShadow:"0 2px 16px rgba(0,0,0,0.8)"},children:["The 1.0.x runtime ships 17 concrete decoder configurations, while Workbench v1.0.7 names 19 kinds in total: those configurations plus AutoDecoder and Auto Router orchestration entries."," ",e.jsx("span",{className:"text-primary font-semibold",children:"1.0.1 is the current stable release:"})," API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points and the qector CLI."]}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed",style:{textShadow:"0 2px 12px rgba(0,0,0,0.8)"},children:"Local measurement tools are documented for declared workloads; this site publishes no universal performance figures. Claim boundaries and verification paths are published with the product documentation."}),e.jsxs("div",{className:"flex flex-col sm:flex-row flex-wrap gap-3 sm:gap-4 justify-center items-stretch sm:items-center mb-10",children:[e.jsx(j,{to:"/pricing",className:"btn-gold px-8 py-4 text-sm sm:text-base font-bold w-full sm:w-auto",children:"View Plans & Pricing →"}),e.jsx(j,{to:"/decoder",className:"btn-cyan px-8 py-4 text-sm sm:text-base w-full sm:w-auto",children:"Explore the Decoder"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/latest",className:"btn-outline px-8 py-4 text-sm sm:text-base w-full sm:w-auto",target:"_blank",rel:"noopener noreferrer",children:"Free Workbench GUI"})]}),e.jsx("div",{className:"max-w-2xl mx-auto mb-10 text-left",children:e.jsx(Te,{language:"bash",filename:"Quick start",code:`pip install qector-decoder-v3==${s} -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 md:divide-x md:divide-white/5 border-t border-white/5 pt-6 max-w-2xl mx-auto",children:[e.jsx(D,{value:"19",label:"Workbench Kinds (17 + 2 routing)"}),e.jsx(D,{value:"GF(2)",label:"Faithfulness Contract"}),e.jsx(D,{value:"CPU + GPU",label:"Optional Execution Paths"}),e.jsx(D,{value:"Open",label:"Evidence Policy"})]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-10 p-5 md:p-6 bg-surface/50 border border-cyan-300/20 rounded-2xl text-center shadow-lg backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] text-cyan-300 font-semibold tracking-[0.2em] mb-2 uppercase",children:"Evidence policy"}),e.jsx("div",{className:"text-lg md:text-xl font-bold text-primary tracking-tight mb-2",children:"No hardware-specific results published"}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed max-w-lg mx-auto",children:["QECTOR publishes contracts, methodology, and artifacts rather than portable speed numbers. Read the ",e.jsx(j,{to:"/evidence",className:"link-accent",children:"evidence policy"})," before generating a local measurement."]})]})]})]}),e.jsx("section",{className:"section-band bg-surface/20 border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill-gold mb-4",children:"Release Assurance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"A Clear Path From Code to Evidence"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"The public release, validation contract, and commercial delivery path are explicit by design."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Current Runtime"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"qector-decoder-v3 1.0.1"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"The live PyPI release supports Python 3.9 through 3.14 with 18 binary wheels across Windows, Linux, and macOS, each with build provenance."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Contract"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Correctness before speed"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Every correction is checked against H c = s (mod 2). Measurements stay workload-scoped, artifact-hashed, and separate from universal performance claims."})]}),e.jsxs("div",{className:"card-surface p-6 border-gold-400/20",children:[e.jsx("div",{className:"text-gold-400 font-mono text-xs uppercase tracking-wider mb-3",children:"Secure Delivery"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Signed, traceable licensing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Commercial fulfillment requires a live Stripe event, issues a v2 Ed25519 token, and records independent billing and license delivery states."}),e.jsx(j,{to:"/license",className:"inline-block text-gold-400 text-sm font-medium hover:underline mt-3",children:"Read the license activation procedure →"})]})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Registry"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 text-sm",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Normative reference manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"v1.0.0 user manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Verification and proof bundle"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.22046403"})]})]})]})]})}),e.jsx("section",{className:"section-thin border-t border-b border-gridline/30 bg-void/80",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto text-center",children:[e.jsx("p",{className:"text-xs text-muted-foreground uppercase tracking-widest mb-8",children:"Works with your existing stack"}),e.jsxs("div",{className:"flex flex-wrap justify-center items-center gap-x-12 gap-y-8",children:[e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Stim"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install stim"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Sinter"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install sinter"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Qiskit"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install qiskit-qec"})]})]})]})})}),e.jsx("section",{ref:t=>i(t,0),className:"py-8 bg-void",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-7xl mx-auto flex flex-wrap justify-center gap-3",children:[{icon:e.jsx(de,{size:16}),label:"Artifacts (GitHub)",href:"https://github.com/GuillaumeLessard/qector-decoder"},{icon:e.jsx(xe,{size:16}),label:"Mastering QEC · Google Play",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",gold:!0},{icon:e.jsx(me,{size:16}),label:`PyPI Wheel v${s}`,href:"https://pypi.org/project/qector-decoder-v3/"},{icon:e.jsx(he,{size:16}),label:"Free Workbench App",href:"/workbench"},{icon:e.jsx(pe,{size:16}),label:"ORCID 0009-0000-3465-3753",href:"https://orcid.org/0009-0000-3465-3753"}].map(t=>e.jsx(Re,{icon:t.icon,label:t.label,href:t.href,variant:t.gold?"gold":"default"},t.label))})})}),e.jsx("section",{className:"section-band bg-void border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Proof Suite"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"Executable Verification for v1.0.0"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"Hashed-lock reproducible install, CERT_STRICT gate, and Lean/Coq kernel evidence - verifiable against Reference Manual v1.0.0."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reproducible Install"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Hashed-lock & CERT_STRICT"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Proof runs are hashed-locked and gated by CERT_STRICT - no universal benchmark figures, only workload-scoped artifacts."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reference Manual v1.0.0"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"DOI 10.5281/zenodo.21941046"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Normative manual with syndrome-faithfulness foundations, 15 backends, and API stability tiers. All proofs trace to this document."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Lean/Coq Evidence"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Kernel-checked proofs"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Executable suite checks GF(2) invariants and logical cosets with Lean/Coq kernels - evidence, not claims."})]})]}),e.jsxs("div",{className:"text-center mt-8",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-proof",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"View qector-proof on GitHub"}),e.jsx("span",{className:"text-muted-foreground text-xs ml-3",children:"github.com/GuillaumeLessard/qector-proof"})]})]})}),e.jsx("section",{className:"section-feature bg-surface/30 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,1),className:"text-center mb-14",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"How It Works"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"From Installation to Validation"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"QECTOR integrates directly into your existing QEC workflow with minimal friction."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:[{step:"01",title:"Install",desc:"Install the 1.0.1 wheel in a supported Python 3.9-3.14 environment alongside your existing Stim or PyMatching workflow.",detail:'pip install --upgrade "qector-decoder-v3>=1.0,<2"',code:!0},{step:"02",title:"Decode",desc:"Access 17 concrete Rust-accelerated decoder configurations through a unified Python API. Workbench also exposes AutoDecoder and Auto Router as two orchestration kinds, for 19 named kinds in total.",detail:"from qector_decoder_v3 import BlossomDecoder, BpOsdDecoder",code:!0},{step:"03",title:"Validate",desc:"Claims are scoped to a declared workload and backed by SHA-256 sealed artifacts. Run qector-doctor before relying on optional paths and preserve the report with the result.",detail:"evidence policy · SHA-256 sealed",code:!1}].map(t=>e.jsxs("div",{className:"card-surface p-6 relative",children:[e.jsx("div",{className:"text-4xl font-black text-cyan-300/20 absolute top-4 right-4 select-none",children:t.step}),e.jsx("div",{className:"w-10 h-10 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 font-bold text-sm mb-4",children:t.step}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:t.desc}),t.code&&e.jsx("code",{className:"block text-xs bg-void border border-gridline rounded-lg px-3 py-2 text-cyan-300 font-mono overflow-x-auto",children:t.detail}),!t.code&&e.jsx("span",{className:"inline-flex items-center gap-1.5 text-xs text-cyan-300 font-mono bg-cyan-300/5 px-3 py-1.5 rounded-lg border border-cyan-300/10",children:t.detail})]},t.step))})]})}),e.jsxs("section",{id:"platform",className:"section-feature relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:"radial-gradient(circle at center, rgba(103, 232, 249, 0.06) 0%, transparent 70%)"}}),e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("div",{ref:t=>i(t,2),children:e.jsx(J,{eyebrow:"Why QECTOR",heading:"More Than Just MWPM",description:"QEC decoding is not one-size-fits-all. Surface codes, qLDPC codes, optional batch paths, and simulation workloads each demand different decoders. QECTOR documents the supported contracts and the evidence needed to evaluate a selected workload."})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[{title:"Blossom MWPM (Exact)",tag:"Blossom",desc:"Weight-optimal exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes.",proof:"Exact optimal matching · Stim-native"},{title:"qLDPC Support",tag:"BP-OSD (qLDPC)",desc:"Matching decoders are restricted to graphlike structures. BP-OSD handles reachable arbitrary GF(2) check matrices, including LDPC and qLDPC workloads.",proof:"Hyperedge-safe GF(2) path"},{title:"Workload-Scoped Execution",tag:"Union-Find + Optional GPU",desc:"Union-Find and optional GPU batch paths are available for supported workloads. Availability and performance must be verified on the target environment.",proof:"Environment-dependent paths"},{title:"One Library, Pluggable",tag:"Stim · PyMatching · Sinter · Qiskit",desc:"Drop QECTOR into any existing Stim or PyMatching workflow. Same API surface, swappable backend. No vendor lock-in.",proof:"Drop-in, same API surface"}].map((t,l)=>e.jsx("div",{ref:d=>i(d,3+l),children:e.jsx(Oe,{title:t.title,tag:t.tag,desc:t.desc,proof:t.proof})},t.title))})]})})]}),e.jsx("section",{id:"decoder-section",className:"section-feature bg-surface/50",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{ref:t=>i(t,7),className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"19 Workbench Kinds · 17 Concrete Configs"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-6",children:"Decoding Algorithms"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"Union-Find, Fast Union-Find, Blossom MWPM, Sparse Blossom, Belief-Matching, BP-OSD, GPU Batch (CUDA/OpenCL), Hybrid, Predecoded, two-stage, ambiguity-cluster, colour-code, space-time, and other concrete paths are exposed through a consistent Python API. Workbench adds the two orchestration kinds, AutoDecoder and Auto Router, to make 19 named kinds."}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[{label:" v1.0.1 Stable",desc:"Corrected code families and Union-Find peeling, Python 3.14, GPU on Pro licences, signed provenance for every wheel."},{label:" 18 Binary Wheels",desc:"Python 3.9-3.14 across Windows amd64, Linux x86_64, and macOS arm64, each tested on its own OS before release."},{label:" GPU Batch Paths",desc:"CUDA and OpenCL batch paths are available for supported hardware and drivers; OpenCL via source build."},{label:" Reproducible Harness",desc:"qector bench ships with the package; measure on your own hardware, no universal figures claimed."}].map(t=>e.jsxs("div",{className:"p-4 bg-void/50 border border-gridline/50 rounded-xl",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-sm mb-1",children:t.label}),e.jsx("div",{className:"text-muted-foreground text-xs leading-relaxed",children:t.desc})]},t.label))}),e.jsxs("div",{className:"flex flex-wrap gap-3 mt-8",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/pypi/v/qector-decoder-v3?style=flat-square&color=24e7ff",alt:"qector-decoder-v3 version on PyPI",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/github/v/release/GuillaumeLessard/qector-decoder?style=flat-square&color=24e7ff",alt:"Latest qector-decoder release on GitHub",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/badge/GitHub-Artifacts-blue?logo=github",alt:"GitHub release artifacts for QECTOR",loading:"lazy"})})]})]}),e.jsx("div",{ref:t=>i(t,8),className:"relative w-full",children:e.jsx(De,{})})]})})})}),e.jsx("section",{className:"section-feature relative",children:e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,9),children:[e.jsx(J,{eyebrow:"Performance",heading:"Measure on Your Own Hardware"}),e.jsx(Ae,{title:"Reproducible Benchmark Harness",statement:"No universal benchmark figures are published on this site, because results depend on your hardware, drivers, and workloads. The qector bench harness ships with the package so you can measure logical error rates and throughput on your own machines.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts →",className:"max-w-3xl mx-auto mb-6"})]}),e.jsx("div",{ref:t=>i(t,10),className:"max-w-3xl mx-auto",children:e.jsxs("div",{className:"p-5 bg-void/50 border border-gridline/50 rounded-xl font-mono text-xs text-muted-foreground leading-relaxed overflow-x-auto",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"}),' pip install "qector-decoder-v3[bench]"']}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector-doctor"]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001"]}),e.jsx("div",{className:"text-green-400 mt-2",children:"✓ Logical error rates and throughput written as reproducible JSON"})]})}),e.jsx("div",{className:"text-center mt-8 flex flex-wrap justify-center gap-3",children:e.jsx(j,{to:"/evidence",className:"btn-outline",children:"Evidence & Reports"})})]})})}),e.jsx("section",{className:"section-band bg-surface/20 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-5xl mx-auto",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-center mb-10",children:"Enterprise Compliance & Licensing"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface border-cyan-300/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-300/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-cyan-300 flex items-center gap-2 mb-4",children:"License Clarity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"The package is source-available under PolyForm Noncommercial 1.0.0 for community use. Commercial use, hosted services, and redistribution require the written scope described on the license and pricing pages."}),e.jsx(j,{to:"/commercial",className:"text-cyan-300 text-sm font-medium hover:underline",children:"Learn about licensing →"})]}),e.jsxs("div",{className:"card-surface border-gold-400/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-gold-400/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-gold-400 flex items-center gap-2 mb-4",children:"Commercial Licences, Air-Gapped"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Pro from ",R(L.proMonthly),"/month or ",R(L.proAnnual),"/year with GPU batch decoding, Lab for distance 63 and an SLA. Licences are verified offline, with no licence server, and every plan has a ",L.refundDays,"-day money-back guarantee."]}),e.jsx(j,{to:"/pricing",className:"btn-gold text-sm",children:"View Pricing & Tiers →"})]})]})]})}),e.jsx("section",{id:"pricing-section",className:"section-feature bg-surface/50 border-t border-gridline",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-xl mx-auto text-center",children:[e.jsxs("div",{ref:t=>i(t,11),className:"mb-6",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl font-bold mb-3",children:"QECTOR Pro"}),e.jsxs("p",{className:"text-secondary text-sm max-w-md mx-auto",children:["Air-gapped licence · Cancel any time · ",L.refundDays,"-day money-back guarantee"]})]}),e.jsxs("div",{ref:t=>i(t,12),className:"card-surface border-cyan-300/35 neon-border-cyan relative overflow-hidden p-8 rounded-2xl bg-void/80 text-center",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 to-transparent pointer-events-none"}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("h3",{className:"text-4xl font-extrabold text-primary",children:[R(L.proMonthly),e.jsx("span",{className:"text-lg font-semibold text-muted-foreground",children:"/mo"})]}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-1",children:["or ",R(L.proAnnual),"/year (2 months free) · Production use"]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row justify-center gap-3 mb-6",children:[e.jsxs("a",{href:H.proMonthly,className:"btn-cyan text-base font-bold py-3.5 px-8 rounded-xl shadow-lg shadow-cyan-300/20 inline-flex items-center justify-center gap-2",target:"_blank",rel:"noopener noreferrer",children:[e.jsxs("span",{children:["Buy Pro: ",R(L.proMonthly),"/mo"]}),e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),e.jsx("polyline",{points:"12 5 19 12 12 19"})]})]}),e.jsxs("a",{href:H.proAnnual,className:"btn-outline text-base py-3.5 px-8 rounded-xl",target:"_blank",rel:"noopener noreferrer",children:["Buy annual: ",R(L.proAnnual),"/yr"]})]}),e.jsx("div",{className:"border-t border-gridline/60 pt-4 mt-4 text-left space-y-2",children:["Full QECTOR Decoder v3 (all decoder families)","GPU (CUDA/OpenCL) batch decoding unlocked","Signed licence token, verified offline: works air-gapped","Email support (2 business day response)",`${L.refundDays}-day money-back guarantee on your first payment`].map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-secondary",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{children:t})]},t))})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-4",children:["Need Lab, perpetual or OEM? ",e.jsx(j,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"View all tiers →"})]})]})})})]})}const qe=c.lazy(()=>b(()=>import("./About-xwac7kSw.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),$e=c.lazy(()=>b(()=>import("./Decoder-Esh1GsiS.js"),__vite__mapDeps([7,1,8,2,3,4,5,6]))),Me=c.lazy(()=>b(()=>import("./Workbench-DsnWT-94.js"),__vite__mapDeps([9,1,8,2,10,3,4,5,6]))),ze=c.lazy(()=>b(()=>import("./McpServer-DYX0yvB3.js"),__vite__mapDeps([11,1,8,3,4,5,6,2]))),Ge=c.lazy(()=>b(()=>import("./ClaudePlugin-C8eza7n_.js"),__vite__mapDeps([12,1,8,10,6,3,4,5,2]))),Qe=c.lazy(()=>b(()=>import("./Blog-B7IPXEkA.js"),__vite__mapDeps([13,1,14,3,4,5,6,2]))),Ve=c.lazy(()=>b(()=>import("./BlogPost-DeO2pN01.js"),__vite__mapDeps([15,1,14,4,3,5,6,2]))),Ue=c.lazy(()=>b(()=>import("./Pricing-xevqAEll.js"),__vite__mapDeps([16,1,17,3,4,5,8,2,6]))),We=c.lazy(()=>b(()=>import("./PricingFR-C8Es19li.js"),__vite__mapDeps([18,1,17,3,4,5,8,2,6]))),Be=c.lazy(()=>b(()=>import("./Commercial-e3jcuxYP.js"),__vite__mapDeps([19,1,8,3,4,5,6,2]))),Fe=c.lazy(()=>b(()=>import("./Contact-D61L1Z0b.js"),__vite__mapDeps([20,1,21,2,3,4,5,6]))),He=c.lazy(()=>b(()=>import("./License-CqqH5PUX.js"),__vite__mapDeps([22,1,8,3,4,5,6,2]))),Je=c.lazy(()=>b(()=>import("./Privacy-CwHcJhDF.js"),__vite__mapDeps([23,1,8,3,4,5,6,2]))),Ke=c.lazy(()=>b(()=>import("./Terms-BSR2RP9l.js"),__vite__mapDeps([24,1,8,3,4,5,6,2]))),Ye=c.lazy(()=>b(()=>import("./TermsFR-C-UQyznI.js"),__vite__mapDeps([25,1,8,3,4,5,6,2]))),Ze=c.lazy(()=>b(()=>import("./Refund-D6csSD1J.js"),__vite__mapDeps([26,1,8,3,4,5,6,2]))),Xe=c.lazy(()=>b(()=>import("./Founder-BS0MLavi.js"),__vite__mapDeps([27,1,21,3,4,5,6,2]))),et=c.lazy(()=>b(()=>import("./Evidence-CiRnbh9a.js"),__vite__mapDeps([28,1,8,2,10,3,4,5,6]))),tt=c.lazy(()=>b(()=>import("./Changelog-BytfgdnJ.js"),__vite__mapDeps([29,1,8,10,3,4,5,6,2]))),rt=c.lazy(()=>b(()=>import("./TechnicalReference-CGYLPxss.js"),__vite__mapDeps([30,1,8,2,6,3,4,5]))),st=c.lazy(()=>b(()=>import("./Docs-DA36t10x.js"),__vite__mapDeps([31,1,8,2,3,4,5,6]))),at=c.lazy(()=>b(()=>import("./Installer-CeDfnoyS.js"),__vite__mapDeps([32,1,8,3,4,5,6,2]))),nt=c.lazy(()=>b(()=>import("./Manual-Bgdopadc.js"),__vite__mapDeps([33,1,6,8,3,4,5,2]))),ot=c.lazy(()=>b(()=>import("./Success-Gvo6K55X.js"),__vite__mapDeps([34,1,8,3,4,5,6,2]))),it=c.lazy(()=>b(()=>import("./NotFound-BvmxweJ_.js"),__vite__mapDeps([35,1,8,3,4,5,6,2])));function lt(){return e.jsx(Ee,{children:e.jsx(ke,{children:e.jsx(c.Suspense,{fallback:e.jsx(_e,{}),children:e.jsxs(re,{children:[e.jsx(f,{path:"/",element:e.jsx(Ie,{})}),e.jsx(f,{path:"/about",element:e.jsx(qe,{})}),e.jsx(f,{path:"/decoder",element:e.jsx($e,{})}),e.jsx(f,{path:"/workbench",element:e.jsx(Me,{})}),e.jsx(f,{path:"/mcp-server",element:e.jsx(ze,{})}),e.jsx(f,{path:"/claude-plugin",element:e.jsx(Ge,{})}),e.jsx(f,{path:"/blog",element:e.jsx(Qe,{})}),e.jsx(f,{path:"/blog/:id",element:e.jsx(Ve,{})}),e.jsx(f,{path:"/pricing",element:e.jsx(Ue,{})}),e.jsx(f,{path:"/fr/pricing",element:e.jsx(We,{})}),e.jsx(f,{path:"/commercial",element:e.jsx(Be,{})}),e.jsx(f,{path:"/contact",element:e.jsx(Fe,{})}),e.jsx(f,{path:"/license",element:e.jsx(He,{})}),e.jsx(f,{path:"/privacy",element:e.jsx(Je,{})}),e.jsx(f,{path:"/terms",element:e.jsx(Ke,{})}),e.jsx(f,{path:"/fr/terms",element:e.jsx(Ye,{})}),e.jsx(f,{path:"/refund",element:e.jsx(Ze,{})}),e.jsx(f,{path:"/guillaume-lessard",element:e.jsx(Xe,{})}),e.jsx(f,{path:"/evidence",element:e.jsx(et,{})}),e.jsx(f,{path:"/changelog",element:e.jsx(tt,{})}),e.jsx(f,{path:"/technical-reference",element:e.jsx(rt,{})}),e.jsx(f,{path:"/docs",element:e.jsx(st,{})}),e.jsx(f,{path:"/installer",element:e.jsx(at,{})}),e.jsx(f,{path:"/manual",element:e.jsx(nt,{})}),e.jsx(f,{path:"/success",element:e.jsx(ot,{})}),e.jsx(f,{path:"*",element:e.jsx(it,{})})]})})})})}te.createRoot(document.getElementById("root")).render(e.jsx(c.StrictMode,{children:e.jsx(se,{children:e.jsx(lt,{})})}));export{Oe as A,Te as C,Ae as E,Le as J,H as L,L as P,De as Q,Pe as S,J as a,R as b,ft as c,ut as d,K as u}; diff --git a/assets/index-BcbVjARk.js b/assets/index-BcbVjARk.js deleted file mode 100644 index e8f64ed3..00000000 --- a/assets/index-BcbVjARk.js +++ /dev/null @@ -1,3 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/About-CzYv2IZf.js","assets/vendor-react-BiHfrq0e.js","assets/vendor-gsap-a3sj5zmn.js","assets/vendor-PiU4YGcH.js","assets/vendor-md-CLKxNZoa.js","assets/vendor-md-dRWncRqa.css","assets/vendor-ui-B0ssGG4c.js","assets/Decoder-4z-vTL16.js","assets/NeuralReveal-BflyZYSb.js","assets/Workbench-DjamN-lA.js","assets/releases-DiQz_IDu.js","assets/McpServer-DH6efPKh.js","assets/ClaudePlugin-DdB5MGg7.js","assets/Blog-C2PtKQPL.js","assets/blogData-OjR2ZtNr.js","assets/BlogPost-Bf5JMy3h.js","assets/Pricing-CZj0aLPH.js","assets/faqData-CCPvMSkf.js","assets/PricingFR-Dx93rO3U.js","assets/Commercial-CgBsPCVr.js","assets/Contact-ZN3l_2_v.js","assets/CalendlyWidget-BuhQfp2_.js","assets/License-BVQmOrwC.js","assets/Privacy-DZfev8WZ.js","assets/Terms-Drxk6W26.js","assets/TermsFR-BL-VfMSd.js","assets/Refund-DJWm-f08.js","assets/Founder-CuTYpFsD.js","assets/Evidence-C7IJaw71.js","assets/Changelog-dTKijDWa.js","assets/TechnicalReference-C9HpEUdH.js","assets/Docs-CbxYbU8R.js","assets/Installer-B56SNEpM.js","assets/Manual-RdcO5vwC.js","assets/Success-DyK9JNg3.js","assets/NotFound-C-HGJzn4.js"])))=>i.map(i=>d[i]); -import{r as c,j as e,c as X}from"./vendor-react-BiHfrq0e.js";import{z,L as j,R as Z,A as f,B as ee}from"./vendor-PiU4YGcH.js";import{S as Q,C as te,a as re,b as se,R as ae,c as ne,d as oe,F as ie,B as le,P as ce,M as de,e as xe}from"./vendor-ui-B0ssGG4c.js";import{g as $,S as me}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))t(l);new MutationObserver(l=>{for(const d of l)if(d.type==="childList")for(const h of d.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&t(h)}).observe(document,{childList:!0,subtree:!0});function i(l){const d={};return l.integrity&&(d.integrity=l.integrity),l.referrerPolicy&&(d.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?d.credentials="include":l.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function t(l){if(l.ep)return;l.ep=!0;const d=i(l);fetch(l.href,d)}})();const he="modulepreload",pe=function(n){return"/"+n},V={},b=function(s,i,t){let l=Promise.resolve();if(i&&i.length>0){let u=function(x){return Promise.all(x.map(_=>Promise.resolve(_).then(N=>({status:"fulfilled",value:N}),N=>({status:"rejected",reason:N}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),p=h?.nonce||h?.getAttribute("nonce");l=u(i.map(x=>{if(x=pe(x),x in V)return;V[x]=!0;const _=x.endsWith(".css"),N=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${N}`))return;const E=document.createElement("link");if(E.rel=_?"stylesheet":he,_||(E.as="script"),E.crossOrigin="",E.href=x,p&&E.setAttribute("nonce",p),document.head.appendChild(E),_)return new Promise((P,L)=>{E.addEventListener("load",P),E.addEventListener("error",()=>L(new Error(`Unable to preload CSS for ${x}`)))})}))}function d(h){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=h,window.dispatchEvent(p),!p.defaultPrevented)throw h}return l.then(h=>{for(const p of h||[])p.status==="rejected"&&d(p.reason);return s().catch(d)})},B=[{label:"Platform",href:"/"},{label:"Decoder",href:"/decoder"},{label:"Claude Plugin",href:"/claude-plugin"},{label:"Workbench",href:"/workbench"},{label:"MCP Server",href:"/mcp-server"},{label:"Evidence",href:"/evidence"},{label:"Blog",href:"/blog"},{label:"Pricing",href:"/pricing"},{label:"Contact",href:"/contact"}];function ue(){const[n,s]=c.useState(!1),[i,t]=c.useState(!1),[l,d]=c.useState(!1),h=z(),p=c.useCallback(()=>{const x=window.scrollY;d(x>50),x>200?t(x>window.lastScrollY):t(!1),window.lastScrollY=x},[]);c.useEffect(()=>(window.addEventListener("scroll",p,{passive:!0}),()=>window.removeEventListener("scroll",p)),[p]),c.useEffect(()=>{s(!1)},[h]),c.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n]),c.useEffect(()=>{if(!n)return;const x=_=>{_.key==="Escape"&&s(!1)};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[n]);const u=x=>x==="/"?h.pathname==="/":h.pathname===x;return e.jsxs(e.Fragment,{children:[e.jsxs("nav",{"aria-label":"Main",className:`fixed top-4 left-1/2 -translate-x-1/2 z-50 w-[95%] max-w-6xl transition-all duration-500 ease-out ${i&&!n?"-translate-y-[140%]":"translate-y-0"}`,inert:i&&!n,children:[e.jsx("div",{className:`glass-nav rounded-2xl px-4 sm:px-6 py-3 transition-all duration-300 ${l?"shadow-deep":""}`,children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(j,{to:"/",className:"flex items-center gap-2.5 text-cyan-300 hover:text-cyan-100 transition-colors",children:e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"36",height:"36",className:"h-9 w-9 rounded-lg object-cover"})}),e.jsx("div",{className:"hidden lg:flex items-center gap-1",children:B.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`px-3 py-2 rounded-lg text-sm font-medium transition-all duration-300 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,children:x.label},x.href))}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(j,{to:"/pricing",className:"hidden sm:inline-flex items-center px-4 py-2 border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all duration-300",children:"Get License"}),e.jsxs("button",{onClick:()=>s(!n),className:"lg:hidden flex flex-col items-center justify-center gap-1.5 p-2 min-h-[44px] min-w-[44px] rounded-lg hover:bg-white/5 transition-colors","aria-label":h.pathname.startsWith("/fr/")?n?"Fermer le menu":"Ouvrir le menu":n?"Close menu":"Open menu","aria-expanded":n,"aria-controls":"mobile-menu",children:[e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"rotate-45 translate-y-2":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"opacity-0":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${n?"-rotate-45 -translate-y-2":""}`})]})]})]})}),e.jsx("div",{id:"mobile-menu","aria-hidden":!n,className:`lg:hidden mt-2 glass-nav rounded-2xl overflow-hidden transition-all duration-300 ${n?"max-h-[calc(100dvh-110px)] overflow-y-auto opacity-100 visible":"max-h-0 opacity-0 invisible"}`,children:e.jsxs("div",{className:"px-4 py-3 space-y-1",children:[B.map(x=>e.jsx(j,{to:x.href,"aria-current":u(x.href)?"page":void 0,className:`flex items-center px-4 py-3 min-h-[44px] rounded-lg text-sm font-medium transition-all duration-200 ${u(x.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,onClick:()=>s(!1),children:x.label},x.href)),e.jsx(j,{to:"/pricing",className:"sm:hidden mt-2 text-center px-4 py-3 min-h-[44px] flex items-center justify-center border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all",onClick:()=>s(!1),children:"Get License"})]})})]}),n&&e.jsx("div",{className:"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm lg:hidden",onClick:()=>s(!1)})]})}const D={version:"1.0.0",pypiPackage:"qector-decoder-v3",contactEndpoint:void 0,ogImage:"https://qector.store/images/og-banner.png"},mt="https://calendly.com/qector-info/30min?background_color=0e0d0d&text_color=ffffff&primary_color=0e4088";async function fe(){try{const s=await(await fetch("https://pypi.org/rss/project/qector-decoder-v3/releases.xml")).text(),d=(new DOMParser().parseFromString(s,"text/xml").querySelector("item title")?.textContent||"").match(/qector-decoder-v3\s+([\d.]+)/);return d?d[1]:D.version}catch{return D.version}}function H(){const[n,s]=c.useState(D.version),[i,t]=c.useState(!0);return c.useEffect(()=>{let l=!0;return fe().then(d=>{l&&(s(d),t(!1))}),()=>{l=!1}},[]),{version:n,loading:i}}const ge=[{label:"QECTOR Decoder v3",href:"/decoder",badge:"Library"},{label:"Claude Code Plugin",href:"/claude-plugin",badge:"Claude"},{label:"Workbench GUI",href:"/workbench",badge:"Desktop App"},{label:"QECTOR MCP Server",href:"/mcp-server",badge:"MCP"},{label:"Installer & App Bundles",href:"/installer"},{label:"Pricing & Licensing",href:"/pricing"}],be=[{label:"Evidence & Reports",href:"/evidence"},{label:"Technical Reference",href:"/technical-reference"},{label:"Package User Manual",href:"/manual"},{label:"Documentation Hub",href:"/docs"},{label:"Version Changelog",href:"/changelog"}],ye=[{label:"About QECTOR",href:"/about"},{label:"Guillaume Lessard (Founder)",href:"/guillaume-lessard"},{label:"iD01t Productions"},{label:"Commercial Licensing",href:"/commercial"},{label:"Contact Engineering",href:"/contact"},{label:"EULA & License",href:"/license"},{label:"Terms of Service",href:"/terms"},{label:"Privacy Policy",href:"/privacy"},{label:"Refund Policy",href:"/refund"}];function I({href:n,external:s,badge:i,children:t}){const l="group flex items-center justify-between gap-3 min-h-[44px] py-1.5 text-secondary hover:text-cyan-300 text-sm transition-colors duration-200",d=e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"group-hover:translate-x-0.5 transition-transform duration-200",children:t}),i&&e.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded bg-surface border border-gridline text-muted-foreground group-hover:border-cyan-300/30 group-hover:text-cyan-300 transition-colors",children:i})]});return n?s?e.jsxs("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:l,children:[d,e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}):e.jsx(j,{to:n,className:l,children:d}):e.jsx("span",{className:l,children:d})}function je(){const{version:n}=H();return e.jsxs("footer",{className:"border-t border-cyan-900/40 bg-void/95 relative overflow-hidden text-left",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-1/2 h-16 bg-gradient-to-b from-cyan-400/5 to-transparent blur-3xl pointer-events-none"}),e.jsx("div",{className:"section-padding py-16 relative z-10",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12 lg:gap-8",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[e.jsxs(j,{to:"/",className:"inline-flex items-center gap-3 text-cyan-300 hover:text-cyan-100 transition-colors duration-200",children:[e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"40",height:"40",className:"h-10 w-10 rounded-lg object-cover"}),e.jsxs("span",{className:"text-lg font-extrabold tracking-tight text-white",children:["QECTOR",e.jsx("span",{className:"text-cyan-300",children:"."})]})]}),e.jsx("p",{className:"text-secondary/80 text-sm leading-relaxed max-w-sm",children:"Quantum error correction decoding for Python. Built by Guillaume Lessard at iD01t Productions."}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] text-muted-foreground hover:text-cyan-300 transition-colors","aria-label":"PyPI",children:[e.jsxs("span",{className:"text-sm font-mono border border-gridline rounded px-2 py-1 hover:border-cyan-300/30",children:["v",n]}),e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"GitHub",children:["GitHub",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"ORCID",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Platform"}),e.jsx("div",{className:"flex flex-col gap-1",children:ge.map(s=>e.jsx(I,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Research & Docs"}),e.jsx("div",{className:"flex flex-col gap-1",children:be.map(s=>e.jsx(I,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Company"}),e.jsx("div",{className:"flex flex-col gap-1",children:ye.slice(0,5).map(s=>e.jsx(I,{href:s.href,external:s.external,badge:s.badge,children:s.label},s.label))})]})]}),e.jsxs("div",{className:"mt-16 pt-8 border-t border-gridline flex flex-col md:flex-row items-start md:items-center justify-between gap-6",children:[e.jsxs("div",{className:"text-xs text-muted-foreground max-w-xl leading-relaxed",children:[e.jsx("span",{className:"font-semibold text-secondary",children:"Distribution:"})," PyPI (",e.jsx("code",{className:"text-cyan-300/80 font-mono",children:"qector-decoder-v3"}),") is the Python library. The free ",e.jsx(j,{to:"/installer",className:"link-accent",children:"Workbench GUI"})," is a standalone desktop application shipped self-contained for Windows x64 and Linux x64 (no system Python required)."]}),e.jsxs("nav",{"aria-label":"Legal",className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs font-medium text-muted-foreground",children:[e.jsx(j,{to:"/privacy",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Privacy"}),e.jsx(j,{to:"/terms",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Terms"}),e.jsx(j,{to:"/refund",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"Refund"}),e.jsx(j,{to:"/license",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:"License"}),e.jsxs("a",{href:"/.well-known/security.txt",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:["Security",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]})]})}),e.jsx("div",{className:"bg-[#050b14]",children:e.jsx("div",{className:"section-padding py-4",children:e.jsxs("div",{className:"max-w-7xl mx-auto text-xs text-muted-foreground/70 text-center md:text-left",children:["© 2026 QECTOR Lab / iD01t Productions. All rights reserved.",e.jsx("div",{className:"mt-1",children:"Éditeur : Guillaume Lessard, entrepreneur individuel (iD01t Productions), 2004 De Lorimier, Longueuil, QC J4K 3H7, Canada · admin@qector.store"})]})})})]})}function ve({children:n}){const s=z();return c.useEffect(()=>{window.scrollTo(0,0),document.documentElement.lang=s.pathname.startsWith("/fr/")?"fr":"en",document.getElementById("main-content")?.focus();const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t=(h=document)=>{h.querySelectorAll(".card-surface:not(.revealed), .prose:not(.revealed)").forEach(p=>{i?p.classList.add("revealed"):l.observe(p)})},l=new IntersectionObserver(h=>{h.forEach(p=>{p.isIntersecting&&(p.target.classList.add("revealed"),l.unobserve(p.target))})},{threshold:.1,rootMargin:"0px 0px -10% 0px"});let d=null;return i||(d=new MutationObserver(h=>{h.forEach(p=>{p.addedNodes.forEach(u=>{u.nodeType===Node.ELEMENT_NODE&&t(u)})})}),d.observe(document.body,{childList:!0,subtree:!0})),t(),()=>{l.disconnect(),d&&d.disconnect()}},[s.pathname]),e.jsxs("div",{className:"min-h-screen bg-void text-foreground quantum-grid-bg relative",children:[e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-cyan-300 focus:text-void focus:font-semibold focus:rounded-lg",children:s.pathname.startsWith("/fr/")?"Aller au contenu principal":"Skip to main content"}),e.jsx(ue,{}),e.jsx("main",{id:"main-content",tabIndex:-1,className:"pt-20 outline-none",children:n}),e.jsx(je,{})]})}class Ne extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(s,i){console.error("QECTOR site error boundary caught:",s,i.componentStack)}handleReload=()=>{this.setState({hasError:!1}),window.location.href="/"};render(){return this.state.hasError?e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-void px-6",children:e.jsxs("div",{className:"max-w-md text-center card-surface",children:[e.jsx("div",{className:"w-12 h-12 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center mx-auto mb-4 text-cyan-300 text-xl",children:"!"}),e.jsx("h1",{className:"text-xl font-bold text-primary mb-2",children:"Something went wrong"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"This page hit an unexpected error. No page data was sent; check the browser console for the local error and reload."}),e.jsx("button",{onClick:this.handleReload,className:"btn-cyan",children:"Reload homepage"})]})}):this.props.children}}function we(){return e.jsx("div",{className:"min-h-[60vh] flex items-center justify-center",role:"status","aria-live":"polite",children:e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 border-2 border-cyan-300/20 border-t-cyan-300 rounded-full animate-spin"}),e.jsx("span",{className:"sr-only",children:"Loading page…"})]})})}const Ee={en:"en_US",fr:"fr_FR"};function ke({title:n="QECTOR · Quantum Error Correction Decoding for Python",description:s="QECTOR Decoder v3 - Rust-core Python quantum error correction decoder. v1.0.0 first stable release with API stability tiers, a qector CLI, and a reproducible benchmark harness (qector bench) for measuring on your own hardware.",ogImage:i=D.ogImage,noindex:t=!1,lang:l="en",alternates:d}){const h=z(),p=`https://qector.store${h.pathname==="/"?"/":`${h.pathname.replace(/\/$/,"")}/`}`;return c.useEffect(()=>{document.title=n,document.documentElement.lang=l;const u=(N,E)=>{let P=document.querySelector(N);if(!P){P=document.createElement("meta");const L=N.includes("property=")?"property":"name",R=N.match(/"([^"]+)"/)?.[1]||"";P.setAttribute(L,R),document.head.appendChild(P)}P.content=E};u('meta[name="description"]',s),u('meta[name="robots"]',t?"noindex, follow":"index, follow, max-image-preview:large"),u('meta[property="og:title"]',n),u('meta[property="og:description"]',s),u('meta[property="og:url"]',p),u('meta[property="og:type"]',"website"),u('meta[property="og:locale"]',Ee[l]??"en_US"),u('meta[property="og:image"]',i),u('meta[property="og:image:alt"]',"QECTOR official logo"),u('meta[property="og:site_name"]',"QECTOR"),u('meta[name="twitter:card"]',"summary_large_image"),u('meta[name="twitter:title"]',n),u('meta[name="twitter:description"]',s),u('meta[name="twitter:image"]',i),u('meta[name="twitter:image:alt"]',"QECTOR official logo"),u('meta[name="twitter:site"]',"@DJiD01T"),u('meta[name="theme-color"]',"#24e7ff");let x=document.querySelector('link[rel="canonical"]');x||(x=document.createElement("link"),x.rel="canonical",document.head.appendChild(x)),x.href=p,document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(N=>N.remove());const _=[];for(const N of d??[]){const E=document.createElement("link");E.rel="alternate",E.hreflang=N.lang,E.href=N.href,document.head.appendChild(E),_.push(E)}return()=>{_.forEach(N=>N.remove())}},[n,s,p,i,t,l,d]),null}function _e({data:n}){const s="json-ld-data";return c.useEffect(()=>{let i=document.getElementById(s);return i||(i=document.createElement("script"),i.id=s,i.type="application/ld+json",document.head.appendChild(i)),i.textContent=JSON.stringify(n),()=>{const t=document.getElementById(s);t&&t.remove()}},[n]),null}function Ce({icon:n,label:s,href:i,variant:t="default",className:l=""}){const d=t==="gold"?"bg-gold-400/10 border border-gold-400/30 text-gold-400 hover:bg-gold-400/20":"bg-surface border border-gridline text-secondary hover:text-cyan-300 hover:border-cyan-300/30";return e.jsxs("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:`inline-flex items-center gap-2 px-4 py-2.5 rounded-full text-sm transition-all duration-300 ${d} ${l}`,children:[e.jsx("span",{"aria-hidden":"true",children:n}),e.jsx("span",{children:s})]})}function F({eyebrow:n,heading:s,description:i,align:t="center",maxWidth:l="max-w-3xl",className:d=""}){const h=t==="center"?"text-center mx-auto":"text-left",p=t==="center"?"mx-auto":"";return e.jsxs("div",{className:`${l} ${h} mb-12 md:mb-16 ${d}`,children:[n&&e.jsx("span",{className:"eyebrow-pill mb-4",children:n}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-balance mb-4",children:s}),i&&e.jsx("p",{className:`text-secondary text-lg leading-relaxed text-pretty max-w-prose ${p}`,children:i})]})}const Pe={cyan:"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20",green:"bg-green-400/10 text-green-400 border border-green-400/20",purple:"bg-purple-400/10 text-purple-400 border border-purple-400/20",gold:"bg-gold-400/10 text-gold-400 border border-gold-400/20"};function Le({title:n,tag:s,badge:i,desc:t,proof:l,muted:d=!1,className:h=""}){return e.jsxs("div",{className:`card-surface group ${d?"border-gridline/50 opacity-80":""} ${h}`,children:[s&&e.jsx("div",{className:"text-muted-foreground text-xs font-mono uppercase tracking-wider mb-2",children:s}),e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e.jsx("h3",{className:`font-semibold text-lg transition-colors ${d?"text-gold-400/80":"text-cyan-300 group-hover:text-cyan-200"}`,children:n}),i&&e.jsx("span",{className:`shrink-0 px-2.5 py-1 rounded-full text-xs font-medium ${d?"bg-gold-400/5 text-gold-400/60 border border-gold-400/20":Pe[i.color]}`,children:i.label})]}),e.jsx("p",{className:`leading-relaxed ${d?"text-muted-foreground text-sm":"text-secondary"}`,children:t}),l&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-gridline/60 flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{className:"text-muted-foreground font-mono",children:l})]})]})}function Re({title:n,statement:s,href:i,linkLabel:t="View evidence →",className:l=""}){return e.jsxs("div",{className:`relative rounded-2xl border border-cyan-300/20 bg-void p-6 overflow-hidden ${l}`,children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none bg-gradient-to-br from-cyan-300/5 to-transparent"}),e.jsxs("div",{className:"relative z-10",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300"}),e.jsx("span",{className:"text-xs font-mono uppercase tracking-wider text-cyan-300",children:n})]}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:s}),i&&e.jsx("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm font-medium hover:underline underline-offset-4",children:t})]})]})}function Se(){const[n,s]=c.useState({}),[i,t]=c.useState({}),[l,d]=c.useState(!1),[h,p]=c.useState(!1),u=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)for(let o=0;o<3;o++)a.push({id:`${r}_${o}`,r,c:o,x:120+o*100,y:60+r*100});return a},[]),x=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)a.push({id:`L_${r}`,type:"L",r,c:-1,x1:30,y1:60+r*100,x2:120,y2:60+r*100});for(let r=0;r<3;r++)a.push({id:`R_${r}`,type:"R",r,c:3,x1:320,y1:60+r*100,x2:410,y2:60+r*100});for(let r=0;r<3;r++)for(let o=0;o<2;o++)a.push({id:`H_${r}_${o}`,type:"H",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+(o+1)*100,y2:60+r*100});for(let r=0;r<2;r++)for(let o=0;o<3;o++)a.push({id:`V_${r}_${o}`,type:"V",r,c:o,x1:120+o*100,y1:60+r*100,x2:120+o*100,y2:60+(r+1)*100});return a},[]),_=c.useMemo(()=>{const a={},r=o=>{a[o]=!a[o]};return x.forEach(o=>{n[o.id]&&(o.type==="H"?(r(`${o.r}_${o.c}`),r(`${o.r}_${o.c+1}`)):o.type==="V"?(r(`${o.r}_${o.c}`),r(`${o.r+1}_${o.c}`)):o.type==="L"?r(`${o.r}_0`):o.type==="R"&&r(`${o.r}_2`))}),Object.keys(a).forEach(o=>{a[o]||delete a[o]}),a},[n,x]),N=a=>{t({}),d(!1),s(r=>({...r,[a]:!r[a]}))},E=()=>{s({}),t({}),d(!1)},P=(a=.2)=>{t({}),d(!1);const r={};x.forEach(o=>{Math.random()Math.abs(a.r-r.r)+Math.abs(a.c-r.c),R=c.useCallback((a,r)=>{const o=[],k=Math.min(a.r,r.r),g=Math.max(a.r,r.r),w=a.r{const a=Object.keys(_).map(g=>{const[w,m]=g.split("_").map(Number);return u.find(y=>y.r===w&&y.c===m)});if(a.length===0){t({}),d(!0);return}const r=g=>{if(g.length===0)return{cost:0,pairs:[]};const w=g[0],m=g.slice(1);let y=1/0,v=[];const C=w.c+1,T=r(m);C+T.costK!==S),q=r(J);W+q.cost{if(g==="L"||g==="R"||w==="L"||w==="R"){const m=g==="L"||g==="R"?w:g;if((g==="L"||g==="R"?g:w)==="L"){for(let v=0;v{k[y]=!0})}),t(k),d(!0)},[_,u,R]),Y=c.useMemo(()=>{if(!l)return"idle";const a=x.filter(m=>{const y=n[m.id]||!1,v=i[m.id]||!1;return y!==v}),r={},o=(m,y)=>{r[m]||(r[m]=[]),r[y]||(r[y]=[]),r[m].push(y),r[y].push(m)};a.forEach(m=>{m.type==="H"?o(`${m.r}_${m.c}`,`${m.r}_${m.c+1}`):m.type==="V"?o(`${m.r}_${m.c}`,`${m.r+1}_${m.c}`):m.type==="L"?o("L",`${m.r}_0`):m.type==="R"&&o("R",`${m.r}_2`)});const k={},g=["L"];k.L=!0;let w=!1;for(;g.length>0;){const m=g.shift();if(m==="R"){w=!0;break}(r[m]||[]).forEach(v=>{k[v]||(k[v]=!0,g.push(v))})}return w?"failure":"success"},[l,n,i,x]);return e.jsxs("div",{className:"flex flex-col gap-4 border border-gridline bg-surface/30 rounded-2xl p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider flex items-center gap-1.5",children:[e.jsx(Q,{className:"w-4 h-4"}),"Interactive QEC Simulator"]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-0.5",children:"Planar stabilizer code (d=3). Click edges to toggle physical errors."})]}),e.jsx("button",{onClick:()=>p(!h),className:"min-h-[44px] min-w-[44px] inline-flex items-center justify-center text-secondary hover:text-cyan-300 transition-colors","aria-label":"Toggle help",children:e.jsx(te,{className:"w-5 h-5"})})]}),h&&e.jsxs("div",{className:"p-4 bg-void/80 border border-gridline rounded-xl text-xs text-secondary leading-relaxed space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"How to play:"})," Click on the links (grey/red lines) to inject physical errors. Red lines represent errors."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Syndromes:"})," Grid nodes measure checks. When adjacent errors are odd, a check triggers (lights up orange)."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Decoder:"})," Minimum Weight Perfect Matching (MWPM) matches active checks. When you click ",e.jsx("span",{className:"text-cyan-300",children:"Run Decoder"}),", it draws matching correction paths in cyan."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Success condition:"})," If error + correction paths do not form a logical connection across boundaries (from left to right), the state is successfully corrected!"]})]}),e.jsxs("div",{className:"bg-void/50 border border-gridline rounded-xl flex items-center justify-center p-4 relative overflow-hidden",children:[e.jsxs("svg",{viewBox:"0 0 440 320",className:"w-full max-w-[440px] h-auto select-none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsxs("defs",{children:[e.jsxs("radialGradient",{id:"activeNodeGlow",cx:"50%",cy:"50%",r:"50%",children:[e.jsx("stop",{offset:"0%",stopColor:"#fef08a"}),e.jsx("stop",{offset:"60%",stopColor:"#eab308"}),e.jsx("stop",{offset:"100%",stopColor:"#a16207"})]}),e.jsxs("linearGradient",{id:"inactiveNodeGlow",x1:"0",y1:"0",x2:"1",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#1e293b"}),e.jsx("stop",{offset:"100%",stopColor:"#0f172a"})]}),e.jsx("pattern",{id:"gridDots",width:"20",height:"20",patternUnits:"userSpaceOnUse",children:e.jsx("circle",{cx:"2",cy:"2",r:"1",fill:"#1e293b",fillOpacity:"0.6"})})]}),e.jsx("rect",{width:"440",height:"320",fill:"url(#gridDots)",rx:"10"}),e.jsx("line",{x1:"30",y1:"30",x2:"30",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"20",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(-90, 20, 165)",className:"font-mono",children:"LEFT BOUNDARY"}),e.jsx("line",{x1:"410",y1:"30",x2:"410",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"420",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(90, 420, 165)",className:"font-mono",children:"RIGHT BOUNDARY"}),x.map(a=>{const r=n[a.id]||!1,o=i[a.id]||!1;let k="#334155";return r&&o?k="#e2e8f0":r?k="#ef4444":o&&(k="#06b6d4"),e.jsxs("g",{className:"group",children:[e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:"transparent",strokeWidth:"16",className:"cursor-pointer",tabIndex:0,role:"checkbox","aria-checked":r,"aria-label":`Toggle error on qubit edge ${a.id}`,onClick:()=>N(a.id),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),N(a.id))}}),e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:k,strokeWidth:r||o?4:2,className:"transition-colors duration-200 pointer-events-none group-hover:stroke-cyan-300/40",style:{filter:r?"drop-shadow(0 0 4px rgba(239, 68, 68, 0.4))":o?"drop-shadow(0 0 4px rgba(6, 182, 212, 0.4))":"none"}}),e.jsx("circle",{cx:(a.x1+a.x2)/2,cy:(a.y1+a.y2)/2,r:"5",fill:r?"#ef4444":o?"#06b6d4":"#1e293b",stroke:r||o?"#e2e8f0":"#475569",strokeWidth:"1.5",className:"transition-colors duration-200 pointer-events-none group-hover:fill-cyan-300 group-hover:stroke-cyan-200"})]},a.id)}),u.map(a=>{const r=_[a.id]||!1;return e.jsxs("g",{children:[r&&e.jsx("circle",{cx:a.x,cy:a.y,r:"18",fill:"rgba(251, 191, 36, 0.15)",className:"animate-pulse"}),e.jsx("circle",{cx:a.x,cy:a.y,r:r?12:9,fill:r?"url(#activeNodeGlow)":"url(#inactiveNodeGlow)",stroke:r?"#fbbf24":"#334155",strokeWidth:r?2:1.5,className:"transition-all duration-300 pointer-events-none",style:{filter:r?"drop-shadow(0 0 10px rgba(251, 191, 36, 0.7))":"none"}}),e.jsx("circle",{cx:a.x-(r?3:2),cy:a.y-(r?3:2),r:r?3:2,fill:"white",fillOpacity:"0.25",className:"pointer-events-none"}),r&&e.jsx("circle",{cx:a.x,cy:a.y,r:20,fill:"transparent",stroke:"#fbbf24",strokeWidth:"1",strokeOpacity:"0.4",className:"animate-ping"}),e.jsx("text",{x:a.x,y:a.y+3,textAnchor:"middle",fill:r?"#020617":"#94a3b8",fontSize:"9",fontWeight:"bold",className:"font-mono text-[9px] pointer-events-none",children:r?"!":"S"})]},a.id)})]}),l&&e.jsxs("div",{className:"absolute bottom-3 left-3 right-3 flex items-center justify-between p-3 bg-surface/90 border border-gridline rounded-xl backdrop-blur-md transition-all duration-300",children:[Y==="success"?e.jsxs("div",{className:"flex items-center gap-2 text-green-400 text-sm font-semibold",children:[e.jsx(re,{className:"w-5 h-5"}),e.jsx("span",{children:"SUCCESS: Errors resolved"})]}):e.jsxs("div",{className:"flex items-center gap-2 text-red-400 text-sm font-semibold",children:[e.jsx(se,{className:"w-5 h-5"}),e.jsx("span",{children:"LOGICAL ERROR: Correction failed"})]}),e.jsx("div",{className:"text-[10px] text-muted-foreground font-mono",children:"d=3 code slice"})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("button",{onClick:()=>P(.2),className:"px-3 py-3 bg-surface hover:bg-white/5 border border-gridline rounded-lg text-xs font-semibold text-secondary hover:text-primary transition-all flex items-center justify-center gap-1.5",children:[e.jsx(Q,{className:"w-3.5 h-3.5"}),"Inject Errors"]}),e.jsxs("button",{onClick:U,disabled:Object.keys(_).length===0,className:"px-3 py-3 bg-cyan-300 disabled:bg-cyan-300/20 disabled:text-void/40 hover:bg-cyan-200 text-void rounded-lg text-xs font-bold transition-all flex items-center justify-center gap-1.5",children:[e.jsx(ae,{className:`w-3.5 h-3.5 ${l?"":"animate-spin"}`}),"Run Decoder"]}),e.jsx("button",{onClick:E,className:"px-3 py-3 bg-surface hover:bg-red-950/20 border border-gridline hover:border-red-900/30 rounded-lg text-xs font-semibold text-secondary hover:text-red-400 transition-all",children:"Reset Graph"})]})]})}function Oe({code:n,language:s="python",filename:i,className:t=""}){const[l,d]=c.useState(!1),h=async()=>{try{await navigator.clipboard.writeText(n),d(!0),setTimeout(()=>d(!1),2e3)}catch(p){console.error("Failed to copy text: ",p)}};return e.jsxs("div",{className:`my-4 border border-gridline rounded-xl overflow-hidden bg-void/50 ${t}`,children:[i&&e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gridline bg-surface/50 text-xs font-mono text-muted-foreground",children:[e.jsx("span",{children:i}),e.jsx("span",{className:"uppercase text-[10px] bg-cyan-300/10 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-300/20",children:s})]}),e.jsxs("div",{className:"relative group",children:[e.jsx("pre",{className:"p-4 pr-14 overflow-x-auto overflow-y-auto font-mono text-sm leading-relaxed text-secondary bg-void/30 max-h-[400px]",children:e.jsx("code",{className:`language-${s}`,children:n})}),e.jsx("button",{onClick:h,className:"absolute top-3 right-3 p-1.5 bg-surface border border-gridline rounded-lg text-secondary hover:text-cyan-300 hover:border-cyan-300/30 opacity-0 group-hover:opacity-100 focus:opacity-100 max-sm:opacity-100 transition-all duration-200","aria-label":l?"Copied":"Copy code",children:l?e.jsx(ne,{className:"w-4 h-4 text-green-400"}):e.jsx(oe,{className:"w-4 h-4"})}),e.jsx("span",{className:"sr-only","aria-live":"polite",children:l?"Code copied to clipboard":""})]})]})}$.registerPlugin(me);function O({value:n,label:s}){return e.jsxs("div",{className:"text-center px-4 py-3",children:[e.jsx("div",{className:"text-2xl font-bold text-cyan-300",children:n}),e.jsx("div",{className:"text-xs text-muted-foreground leading-tight max-w-[11rem] mx-auto",children:s})]})}function De(){const n=c.useRef([]),{version:s}=H();c.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const t=document.createElement("script");t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t);const l=$.context(()=>{n.current.filter(Boolean).forEach(h=>{$.fromTo(h,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power2.out",scrollTrigger:{trigger:h,start:"top 85%",once:!0}})})});return()=>{l.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const i=(t,l)=>{t&&(n.current[l]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(ke,{title:"QECTOR · Quantum Error Correction Decoding for Python",description:"QECTOR Decoder v3 - Rust-core Python library with 17 concrete decoder configurations plus 2 Workbench routing kinds, a syndrome-faithful contract, and reproducible validation guidance."}),e.jsx(_e,{data:{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"QECTOR Decoder v3 is the qector-decoder-v3 1.0.0 Rust/Python quantum error correction package with 17 concrete decoder configurations plus 2 Workbench routing kinds, offline Ed25519 licensing, and reproducible validation guidance.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:s,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://github.com/GuillaumeLessard"},maintainer:{"@type":"Organization",name:"iD01t Productions"},identifier:"https://pypi.org/project/qector-decoder-v3/",license:"https://qector.store/license/",offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}},{"@type":"Organization",name:"QECTOR",url:"https://qector.store/",logo:"https://qector.store/images/logo.png",email:"admin@qector.store",founder:{"@type":"Person",name:"Guillaume Lessard",identifier:"0009-0000-3465-3753"},address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-claude-plugin","https://orcid.org/0009-0000-3465-3753"]}]}}),e.jsxs("section",{className:"relative min-h-screen flex items-center justify-center overflow-hidden","aria-label":"QECTOR hero",children:[e.jsx("img",{src:"/images/hero-bg.webp",alt:"","aria-hidden":"true",fetchPriority:"high",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.45) saturate(1.1)"}}),e.jsx("noscript",{children:e.jsx("img",{src:"/images/og-banner.png",alt:"","aria-hidden":"true",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.4)"}})}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-void/60 via-void/25 to-void z-[1]"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-500/[0.04] to-transparent z-[1]"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-5xl mx-auto px-6 pt-24 pb-20",children:[e.jsxs(j,{to:"/changelog",className:"inline-flex max-w-full flex-wrap items-center justify-center gap-2 px-4 py-2 bg-surface/70 border border-cyan-300/20 rounded-full text-center text-xs leading-relaxed text-cyan-300 hover:bg-cyan-300/10 transition-all mb-8 backdrop-blur-sm",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-green-400 animate-pulse-dot"}),e.jsxs("span",{children:["v",s," · First Stable Release · Changelog →"]})]}),e.jsxs("h1",{className:"max-w-4xl mx-auto break-words text-3xl sm:text-5xl md:text-6xl lg:text-7xl font-extrabold tracking-tight leading-[1.05] mb-6",style:{textShadow:"0 4px 32px rgba(0,0,0,0.9)"},children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"QEC Decoding"})," ","for Python"]}),e.jsxs("p",{className:"text-base sm:text-lg md:text-xl text-secondary/90 max-w-3xl mx-auto mb-5 leading-relaxed break-words",style:{textShadow:"0 2px 16px rgba(0,0,0,0.8)"},children:["The v1.0.0 runtime ships 17 concrete decoder configurations, while Workbench v1.0.7 names 19 kinds in total: those configurations plus AutoDecoder and Auto Router orchestration entries."," ",e.jsx("span",{className:"text-primary font-semibold",children:"v1.0.0 is the first stable release:"})," API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points and the qector CLI."]}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed",style:{textShadow:"0 2px 12px rgba(0,0,0,0.8)"},children:"Local measurement tools are documented for declared workloads; this site publishes no universal performance figures. Claim boundaries and verification paths are published with the product documentation."}),e.jsxs("div",{className:"flex flex-col sm:flex-row flex-wrap gap-3 sm:gap-4 justify-center items-stretch sm:items-center mb-10",children:[e.jsx(j,{to:"/pricing",className:"btn-gold px-8 py-4 text-sm sm:text-base font-bold w-full sm:w-auto",children:"Start $499 Evaluation →"}),e.jsx(j,{to:"/decoder",className:"btn-cyan px-8 py-4 text-sm sm:text-base w-full sm:w-auto",children:"Explore the Decoder"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/latest",className:"btn-outline px-8 py-4 text-sm sm:text-base w-full sm:w-auto",target:"_blank",rel:"noopener noreferrer",children:"Free Workbench GUI"})]}),e.jsx("div",{className:"max-w-2xl mx-auto mb-10 text-left",children:e.jsx(Oe,{language:"bash",filename:"Quick start",code:`pip install qector-decoder-v3==${s} -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 md:divide-x md:divide-white/5 border-t border-white/5 pt-6 max-w-2xl mx-auto",children:[e.jsx(O,{value:"19",label:"Workbench Kinds (17 + 2 routing)"}),e.jsx(O,{value:"GF(2)",label:"Faithfulness Contract"}),e.jsx(O,{value:"CPU + GPU",label:"Optional Execution Paths"}),e.jsx(O,{value:"Open",label:"Evidence Policy"})]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-10 p-5 md:p-6 bg-surface/50 border border-cyan-300/20 rounded-2xl text-center shadow-lg backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] text-cyan-300 font-semibold tracking-[0.2em] mb-2 uppercase",children:"Evidence policy"}),e.jsx("div",{className:"text-lg md:text-xl font-bold text-primary tracking-tight mb-2",children:"No hardware-specific results published"}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed max-w-lg mx-auto",children:["QECTOR publishes contracts, methodology, and artifacts rather than portable speed numbers. Read the ",e.jsx(j,{to:"/evidence",className:"link-accent",children:"evidence policy"})," before generating a local measurement."]})]})]})]}),e.jsx("section",{className:"section-band bg-surface/20 border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill-gold mb-4",children:"Release Assurance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"A Clear Path From Code to Evidence"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"The public release, validation contract, and commercial delivery path are explicit by design."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Current Runtime"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"qector-decoder-v3 1.0.0"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"The live PyPI release supports Python 3.9 through 3.13 with 15 binary wheels across Windows, Linux, and macOS."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Contract"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Correctness before speed"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Every correction is checked against H c = s (mod 2). Measurements stay workload-scoped, artifact-hashed, and separate from universal performance claims."})]}),e.jsxs("div",{className:"card-surface p-6 border-gold-400/20",children:[e.jsx("div",{className:"text-gold-400 font-mono text-xs uppercase tracking-wider mb-3",children:"Secure Delivery"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Signed, traceable licensing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Commercial fulfillment requires a live Stripe event, issues a v2 Ed25519 token, and records independent billing and license delivery states."}),e.jsx(j,{to:"/license",className:"inline-block text-gold-400 text-sm font-medium hover:underline mt-3",children:"Read the license activation procedure →"})]})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Registry"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 text-sm",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Normative reference manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"v1.0.0 user manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Verification and proof bundle"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.22046403"})]})]})]})]})}),e.jsx("section",{className:"section-thin border-t border-b border-gridline/30 bg-void/80",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto text-center",children:[e.jsx("p",{className:"text-xs text-muted-foreground uppercase tracking-widest mb-8",children:"Works with your existing stack"}),e.jsxs("div",{className:"flex flex-wrap justify-center items-center gap-x-12 gap-y-8",children:[e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Stim"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install stim"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Sinter"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install sinter"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Qiskit"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install qiskit-qec"})]})]})]})})}),e.jsx("section",{ref:t=>i(t,0),className:"py-8 bg-void",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-7xl mx-auto flex flex-wrap justify-center gap-3",children:[{icon:e.jsx(ie,{size:16}),label:"Artifacts (GitHub)",href:"https://github.com/GuillaumeLessard/qector-decoder"},{icon:e.jsx(le,{size:16}),label:"Mastering QEC · Google Play",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",gold:!0},{icon:e.jsx(ce,{size:16}),label:`PyPI Wheel v${s}`,href:"https://pypi.org/project/qector-decoder-v3/"},{icon:e.jsx(de,{size:16}),label:"Free Workbench App",href:"/workbench"},{icon:e.jsx(xe,{size:16}),label:"ORCID 0009-0000-3465-3753",href:"https://orcid.org/0009-0000-3465-3753"}].map(t=>e.jsx(Ce,{icon:t.icon,label:t.label,href:t.href,variant:t.gold?"gold":"default"},t.label))})})}),e.jsx("section",{className:"section-band bg-void border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Proof Suite"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"Executable Verification for v1.0.0"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"Hashed-lock reproducible install, CERT_STRICT gate, and Lean/Coq kernel evidence - verifiable against Reference Manual v1.0.0."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reproducible Install"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Hashed-lock & CERT_STRICT"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Proof runs are hashed-locked and gated by CERT_STRICT - no universal benchmark figures, only workload-scoped artifacts."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reference Manual v1.0.0"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"DOI 10.5281/zenodo.21941046"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Normative manual with syndrome-faithfulness foundations, 15 backends, and API stability tiers. All proofs trace to this document."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Lean/Coq Evidence"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Kernel-checked proofs"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Executable suite checks GF(2) invariants and logical cosets with Lean/Coq kernels - evidence, not claims."})]})]}),e.jsxs("div",{className:"text-center mt-8",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-proof",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"View qector-proof on GitHub"}),e.jsx("span",{className:"text-muted-foreground text-xs ml-3",children:"github.com/GuillaumeLessard/qector-proof"})]})]})}),e.jsx("section",{className:"section-feature bg-surface/30 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,1),className:"text-center mb-14",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"How It Works"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"From Installation to Validation"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"QECTOR integrates directly into your existing QEC workflow with minimal friction."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:[{step:"01",title:"Install",desc:"Install the v1.0.0 wheel in a supported Python 3.9-3.13 environment alongside your existing Stim or PyMatching workflow.",detail:"pip install qector-decoder-v3==1.0.0",code:!0},{step:"02",title:"Decode",desc:"Access 17 concrete Rust-accelerated decoder configurations through a unified Python API. Workbench also exposes AutoDecoder and Auto Router as two orchestration kinds, for 19 named kinds in total.",detail:"from qector_decoder_v3 import BlossomDecoder, BpOsdDecoder",code:!0},{step:"03",title:"Validate",desc:"Claims are scoped to a declared workload and backed by SHA-256 sealed artifacts. Run qector-doctor before relying on optional paths and preserve the report with the result.",detail:"evidence policy · SHA-256 sealed",code:!1}].map(t=>e.jsxs("div",{className:"card-surface p-6 relative",children:[e.jsx("div",{className:"text-4xl font-black text-cyan-300/20 absolute top-4 right-4 select-none",children:t.step}),e.jsx("div",{className:"w-10 h-10 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 font-bold text-sm mb-4",children:t.step}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:t.desc}),t.code&&e.jsx("code",{className:"block text-xs bg-void border border-gridline rounded-lg px-3 py-2 text-cyan-300 font-mono overflow-x-auto",children:t.detail}),!t.code&&e.jsx("span",{className:"inline-flex items-center gap-1.5 text-xs text-cyan-300 font-mono bg-cyan-300/5 px-3 py-1.5 rounded-lg border border-cyan-300/10",children:t.detail})]},t.step))})]})}),e.jsxs("section",{id:"platform",className:"section-feature relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:"radial-gradient(circle at center, rgba(103, 232, 249, 0.06) 0%, transparent 70%)"}}),e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("div",{ref:t=>i(t,2),children:e.jsx(F,{eyebrow:"Why QECTOR",heading:"More Than Just MWPM",description:"QEC decoding is not one-size-fits-all. Surface codes, qLDPC codes, optional batch paths, and simulation workloads each demand different decoders. QECTOR documents the supported contracts and the evidence needed to evaluate a selected workload."})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[{title:"Blossom MWPM (Exact)",tag:"Blossom",desc:"Weight-optimal exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes.",proof:"Exact optimal matching · Stim-native"},{title:"qLDPC Support",tag:"BP-OSD (qLDPC)",desc:"Matching decoders are restricted to graphlike structures. BP-OSD handles reachable arbitrary GF(2) check matrices, including LDPC and qLDPC workloads.",proof:"Hyperedge-safe GF(2) path"},{title:"Workload-Scoped Execution",tag:"Union-Find + Optional GPU",desc:"Union-Find and optional GPU batch paths are available for supported workloads. Availability and performance must be verified on the target environment.",proof:"Environment-dependent paths"},{title:"One Library, Pluggable",tag:"Stim · PyMatching · Sinter · Qiskit",desc:"Drop QECTOR into any existing Stim or PyMatching workflow. Same API surface, swappable backend. No vendor lock-in.",proof:"Drop-in, same API surface"}].map((t,l)=>e.jsx("div",{ref:d=>i(d,3+l),children:e.jsx(Le,{title:t.title,tag:t.tag,desc:t.desc,proof:t.proof})},t.title))})]})})]}),e.jsx("section",{id:"decoder-section",className:"section-feature bg-surface/50",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{ref:t=>i(t,7),className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"19 Workbench Kinds · 17 Concrete Configs"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-6",children:"Decoding Algorithms"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"Union-Find, Fast Union-Find, Blossom MWPM, Sparse Blossom, Belief-Matching, BP-OSD, GPU Batch (CUDA/OpenCL), Hybrid, Predecoded, two-stage, ambiguity-cluster, colour-code, space-time, and other concrete paths are exposed through a consistent Python API. Workbench adds the two orchestration kinds, AutoDecoder and Auto Router, to make 19 named kinds."}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[{label:" v1.0.0 First Stable",desc:"API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points, qector CLI + qector-doctor."},{label:" 15 Binary Wheels",desc:"Python 3.9-3.13 across Windows amd64, Linux x86_64, and macOS arm64, released on PyPI."},{label:" GPU Batch Paths",desc:"CUDA and OpenCL batch paths are available for supported hardware and drivers; OpenCL via source build."},{label:" Reproducible Harness",desc:"qector bench ships with the package; measure on your own hardware, no universal figures claimed."}].map(t=>e.jsxs("div",{className:"p-4 bg-void/50 border border-gridline/50 rounded-xl",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-sm mb-1",children:t.label}),e.jsx("div",{className:"text-muted-foreground text-xs leading-relaxed",children:t.desc})]},t.label))}),e.jsxs("div",{className:"flex flex-wrap gap-3 mt-8",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/pypi/v/qector-decoder-v3?style=flat-square&color=24e7ff",alt:"qector-decoder-v3 version on PyPI",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/github/v/release/GuillaumeLessard/qector-decoder?style=flat-square&color=24e7ff",alt:"Latest qector-decoder release on GitHub",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/badge/GitHub-Artifacts-blue?logo=github",alt:"GitHub release artifacts for QECTOR",loading:"lazy"})})]})]}),e.jsx("div",{ref:t=>i(t,8),className:"relative w-full",children:e.jsx(Se,{})})]})})})}),e.jsx("section",{className:"section-feature relative",children:e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>i(t,9),children:[e.jsx(F,{eyebrow:"Performance",heading:"Measure on Your Own Hardware"}),e.jsx(Re,{title:"Reproducible Benchmark Harness",statement:"No universal benchmark figures are published on this site, because results depend on your hardware, drivers, and workloads. The qector bench harness ships with the package so you can measure logical error rates and throughput on your own machines.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts →",className:"max-w-3xl mx-auto mb-6"})]}),e.jsx("div",{ref:t=>i(t,10),className:"max-w-3xl mx-auto",children:e.jsxs("div",{className:"p-5 bg-void/50 border border-gridline/50 rounded-xl font-mono text-xs text-muted-foreground leading-relaxed overflow-x-auto",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"}),' pip install "qector-decoder-v3[bench]"']}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector-doctor"]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001"]}),e.jsx("div",{className:"text-green-400 mt-2",children:"✓ Logical error rates and throughput written as reproducible JSON"})]})}),e.jsx("div",{className:"text-center mt-8 flex flex-wrap justify-center gap-3",children:e.jsx(j,{to:"/evidence",className:"btn-outline",children:"Evidence & Reports"})})]})})}),e.jsx("section",{className:"section-band bg-surface/20 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-5xl mx-auto",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-center mb-10",children:"Enterprise Compliance & Licensing"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface border-cyan-300/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-300/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-cyan-300 flex items-center gap-2 mb-4",children:"License Clarity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"The package is source-available under PolyForm Noncommercial 1.0.0 for community use. Commercial use, hosted services, and redistribution require the written scope described on the license and pricing pages."}),e.jsx(j,{to:"/commercial",className:"text-cyan-300 text-sm font-medium hover:underline",children:"Learn about licensing →"})]}),e.jsxs("div",{className:"card-surface border-gold-400/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-gold-400/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-gold-400 flex items-center gap-2 mb-4",children:"Start Your Evaluation"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"$499 for a 60-day commercial evaluation. Unlimited internal seats, all decoders, priority support, and full validation artifact access. 100% credit toward any annual license purchased within 90 days of your evaluation start."}),e.jsx(j,{to:"/pricing",className:"btn-gold text-sm",children:"View Pricing & Tiers →"})]})]})]})}),e.jsx("section",{id:"pricing-section",className:"section-feature bg-surface/50 border-t border-gridline",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-xl mx-auto text-center",children:[e.jsxs("div",{ref:t=>i(t,11),className:"mb-6",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl font-bold mb-3",children:"Commercial Evaluation License"}),e.jsx("p",{className:"text-secondary text-sm max-w-md mx-auto",children:"One-time payment · 60-day pilot · Fully creditable toward an annual license bought within 90 days"})]}),e.jsxs("div",{ref:t=>i(t,12),className:"card-surface border-cyan-300/35 neon-border-cyan relative overflow-hidden p-8 rounded-2xl bg-void/80 text-center",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 to-transparent pointer-events-none"}),e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"text-4xl font-extrabold text-primary",children:"$499"}),e.jsx("p",{className:"text-muted-foreground text-xs mt-1",children:"Unlimited internal seats · All decoders · Priority support"})]}),e.jsx("div",{className:"flex justify-center mb-6",children:e.jsxs("a",{href:"https://buy.stripe.com/6oU00l77Xc8ifsegEqeUU07",className:"btn-cyan text-base font-bold py-3.5 px-8 rounded-xl shadow-lg shadow-cyan-300/20 inline-flex items-center gap-2",target:"_blank",rel:"noopener noreferrer",children:[e.jsx("span",{children:"Start 60-Day Evaluation: $499"}),e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),e.jsx("polyline",{points:"12 5 19 12 12 19"})]})]})}),e.jsx("div",{className:"border-t border-gridline/60 pt-4 mt-4 text-left space-y-2",children:["Full QECTOR Decoder v3 (all decoder families)","Written license agreement","Priority email support (2 business day response)","Benchmark artifact package","100% credit toward any annual license purchased within 90 days of your evaluation start"].map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-secondary",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{children:t})]},t))})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-4",children:["Need annual pricing, multi-seat, or OEM? ",e.jsx(j,{to:"/commercial",className:"text-cyan-300 hover:underline",children:"View all tiers →"})]})]})})})]})}const Te=c.lazy(()=>b(()=>import("./About-CzYv2IZf.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),Ae=c.lazy(()=>b(()=>import("./Decoder-4z-vTL16.js"),__vite__mapDeps([7,1,8,2,3,4,5,6]))),qe=c.lazy(()=>b(()=>import("./Workbench-DjamN-lA.js"),__vite__mapDeps([9,1,8,2,10,3,4,5,6]))),Ie=c.lazy(()=>b(()=>import("./McpServer-DH6efPKh.js"),__vite__mapDeps([11,1,8,3,4,5,6,2]))),$e=c.lazy(()=>b(()=>import("./ClaudePlugin-DdB5MGg7.js"),__vite__mapDeps([12,1,8,10,6,3,4,5,2]))),ze=c.lazy(()=>b(()=>import("./Blog-C2PtKQPL.js"),__vite__mapDeps([13,1,14,3,4,5,6,2]))),Me=c.lazy(()=>b(()=>import("./BlogPost-Bf5JMy3h.js"),__vite__mapDeps([15,1,14,4,3,5,6,2]))),Ge=c.lazy(()=>b(()=>import("./Pricing-CZj0aLPH.js"),__vite__mapDeps([16,1,17,3,4,5,8,2,6]))),We=c.lazy(()=>b(()=>import("./PricingFR-Dx93rO3U.js"),__vite__mapDeps([18,1,17,3,4,5,8,2,6]))),Qe=c.lazy(()=>b(()=>import("./Commercial-CgBsPCVr.js"),__vite__mapDeps([19,1,8,3,4,5,6,2]))),Ve=c.lazy(()=>b(()=>import("./Contact-ZN3l_2_v.js"),__vite__mapDeps([20,1,21,2,3,4,5,6]))),Be=c.lazy(()=>b(()=>import("./License-BVQmOrwC.js"),__vite__mapDeps([22,1,8,3,4,5,6,2]))),Fe=c.lazy(()=>b(()=>import("./Privacy-DZfev8WZ.js"),__vite__mapDeps([23,1,8,3,4,5,6,2]))),He=c.lazy(()=>b(()=>import("./Terms-Drxk6W26.js"),__vite__mapDeps([24,1,8,3,4,5,6,2]))),Ue=c.lazy(()=>b(()=>import("./TermsFR-BL-VfMSd.js"),__vite__mapDeps([25,1,8,3,4,5,6,2]))),Ye=c.lazy(()=>b(()=>import("./Refund-DJWm-f08.js"),__vite__mapDeps([26,1,8,3,4,5,6,2]))),Je=c.lazy(()=>b(()=>import("./Founder-CuTYpFsD.js"),__vite__mapDeps([27,1,21,3,4,5,6,2]))),Ke=c.lazy(()=>b(()=>import("./Evidence-C7IJaw71.js"),__vite__mapDeps([28,1,8,2,10,3,4,5,6]))),Xe=c.lazy(()=>b(()=>import("./Changelog-dTKijDWa.js"),__vite__mapDeps([29,1,8,10,3,4,5,6,2]))),Ze=c.lazy(()=>b(()=>import("./TechnicalReference-C9HpEUdH.js"),__vite__mapDeps([30,1,8,2,6,3,4,5]))),et=c.lazy(()=>b(()=>import("./Docs-CbxYbU8R.js"),__vite__mapDeps([31,1,8,2,3,4,5,6]))),tt=c.lazy(()=>b(()=>import("./Installer-B56SNEpM.js"),__vite__mapDeps([32,1,8,3,4,5,6,2]))),rt=c.lazy(()=>b(()=>import("./Manual-RdcO5vwC.js"),__vite__mapDeps([33,1,6,8,3,4,5,2]))),st=c.lazy(()=>b(()=>import("./Success-DyK9JNg3.js"),__vite__mapDeps([34,1,8,3,4,5,6,2]))),at=c.lazy(()=>b(()=>import("./NotFound-C-HGJzn4.js"),__vite__mapDeps([35,1,8,3,4,5,6,2])));function nt(){return e.jsx(Ne,{children:e.jsx(ve,{children:e.jsx(c.Suspense,{fallback:e.jsx(we,{}),children:e.jsxs(Z,{children:[e.jsx(f,{path:"/",element:e.jsx(De,{})}),e.jsx(f,{path:"/about",element:e.jsx(Te,{})}),e.jsx(f,{path:"/decoder",element:e.jsx(Ae,{})}),e.jsx(f,{path:"/workbench",element:e.jsx(qe,{})}),e.jsx(f,{path:"/mcp-server",element:e.jsx(Ie,{})}),e.jsx(f,{path:"/claude-plugin",element:e.jsx($e,{})}),e.jsx(f,{path:"/blog",element:e.jsx(ze,{})}),e.jsx(f,{path:"/blog/:id",element:e.jsx(Me,{})}),e.jsx(f,{path:"/pricing",element:e.jsx(Ge,{})}),e.jsx(f,{path:"/fr/pricing",element:e.jsx(We,{})}),e.jsx(f,{path:"/commercial",element:e.jsx(Qe,{})}),e.jsx(f,{path:"/contact",element:e.jsx(Ve,{})}),e.jsx(f,{path:"/license",element:e.jsx(Be,{})}),e.jsx(f,{path:"/privacy",element:e.jsx(Fe,{})}),e.jsx(f,{path:"/terms",element:e.jsx(He,{})}),e.jsx(f,{path:"/fr/terms",element:e.jsx(Ue,{})}),e.jsx(f,{path:"/refund",element:e.jsx(Ye,{})}),e.jsx(f,{path:"/guillaume-lessard",element:e.jsx(Je,{})}),e.jsx(f,{path:"/evidence",element:e.jsx(Ke,{})}),e.jsx(f,{path:"/changelog",element:e.jsx(Xe,{})}),e.jsx(f,{path:"/technical-reference",element:e.jsx(Ze,{})}),e.jsx(f,{path:"/docs",element:e.jsx(et,{})}),e.jsx(f,{path:"/installer",element:e.jsx(tt,{})}),e.jsx(f,{path:"/manual",element:e.jsx(rt,{})}),e.jsx(f,{path:"/success",element:e.jsx(st,{})}),e.jsx(f,{path:"*",element:e.jsx(at,{})})]})})})})}X.createRoot(document.getElementById("root")).render(e.jsx(c.StrictMode,{children:e.jsx(ee,{children:e.jsx(nt,{})})}));export{Le as A,Oe as C,Re as E,_e as J,Se as Q,ke as S,F as a,mt as b,H as u}; diff --git a/assets/index-Bh9DBCb3.js b/assets/index-Bh9DBCb3.js deleted file mode 100644 index f3b37007..00000000 --- a/assets/index-Bh9DBCb3.js +++ /dev/null @@ -1,3 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/About-Sj0SVf3I.js","assets/vendor-react-BiHfrq0e.js","assets/vendor-gsap-a3sj5zmn.js","assets/vendor-PiU4YGcH.js","assets/vendor-md-CLKxNZoa.js","assets/vendor-md-dRWncRqa.css","assets/vendor-ui-B0ssGG4c.js","assets/Decoder-B0aQK11-.js","assets/NeuralReveal-D-EQoOl2.js","assets/Workbench-Ct-U8BKA.js","assets/releases-1-HBloZv.js","assets/McpServer-C5JtddAJ.js","assets/ClaudePlugin-D4c0dp2L.js","assets/Blog-BFZmecCN.js","assets/blogData-OjR2ZtNr.js","assets/BlogPost-CkWMP1e_.js","assets/Pricing-Cn8Zecmp.js","assets/faqData-D7ZwBN6k.js","assets/PricingFR-B_DF8Sg3.js","assets/Commercial-BPs2_LwV.js","assets/Contact-DuHdX58e.js","assets/CalendlyWidget-BuhQfp2_.js","assets/License-DDdBqsPy.js","assets/Privacy-CAKpuiQ_.js","assets/LegalPage-DvyIDT6j.js","assets/privacy-CyCxpbsd.js","assets/Terms-CBCTDevc.js","assets/terms-LnOasveG.js","assets/TermsFR-CGlEiMoF.js","assets/Refund-CRy_OFTy.js","assets/RefundFR-KUCUHxUI.js","assets/PrivacyFR-yruEp8O3.js","assets/LicenseAgreement-prqWmpN4.js","assets/licenseAgreement-BVRBs70C.js","assets/LicenseAgreementFR-vtWAZWNF.js","assets/Security-CMQacbrM.js","assets/Compare-H6yva3AD.js","assets/Founder-C30HSU2C.js","assets/Evidence-BwlSEt0X.js","assets/Changelog-BkfmouBY.js","assets/TechnicalReference-BcuWSg0l.js","assets/Docs-KUXBA0rX.js","assets/Installer-BPMW9xjA.js","assets/Manual-DufMHAK3.js","assets/Success-B8_Hgbq9.js","assets/NotFound-D-ACnmyk.js"])))=>i.map(i=>d[i]); -import{r as c,j as e,c as W}from"./vendor-react-BiHfrq0e.js";import{z as $,L as k,R as ne,A as u,B as oe}from"./vendor-PiU4YGcH.js";import{S as B,C as le,a as ie,b as ce,R as de,c as me,d as xe,F as he,B as pe,P as ue,M as fe,e as ge}from"./vendor-ui-B0ssGG4c.js";import{g as V,S as be}from"./vendor-gsap-a3sj5zmn.js";import"./vendor-md-CLKxNZoa.js";(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))t(l);new MutationObserver(l=>{for(const m of l)if(m.type==="childList")for(const p of m.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&t(p)}).observe(document,{childList:!0,subtree:!0});function n(l){const m={};return l.integrity&&(m.integrity=l.integrity),l.referrerPolicy&&(m.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?m.credentials="include":l.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function t(l){if(l.ep)return;l.ep=!0;const m=n(l);fetch(l.href,m)}})();const ye="modulepreload",je=function(s){return"/"+s},H={},g=function(i,n,t){let l=Promise.resolve();if(n&&n.length>0){let f=function(y){return Promise.all(y.map(j=>Promise.resolve(j).then(w=>({status:"fulfilled",value:w}),w=>({status:"rejected",reason:w}))))};document.getElementsByTagName("link");const p=document.querySelector("meta[property=csp-nonce]"),b=p?.nonce||p?.getAttribute("nonce");l=f(n.map(y=>{if(y=je(y),y in H)return;H[y]=!0;const j=y.endsWith(".css"),w=j?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${y}"]${w}`))return;const o=document.createElement("link");if(o.rel=j?"stylesheet":ye,j||(o.as="script"),o.crossOrigin="",o.href=y,b&&o.setAttribute("nonce",b),document.head.appendChild(o),j)return new Promise((h,R)=>{o.addEventListener("load",h),o.addEventListener("error",()=>R(new Error(`Unable to preload CSS for ${y}`)))})}))}function m(p){const b=new Event("vite:preloadError",{cancelable:!0});if(b.payload=p,window.dispatchEvent(b),!b.defaultPrevented)throw p}return l.then(p=>{for(const b of p||[])b.status==="rejected"&&m(b.reason);return i().catch(m)})},K=s=>"items"in s,Y=[{label:"Products",items:[{label:"Decoder",href:"/decoder",note:"Python library, Rust core"},{label:"Claude Plugin",href:"/claude-plugin",note:"Air-gapped MCP for Claude"},{label:"Workbench",href:"/workbench",note:"Free desktop GUI"},{label:"MCP Server",href:"/mcp-server",note:"Tools for any MCP client"},{label:"Installers",href:"/installer",note:"Downloads and checksums"}]},{label:"Resources",items:[{label:"Documentation",href:"/docs",note:"Start here"},{label:"User Manual",href:"/manual",note:"Reference manual (DOI)"},{label:"Technical Reference",href:"/technical-reference",note:"API tiers and decoders"},{label:"Compare",href:"/compare",note:"QECTOR and alternatives"},{label:"Evidence",href:"/evidence",note:"Validation and DOIs"},{label:"Changelog",href:"/changelog",note:"Every release"},{label:"Blog",href:"/blog",note:"QEC articles"}]},{label:"Pricing",href:"/pricing"},{label:"Company",items:[{label:"About",href:"/about"},{label:"Founder",href:"/guillaume-lessard"},{label:"Enterprise & OEM",href:"/commercial"},{label:"Security & Trust",href:"/security"},{label:"Licence Agreement",href:"/license-agreement"}]},{label:"Contact",href:"/contact"}];function ve(){const[s,i]=c.useState(!1),[n,t]=c.useState(null),[l,m]=c.useState(!1),[p,b]=c.useState(!1),f=$(),y=c.useCallback(()=>{const o=window.scrollY;b(o>50),o>200?m(o>window.lastScrollY):m(!1),window.lastScrollY=o},[]);c.useEffect(()=>(window.addEventListener("scroll",y,{passive:!0}),()=>window.removeEventListener("scroll",y)),[y]),c.useEffect(()=>{i(!1),t(null)},[f]),c.useEffect(()=>{if(!n)return;const o=h=>{if(h instanceof KeyboardEvent){h.key==="Escape"&&t(null);return}h.target?.closest("[data-nav-group]")||t(null)};return window.addEventListener("mousedown",o),window.addEventListener("keydown",o),()=>{window.removeEventListener("mousedown",o),window.removeEventListener("keydown",o)}},[n]),c.useEffect(()=>(s?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[s]),c.useEffect(()=>{if(!s)return;const o=h=>{h.key==="Escape"&&i(!1)};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[s]);const j=o=>o==="/"?f.pathname==="/":f.pathname===o||f.pathname.startsWith(`${o}/`),w=o=>o.items.some(h=>j(h.href));return e.jsxs(e.Fragment,{children:[e.jsxs("nav",{"aria-label":"Main",className:`fixed top-4 left-1/2 -translate-x-1/2 z-50 w-[95%] max-w-6xl transition-all duration-500 ease-out ${l&&!s?"-translate-y-[140%]":"translate-y-0"}`,inert:l&&!s,children:[e.jsx("div",{className:`glass-nav rounded-2xl px-4 sm:px-6 py-3 transition-all duration-300 ${p?"shadow-deep":""}`,children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(k,{to:"/",className:"flex items-center gap-2.5 text-cyan-300 hover:text-cyan-100 transition-colors",children:e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"36",height:"36",className:"h-9 w-9 rounded-lg object-cover"})}),e.jsx("div",{className:"hidden lg:flex items-center gap-1",children:Y.map(o=>K(o)?e.jsxs("div",{className:"relative","data-nav-group":!0,onMouseEnter:()=>t(o.label),onMouseLeave:()=>t(h=>h===o.label?null:h),children:[e.jsxs("button",{type:"button","aria-expanded":n===o.label,"aria-haspopup":"true",onClick:()=>t(h=>h===o.label?null:o.label),className:`inline-flex items-center gap-1 px-3 py-2 rounded-lg text-sm font-medium transition-all duration-300 ${w(o)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,children:[o.label,e.jsx("svg",{"aria-hidden":"true",width:"10",height:"10",viewBox:"0 0 10 10",className:`transition-transform ${n===o.label?"rotate-180":""}`,children:e.jsx("path",{d:"M1 3l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",fill:"none"})})]}),n===o.label&&e.jsx("div",{className:"absolute left-0 top-full pt-2 z-50",children:e.jsx("ul",{className:"glass-nav rounded-xl p-2 w-64 shadow-deep",role:"list",children:o.items.map(h=>e.jsx("li",{children:e.jsxs(k,{to:h.href,"aria-current":j(h.href)?"page":void 0,className:`block px-3 py-2 rounded-lg transition-colors ${j(h.href)?"bg-cyan-300/10":"hover:bg-white/5"}`,children:[e.jsx("span",{className:`block text-sm font-medium ${j(h.href)?"text-cyan-300":"text-primary"}`,children:h.label}),h.note&&e.jsx("span",{className:"block text-xs text-muted-foreground",children:h.note})]})},h.href))})})]},o.label):e.jsx(k,{to:o.href,"aria-current":j(o.href)?"page":void 0,className:`px-3 py-2 rounded-lg text-sm font-medium transition-all duration-300 ${j(o.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,children:o.label},o.href))}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(k,{to:"/pricing",className:"hidden sm:inline-flex items-center px-4 py-2 border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all duration-300",children:"Get License"}),e.jsxs("button",{onClick:()=>i(!s),className:"lg:hidden flex flex-col items-center justify-center gap-1.5 p-2 min-h-[44px] min-w-[44px] rounded-lg hover:bg-white/5 transition-colors","aria-label":f.pathname.startsWith("/fr/")?s?"Fermer le menu":"Ouvrir le menu":s?"Close menu":"Open menu","aria-expanded":s,"aria-controls":"mobile-menu",children:[e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${s?"rotate-45 translate-y-2":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${s?"opacity-0":""}`}),e.jsx("span",{className:`block w-5 h-0.5 bg-primary transition-all duration-300 ${s?"-rotate-45 -translate-y-2":""}`})]})]})]})}),e.jsx("div",{id:"mobile-menu","aria-hidden":!s,className:`lg:hidden mt-2 glass-nav rounded-2xl overflow-hidden transition-all duration-300 ${s?"max-h-[calc(100dvh-110px)] overflow-y-auto opacity-100 visible":"max-h-0 opacity-0 invisible"}`,children:e.jsxs("div",{className:"px-4 py-3 space-y-1",children:[Y.map(o=>K(o)?e.jsxs("div",{className:"pt-2",children:[e.jsx("div",{className:"px-4 pb-1 text-[11px] font-semibold uppercase tracking-widest text-muted-foreground",children:o.label}),o.items.map(h=>e.jsx(k,{to:h.href,"aria-current":j(h.href)?"page":void 0,className:`flex items-center px-4 py-2.5 min-h-[44px] rounded-lg text-sm font-medium transition-all duration-200 ${j(h.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,onClick:()=>i(!1),children:h.label},h.href))]},o.label):e.jsx(k,{to:o.href,"aria-current":j(o.href)?"page":void 0,className:`flex items-center px-4 py-3 min-h-[44px] rounded-lg text-sm font-medium transition-all duration-200 ${j(o.href)?"text-cyan-300 bg-cyan-300/10":"text-secondary hover:text-primary hover:bg-white/5"}`,onClick:()=>i(!1),children:o.label},o.href)),e.jsx(k,{to:"/pricing",className:"sm:hidden mt-2 text-center px-4 py-3 min-h-[44px] flex items-center justify-center border border-gold-400/60 text-gold-400 text-sm font-medium rounded-lg hover:bg-gold-400/10 transition-all",onClick:()=>i(!1),children:"Get License"})]})})]}),s&&e.jsx("div",{className:"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm lg:hidden",onClick:()=>i(!1)})]})}const I={version:"1.0.1",pypiPackage:"qector-decoder-v3",contactEndpoint:void 0,ogImage:"https://qector.store/images/og-banner.png"},_t="https://calendly.com/qector-info/30min?background_color=0e0d0d&text_color=ffffff&primary_color=0e4088";async function Ne(){try{const i=await(await fetch("https://pypi.org/rss/project/qector-decoder-v3/releases.xml")).text(),m=(new DOMParser().parseFromString(i,"text/xml").querySelector("item title")?.textContent||"").match(/qector-decoder-v3\s+([\d.]+)/);return m?m[1]:I.version}catch{return I.version}}function ee(){const[s,i]=c.useState(I.version),[n,t]=c.useState(!0);return c.useEffect(()=>{let l=!0;return Ne().then(m=>{l&&(i(m),t(!1))}),()=>{l=!1}},[]),{version:s,loading:n}}const we=[{label:"QECTOR Decoder v3",href:"/decoder",badge:"Library"},{label:"Claude Code Plugin",href:"/claude-plugin",badge:"Claude"},{label:"Workbench GUI",href:"/workbench",badge:"Desktop App"},{label:"QECTOR MCP Server",href:"/mcp-server",badge:"MCP"},{label:"Installer & App Bundles",href:"/installer"},{label:"Pricing & Licensing",href:"/pricing"}],Ee=[{label:"Evidence & Reports",href:"/evidence"},{label:"Technical Reference",href:"/technical-reference"},{label:"Package User Manual",href:"/manual"},{label:"Documentation Hub",href:"/docs"},{label:"Version Changelog",href:"/changelog"}],ke=[{label:"About QECTOR",href:"/about"},{label:"Guillaume Lessard (Founder)",href:"/guillaume-lessard"},{label:"iD01t Productions"},{label:"Commercial Licensing",href:"/commercial"},{label:"Contact Engineering",href:"/contact"},{label:"Licence Agreement",href:"/license-agreement"},{label:"Terms of Service",href:"/terms"},{label:"Privacy Policy",href:"/privacy"},{label:"Refund Policy",href:"/refund"}];function G({href:s,external:i,badge:n,children:t}){const l="group flex items-center justify-between gap-3 min-h-[44px] py-1.5 text-secondary hover:text-cyan-300 text-sm transition-colors duration-200",m=e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"group-hover:translate-x-0.5 transition-transform duration-200",children:t}),n&&e.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded bg-surface border border-gridline text-muted-foreground group-hover:border-cyan-300/30 group-hover:text-cyan-300 transition-colors",children:n})]});return s?i?e.jsxs("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:l,children:[m,e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}):e.jsx(k,{to:s,className:l,children:m}):e.jsx("span",{className:l,children:m})}const _e=[{label:"Licence Agreement",href:"/license-agreement"},{label:"License",href:"/license"},{label:"Terms",href:"/terms"},{label:"Privacy",href:"/privacy"},{label:"Refund",href:"/refund"},{label:"Security",href:"/security"},{label:"Français",href:"/fr/pricing",hrefLang:"fr"}],Ce=[{label:"Contrat de licence",href:"/fr/license-agreement"},{label:"Conditions",href:"/fr/terms"},{label:"Confidentialité",href:"/fr/privacy"},{label:"Remboursement",href:"/fr/refund"},{label:"Tarifs",href:"/fr/pricing"},{label:"Sécurité",href:"/security"},{label:"English",href:"/pricing",hrefLang:"en"}];function Pe(){const{version:s}=ee(),i=$().pathname.startsWith("/fr/"),n=i?Ce:_e;return e.jsxs("footer",{className:"border-t border-cyan-900/40 bg-void/95 relative overflow-hidden text-left",children:[e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-1/2 h-16 bg-gradient-to-b from-cyan-400/5 to-transparent blur-3xl pointer-events-none"}),e.jsx("div",{className:"section-padding py-16 relative z-10",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12 lg:gap-8",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[e.jsxs(k,{to:"/",className:"inline-flex items-center gap-3 text-cyan-300 hover:text-cyan-100 transition-colors duration-200",children:[e.jsx("img",{src:"/images/logo.png",alt:"QECTOR official logo",width:"40",height:"40",className:"h-10 w-10 rounded-lg object-cover"}),e.jsxs("span",{className:"text-lg font-extrabold tracking-tight text-white",children:["QECTOR",e.jsx("span",{className:"text-cyan-300",children:"."})]})]}),e.jsx("p",{className:"text-secondary/80 text-sm leading-relaxed max-w-sm",children:"Quantum error correction decoding for Python. Built by Guillaume Lessard at iD01t Productions."}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsxs("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] text-muted-foreground hover:text-cyan-300 transition-colors","aria-label":"PyPI",children:[e.jsxs("span",{className:"text-sm font-mono border border-gridline rounded px-2 py-1 hover:border-cyan-300/30",children:["v",s]}),e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"GitHub",children:["GitHub",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]}),e.jsxs("a",{href:"https://orcid.org/0009-0000-3465-3753",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center min-h-[44px] px-1 text-muted-foreground hover:text-cyan-300 transition-colors text-sm font-medium","aria-label":"ORCID",children:["ORCID",e.jsx("span",{className:"sr-only",children:"(opens in new tab)"})]})]})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Platform"}),e.jsx("div",{className:"flex flex-col gap-1",children:we.map(t=>e.jsx(G,{href:t.href,external:t.external,badge:t.badge,children:t.label},t.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Research & Docs"}),e.jsx("div",{className:"flex flex-col gap-1",children:Ee.map(t=>e.jsx(G,{href:t.href,external:t.external,badge:t.badge,children:t.label},t.label))})]}),e.jsxs("div",{className:"space-y-5",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-white/90",children:"Company"}),e.jsx("div",{className:"flex flex-col gap-1",children:ke.slice(0,5).map(t=>e.jsx(G,{href:t.href,external:t.external,badge:t.badge,children:t.label},t.label))})]})]}),e.jsxs("div",{className:"mt-16 pt-8 border-t border-gridline flex flex-col md:flex-row items-start md:items-center justify-between gap-6",children:[e.jsxs("div",{className:"text-xs text-muted-foreground max-w-xl leading-relaxed",children:[e.jsx("span",{className:"font-semibold text-secondary",children:"Distribution:"})," PyPI (",e.jsx("code",{className:"text-cyan-300/80 font-mono",children:"qector-decoder-v3"}),") is the Python library. The free ",e.jsx(k,{to:"/installer",className:"link-accent",children:"Workbench GUI"})," is a standalone desktop application shipped self-contained for Windows x64 and Linux x64 (no system Python required)."]}),e.jsx("nav",{"aria-label":i?"Mentions légales":"Legal",className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs font-medium text-muted-foreground",children:n.map(t=>e.jsx(k,{to:t.href,hrefLang:t.hrefLang,className:"inline-flex items-center min-h-[44px] px-1 hover:text-cyan-300 transition-colors duration-200",children:t.label},t.href))})]})]})}),e.jsx("div",{className:"bg-[#050b14]",children:e.jsx("div",{className:"section-padding py-4",children:e.jsxs("div",{className:"max-w-7xl mx-auto text-xs text-muted-foreground/70 text-center md:text-left",children:["© 2026 QECTOR Lab / iD01t Productions. All rights reserved.",e.jsx("div",{className:"mt-1",children:"Éditeur : Guillaume Lessard, entrepreneur individuel (iD01t Productions), 2004 De Lorimier, Longueuil, QC J4K 3H7, Canada · admin@qector.store"})]})})})]})}function Le({children:s}){const i=$();return c.useEffect(()=>{window.scrollTo(0,0),document.documentElement.lang=i.pathname.startsWith("/fr/")?"fr":"en",document.getElementById("main-content")?.focus();const n=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t=(p=document)=>{p.querySelectorAll(".card-surface:not(.revealed), .prose:not(.revealed)").forEach(b=>{n?b.classList.add("revealed"):l.observe(b)})},l=new IntersectionObserver(p=>{p.forEach(b=>{b.isIntersecting&&(b.target.classList.add("revealed"),l.unobserve(b.target))})},{threshold:.1,rootMargin:"0px 0px -10% 0px"});let m=null;return n||(m=new MutationObserver(p=>{p.forEach(b=>{b.addedNodes.forEach(f=>{f.nodeType===Node.ELEMENT_NODE&&t(f)})})}),m.observe(document.body,{childList:!0,subtree:!0})),t(),()=>{l.disconnect(),m&&m.disconnect()}},[i.pathname]),e.jsxs("div",{className:"min-h-screen bg-void text-foreground quantum-grid-bg relative",children:[e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-cyan-300 focus:text-void focus:font-semibold focus:rounded-lg",children:i.pathname.startsWith("/fr/")?"Aller au contenu principal":"Skip to main content"}),e.jsx(ve,{}),e.jsx("main",{id:"main-content",tabIndex:-1,className:"pt-20 outline-none",children:s}),e.jsx(Pe,{})]})}class Re extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(i,n){console.error("QECTOR site error boundary caught:",i,n.componentStack)}handleReload=()=>{this.setState({hasError:!1}),window.location.href="/"};render(){return this.state.hasError?e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-void px-6",children:e.jsxs("div",{className:"max-w-md text-center card-surface",children:[e.jsx("div",{className:"w-12 h-12 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center mx-auto mb-4 text-cyan-300 text-xl",children:"!"}),e.jsx("h1",{className:"text-xl font-bold text-primary mb-2",children:"Something went wrong"}),e.jsx("p",{className:"text-secondary text-sm mb-6",children:"This page hit an unexpected error. No page data was sent; check the browser console for the local error and reload."}),e.jsx("button",{onClick:this.handleReload,className:"btn-cyan",children:"Reload homepage"})]})}):this.props.children}}function Se(){return e.jsx("div",{"data-page-loader":!0,className:"min-h-[60vh] flex items-center justify-center",role:"status","aria-live":"polite",children:e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 border-2 border-cyan-300/20 border-t-cyan-300 rounded-full animate-spin"}),e.jsx("span",{className:"sr-only",children:"Loading page…"})]})})}const J={proMonthly:"https://buy.stripe.com/5kQcN7eAp3BM5RE5ZMeUU0g",proAnnual:"https://buy.stripe.com/8x228teAp6NY6VI87UeUU0h",proPerpetual:"https://buy.stripe.com/dRm00l0Jzfku4NA0FseUU0i",lab:"https://buy.stripe.com/aFa7sN9g5fku0xk5ZMeUU0k",pilot:"https://buy.stripe.com/14AeVf9g5b4e0xkdseeUU0l"},L={proMonthly:79,proAnnual:790,proPerpetual:1990,lab:9900,pilot:1500,enterpriseFrom:25e3,pilotDays:60,refundDays:14,academicDiscountPct:40},S=s=>`$${s.toLocaleString("en-US")}`,Ct=s=>`${s.toLocaleString("fr-CA").replace(/[\u00a0\u202f]/g," ")} $`,Oe={en:"en_US",fr:"fr_FR"};function Ae({title:s="QECTOR · Quantum Error Correction Decoding for Python",description:i="QECTOR Decoder v3 - Rust-core Python quantum error correction decoder. v1.0.1 stable release with API stability tiers, a qector CLI, and a reproducible measurement harness (qector bench) for measuring on your own hardware.",ogImage:n=I.ogImage,noindex:t=!1,lang:l="en",alternates:m}){const p=$(),b=`https://qector.store${p.pathname==="/"?"/":`${p.pathname.replace(/\/$/,"")}/`}`;return c.useEffect(()=>{document.title=s,document.documentElement.lang=l;const f=(w,o)=>{let h=document.querySelector(w);if(!h){h=document.createElement("meta");const R=w.includes("property=")?"property":"name",O=w.match(/"([^"]+)"/)?.[1]||"";h.setAttribute(R,O),document.head.appendChild(h)}h.content=o};f('meta[name="description"]',i),f('meta[name="robots"]',t?"noindex, follow":"index, follow, max-image-preview:large"),f('meta[property="og:title"]',s),f('meta[property="og:description"]',i),f('meta[property="og:url"]',b),f('meta[property="og:type"]',"website"),f('meta[property="og:locale"]',Oe[l]??"en_US"),f('meta[property="og:image"]',n),f('meta[property="og:image:alt"]',"QECTOR official logo"),f('meta[property="og:site_name"]',"QECTOR"),f('meta[name="twitter:card"]',"summary_large_image"),f('meta[name="twitter:title"]',s),f('meta[name="twitter:description"]',i),f('meta[name="twitter:image"]',n),f('meta[name="twitter:image:alt"]',"QECTOR official logo"),f('meta[name="theme-color"]',"#24e7ff");let y=document.querySelector('link[rel="canonical"]');y||(y=document.createElement("link"),y.rel="canonical",document.head.appendChild(y)),y.href=b,document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(w=>w.remove());const j=[];for(const w of m??[]){const o=document.createElement("link");o.rel="alternate",o.hreflang=w.lang,o.href=w.href,document.head.appendChild(o),j.push(o)}return()=>{j.forEach(w=>w.remove())}},[s,i,b,n,t,l,m]),null}function De({data:s}){const i="json-ld-data";return c.useEffect(()=>{let n=document.getElementById(i);return n||(n=document.createElement("script"),n.id=i,n.type="application/ld+json",document.head.appendChild(n)),n.textContent=JSON.stringify(s),()=>{const t=document.getElementById(i);t&&t.remove()}},[s]),null}function Te({icon:s,label:i,href:n,variant:t="default",className:l=""}){const m=t==="gold"?"bg-gold-400/10 border border-gold-400/30 text-gold-400 hover:bg-gold-400/20":"bg-surface border border-gridline text-secondary hover:text-cyan-300 hover:border-cyan-300/30";return e.jsxs("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:`inline-flex items-center gap-2 px-4 py-2.5 rounded-full text-sm transition-all duration-300 ${m} ${l}`,children:[e.jsx("span",{"aria-hidden":"true",children:s}),e.jsx("span",{children:i})]})}function Z({eyebrow:s,heading:i,description:n,align:t="center",maxWidth:l="max-w-3xl",className:m=""}){const p=t==="center"?"text-center mx-auto":"text-left",b=t==="center"?"mx-auto":"";return e.jsxs("div",{className:`${l} ${p} mb-12 md:mb-16 ${m}`,children:[s&&e.jsx("span",{className:"eyebrow-pill mb-4",children:s}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-balance mb-4",children:i}),n&&e.jsx("p",{className:`text-secondary text-lg leading-relaxed text-pretty max-w-prose ${b}`,children:n})]})}const Ie={cyan:"bg-cyan-300/10 text-cyan-300 border border-cyan-300/20",green:"bg-green-400/10 text-green-400 border border-green-400/20",purple:"bg-purple-400/10 text-purple-400 border border-purple-400/20",gold:"bg-gold-400/10 text-gold-400 border border-gold-400/20"};function $e({title:s,tag:i,badge:n,desc:t,proof:l,muted:m=!1,className:p=""}){return e.jsxs("div",{className:`card-surface group ${m?"border-gridline/50 opacity-80":""} ${p}`,children:[i&&e.jsx("div",{className:"text-muted-foreground text-xs font-mono uppercase tracking-wider mb-2",children:i}),e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e.jsx("h3",{className:`font-semibold text-lg transition-colors ${m?"text-gold-400/80":"text-cyan-300 group-hover:text-cyan-200"}`,children:s}),n&&e.jsx("span",{className:`shrink-0 px-2.5 py-1 rounded-full text-xs font-medium ${m?"bg-gold-400/5 text-gold-400/60 border border-gold-400/20":Ie[n.color]}`,children:n.label})]}),e.jsx("p",{className:`leading-relaxed ${m?"text-muted-foreground text-sm":"text-secondary"}`,children:t}),l&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-gridline/60 flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{className:"text-muted-foreground font-mono",children:l})]})]})}function qe({title:s,statement:i,href:n,linkLabel:t="View evidence →",className:l=""}){return e.jsxs("div",{className:`relative rounded-2xl border border-cyan-300/20 bg-void p-6 overflow-hidden ${l}`,children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none bg-gradient-to-br from-cyan-300/5 to-transparent"}),e.jsxs("div",{className:"relative z-10",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-300"}),e.jsx("span",{className:"text-xs font-mono uppercase tracking-wider text-cyan-300",children:s})]}),e.jsx("p",{className:"text-secondary leading-relaxed mb-4",children:i}),n&&e.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-300 text-sm font-medium hover:underline underline-offset-4",children:t})]})]})}function Me(){const[s,i]=c.useState({}),[n,t]=c.useState({}),[l,m]=c.useState(!1),[p,b]=c.useState(!1),f=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)for(let d=0;d<3;d++)a.push({id:`${r}_${d}`,r,c:d,x:120+d*100,y:60+r*100});return a},[]),y=c.useMemo(()=>{const a=[];for(let r=0;r<3;r++)a.push({id:`L_${r}`,type:"L",r,c:-1,x1:30,y1:60+r*100,x2:120,y2:60+r*100});for(let r=0;r<3;r++)a.push({id:`R_${r}`,type:"R",r,c:3,x1:320,y1:60+r*100,x2:410,y2:60+r*100});for(let r=0;r<3;r++)for(let d=0;d<2;d++)a.push({id:`H_${r}_${d}`,type:"H",r,c:d,x1:120+d*100,y1:60+r*100,x2:120+(d+1)*100,y2:60+r*100});for(let r=0;r<2;r++)for(let d=0;d<3;d++)a.push({id:`V_${r}_${d}`,type:"V",r,c:d,x1:120+d*100,y1:60+r*100,x2:120+d*100,y2:60+(r+1)*100});return a},[]),j=c.useMemo(()=>{const a={},r=d=>{a[d]=!a[d]};return y.forEach(d=>{s[d.id]&&(d.type==="H"?(r(`${d.r}_${d.c}`),r(`${d.r}_${d.c+1}`)):d.type==="V"?(r(`${d.r}_${d.c}`),r(`${d.r+1}_${d.c}`)):d.type==="L"?r(`${d.r}_0`):d.type==="R"&&r(`${d.r}_2`))}),Object.keys(a).forEach(d=>{a[d]||delete a[d]}),a},[s,y]),w=a=>{t({}),m(!1),i(r=>({...r,[a]:!r[a]}))},o=()=>{i({}),t({}),m(!1)},h=(a=.2)=>{t({}),m(!1);const r={};y.forEach(d=>{Math.random()Math.abs(a.r-r.r)+Math.abs(a.c-r.c),O=c.useCallback((a,r)=>{const d=[],C=Math.min(a.r,r.r),v=Math.max(a.r,r.r),_=a.r{const a=Object.keys(j).map(v=>{const[_,x]=v.split("_").map(Number);return f.find(N=>N.r===_&&N.c===x)});if(a.length===0){t({}),m(!0);return}const r=v=>{if(v.length===0)return{cost:0,pairs:[]};const _=v[0],x=v.slice(1);let N=1/0,E=[];const P=_.c+1,q=r(x);P+q.costae!==A),z=r(se);Q+z.cost{if(v==="L"||v==="R"||_==="L"||_==="R"){const x=v==="L"||v==="R"?_:v;if((v==="L"||v==="R"?v:_)==="L"){for(let E=0;E{C[N]=!0})}),t(C),m(!0)},[j,f,O]),re=c.useMemo(()=>{if(!l)return"idle";const a=y.filter(x=>{const N=s[x.id]||!1,E=n[x.id]||!1;return N!==E}),r={},d=(x,N)=>{r[x]||(r[x]=[]),r[N]||(r[N]=[]),r[x].push(N),r[N].push(x)};a.forEach(x=>{x.type==="H"?d(`${x.r}_${x.c}`,`${x.r}_${x.c+1}`):x.type==="V"?d(`${x.r}_${x.c}`,`${x.r+1}_${x.c}`):x.type==="L"?d("L",`${x.r}_0`):x.type==="R"&&d("R",`${x.r}_2`)});const C={},v=["L"];C.L=!0;let _=!1;for(;v.length>0;){const x=v.shift();if(x==="R"){_=!0;break}(r[x]||[]).forEach(E=>{C[E]||(C[E]=!0,v.push(E))})}return _?"failure":"success"},[l,s,n,y]);return e.jsxs("div",{className:"flex flex-col gap-4 border border-gridline bg-surface/30 rounded-2xl p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-cyan-300 font-semibold text-sm uppercase tracking-wider flex items-center gap-1.5",children:[e.jsx(B,{className:"w-4 h-4"}),"Interactive QEC Simulator"]}),e.jsx("p",{className:"text-muted-foreground text-xs mt-0.5",children:"Planar stabilizer code (d=3). Click edges to toggle physical errors."})]}),e.jsx("button",{onClick:()=>b(!p),className:"min-h-[44px] min-w-[44px] inline-flex items-center justify-center text-secondary hover:text-cyan-300 transition-colors","aria-label":"Toggle help",children:e.jsx(le,{className:"w-5 h-5"})})]}),p&&e.jsxs("div",{className:"p-4 bg-void/80 border border-gridline rounded-xl text-xs text-secondary leading-relaxed space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"How to play:"})," Click on the links (grey/red lines) to inject physical errors. Red lines represent errors."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Syndromes:"})," Grid nodes measure checks. When adjacent errors are odd, a check triggers (lights up orange)."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Decoder:"})," Minimum Weight Perfect Matching (MWPM) matches active checks. When you click ",e.jsx("span",{className:"text-cyan-300",children:"Run Decoder"}),", it draws matching correction paths in cyan."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Success condition:"})," If error + correction paths do not form a logical connection across boundaries (from left to right), the state is successfully corrected!"]})]}),e.jsxs("div",{className:"bg-void/50 border border-gridline rounded-xl flex items-center justify-center p-4 relative overflow-hidden",children:[e.jsxs("svg",{viewBox:"0 0 440 320",className:"w-full max-w-[440px] h-auto select-none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsxs("defs",{children:[e.jsxs("radialGradient",{id:"activeNodeGlow",cx:"50%",cy:"50%",r:"50%",children:[e.jsx("stop",{offset:"0%",stopColor:"#fef08a"}),e.jsx("stop",{offset:"60%",stopColor:"#eab308"}),e.jsx("stop",{offset:"100%",stopColor:"#a16207"})]}),e.jsxs("linearGradient",{id:"inactiveNodeGlow",x1:"0",y1:"0",x2:"1",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#1e293b"}),e.jsx("stop",{offset:"100%",stopColor:"#0f172a"})]}),e.jsx("pattern",{id:"gridDots",width:"20",height:"20",patternUnits:"userSpaceOnUse",children:e.jsx("circle",{cx:"2",cy:"2",r:"1",fill:"#1e293b",fillOpacity:"0.6"})})]}),e.jsx("rect",{width:"440",height:"320",fill:"url(#gridDots)",rx:"10"}),e.jsx("line",{x1:"30",y1:"30",x2:"30",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"20",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(-90, 20, 165)",className:"font-mono",children:"LEFT BOUNDARY"}),e.jsx("line",{x1:"410",y1:"30",x2:"410",y2:"290",stroke:"#475569",strokeWidth:"3",strokeDasharray:"4 4"}),e.jsx("text",{x:"420",y:"165",fill:"#475569",fontSize:"10",textAnchor:"middle",transform:"rotate(90, 420, 165)",className:"font-mono",children:"RIGHT BOUNDARY"}),y.map(a=>{const r=s[a.id]||!1,d=n[a.id]||!1;let C="#334155";return r&&d?C="#e2e8f0":r?C="#ef4444":d&&(C="#06b6d4"),e.jsxs("g",{className:"group",children:[e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:"transparent",strokeWidth:"16",className:"cursor-pointer",tabIndex:0,role:"checkbox","aria-checked":r,"aria-label":`Toggle error on qubit edge ${a.id}`,onClick:()=>w(a.id),onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&(v.preventDefault(),w(a.id))}}),e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:C,strokeWidth:r||d?4:2,className:"transition-colors duration-200 pointer-events-none group-hover:stroke-cyan-300/40",style:{filter:r?"drop-shadow(0 0 4px rgba(239, 68, 68, 0.4))":d?"drop-shadow(0 0 4px rgba(6, 182, 212, 0.4))":"none"}}),e.jsx("circle",{cx:(a.x1+a.x2)/2,cy:(a.y1+a.y2)/2,r:"5",fill:r?"#ef4444":d?"#06b6d4":"#1e293b",stroke:r||d?"#e2e8f0":"#475569",strokeWidth:"1.5",className:"transition-colors duration-200 pointer-events-none group-hover:fill-cyan-300 group-hover:stroke-cyan-200"})]},a.id)}),f.map(a=>{const r=j[a.id]||!1;return e.jsxs("g",{children:[r&&e.jsx("circle",{cx:a.x,cy:a.y,r:"18",fill:"rgba(251, 191, 36, 0.15)",className:"animate-pulse"}),e.jsx("circle",{cx:a.x,cy:a.y,r:r?12:9,fill:r?"url(#activeNodeGlow)":"url(#inactiveNodeGlow)",stroke:r?"#fbbf24":"#334155",strokeWidth:r?2:1.5,className:"transition-all duration-300 pointer-events-none",style:{filter:r?"drop-shadow(0 0 10px rgba(251, 191, 36, 0.7))":"none"}}),e.jsx("circle",{cx:a.x-(r?3:2),cy:a.y-(r?3:2),r:r?3:2,fill:"white",fillOpacity:"0.25",className:"pointer-events-none"}),r&&e.jsx("circle",{cx:a.x,cy:a.y,r:20,fill:"transparent",stroke:"#fbbf24",strokeWidth:"1",strokeOpacity:"0.4",className:"animate-ping"}),e.jsx("text",{x:a.x,y:a.y+3,textAnchor:"middle",fill:r?"#020617":"#94a3b8",fontSize:"9",fontWeight:"bold",className:"font-mono text-[9px] pointer-events-none",children:r?"!":"S"})]},a.id)})]}),l&&e.jsxs("div",{className:"absolute bottom-3 left-3 right-3 flex items-center justify-between p-3 bg-surface/90 border border-gridline rounded-xl backdrop-blur-md transition-all duration-300",children:[re==="success"?e.jsxs("div",{className:"flex items-center gap-2 text-green-400 text-sm font-semibold",children:[e.jsx(ie,{className:"w-5 h-5"}),e.jsx("span",{children:"SUCCESS: Errors resolved"})]}):e.jsxs("div",{className:"flex items-center gap-2 text-red-400 text-sm font-semibold",children:[e.jsx(ce,{className:"w-5 h-5"}),e.jsx("span",{children:"LOGICAL ERROR: Correction failed"})]}),e.jsx("div",{className:"text-[10px] text-muted-foreground font-mono",children:"d=3 code slice"})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("button",{onClick:()=>h(.2),className:"px-3 py-3 bg-surface hover:bg-white/5 border border-gridline rounded-lg text-xs font-semibold text-secondary hover:text-primary transition-all flex items-center justify-center gap-1.5",children:[e.jsx(B,{className:"w-3.5 h-3.5"}),"Inject Errors"]}),e.jsxs("button",{onClick:te,disabled:Object.keys(j).length===0,className:"px-3 py-3 bg-cyan-300 disabled:bg-cyan-300/20 disabled:text-void/40 hover:bg-cyan-200 text-void rounded-lg text-xs font-bold transition-all flex items-center justify-center gap-1.5",children:[e.jsx(de,{className:`w-3.5 h-3.5 ${l?"":"animate-spin"}`}),"Run Decoder"]}),e.jsx("button",{onClick:o,className:"px-3 py-3 bg-surface hover:bg-red-950/20 border border-gridline hover:border-red-900/30 rounded-lg text-xs font-semibold text-secondary hover:text-red-400 transition-all",children:"Reset Graph"})]})]})}function ze({code:s,language:i="python",filename:n,className:t=""}){const[l,m]=c.useState(!1),p=async()=>{try{await navigator.clipboard.writeText(s),m(!0),setTimeout(()=>m(!1),2e3)}catch(b){console.error("Failed to copy text: ",b)}};return e.jsxs("div",{className:`my-4 max-w-full min-w-0 border border-gridline rounded-xl overflow-hidden bg-void/50 ${t}`,children:[n&&e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gridline bg-surface/50 text-xs font-mono text-muted-foreground",children:[e.jsx("span",{children:n}),e.jsx("span",{className:"uppercase text-[10px] bg-cyan-300/10 text-cyan-300 px-1.5 py-0.5 rounded border border-cyan-300/20",children:i})]}),e.jsxs("div",{className:"relative group",children:[e.jsx("pre",{className:"p-4 pr-14 overflow-x-auto overflow-y-auto font-mono text-sm leading-relaxed text-secondary bg-void/30 max-h-[400px]",children:e.jsx("code",{className:`language-${i}`,children:s})}),e.jsx("button",{onClick:p,className:"absolute top-3 right-3 p-1.5 bg-surface border border-gridline rounded-lg text-secondary hover:text-cyan-300 hover:border-cyan-300/30 opacity-0 group-hover:opacity-100 focus:opacity-100 max-sm:opacity-100 transition-all duration-200","aria-label":l?"Copied":"Copy code",children:l?e.jsx(me,{className:"w-4 h-4 text-green-400"}):e.jsx(xe,{className:"w-4 h-4"})}),e.jsx("span",{className:"sr-only","aria-live":"polite",children:l?"Code copied to clipboard":""})]})]})}V.registerPlugin(be);function D({value:s,label:i}){return e.jsxs("div",{className:"text-center px-4 py-3",children:[e.jsx("div",{className:"text-2xl font-bold text-cyan-300",children:s}),e.jsx("div",{className:"text-xs text-muted-foreground leading-tight max-w-[11rem] mx-auto",children:i})]})}function Ge(){const s=c.useRef([]),{version:i}=ee();c.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const t=document.createElement("script");t.src="https://js.stripe.com/v3/buy-button.js",t.async=!0,document.body.appendChild(t);const l=V.context(()=>{s.current.filter(Boolean).forEach(p=>{V.fromTo(p,{opacity:0,y:40},{opacity:1,y:0,duration:.8,ease:"power2.out",scrollTrigger:{trigger:p,start:"top 85%",once:!0}})})});return()=>{l.revert(),t.parentNode===document.body&&document.body.removeChild(t)}},[]);const n=(t,l)=>{t&&(s.current[l]=t)};return e.jsxs(e.Fragment,{children:[e.jsx(Ae,{title:"QECTOR · Quantum Error Correction Decoding for Python",description:"QECTOR Decoder v3 - Rust-core Python library with 17 concrete decoder configurations plus 2 Workbench routing kinds, a syndrome-faithful contract, and reproducible validation guidance."}),e.jsx(De,{data:{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication",name:"QECTOR Decoder v3",description:"QECTOR Decoder v3 is the qector-decoder-v3 1.0.1 Rust/Python quantum error correction package with 17 concrete decoder configurations plus 2 Workbench routing kinds, offline Ed25519 licensing, and reproducible validation guidance.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",programmingLanguage:"Python",url:"https://qector.store/",downloadUrl:"https://pypi.org/project/qector-decoder-v3/",softwareVersion:i,author:{"@type":"Person",name:"Guillaume Lessard",url:"https://github.com/GuillaumeLessard"},maintainer:{"@type":"Organization",name:"iD01t Productions"},identifier:"https://pypi.org/project/qector-decoder-v3/",license:"https://qector.store/license/",offers:{"@type":"Offer",price:"0",priceCurrency:"USD",availability:"https://schema.org/InStock"}},{"@type":"Organization",name:"QECTOR",url:"https://qector.store/",logo:"https://qector.store/images/logo.png",email:"admin@qector.store",founder:{"@type":"Person",name:"Guillaume Lessard",identifier:"0009-0000-3465-3753"},address:{"@type":"PostalAddress",addressLocality:"Longueuil",addressRegion:"QC",postalCode:"J4K 3H7",addressCountry:"CA"},sameAs:["https://github.com/GuillaumeLessard/qector-decoder","https://pypi.org/project/qector-decoder-v3/","https://github.com/GuillaumeLessard/qector-claude-plugin","https://orcid.org/0009-0000-3465-3753"]}]}}),e.jsxs("section",{className:"relative min-h-screen flex items-center justify-center overflow-hidden","aria-label":"QECTOR hero",children:[e.jsx("img",{src:"/images/hero-bg.webp",alt:"","aria-hidden":"true",fetchPriority:"high",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.45) saturate(1.1)"}}),e.jsx("noscript",{children:e.jsx("img",{src:"/images/og-banner.png",alt:"","aria-hidden":"true",className:"absolute inset-0 w-full h-full object-cover z-0",style:{filter:"brightness(0.4)"}})}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-void/60 via-void/25 to-void z-[1]"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-500/[0.04] to-transparent z-[1]"}),e.jsxs("div",{className:"relative z-10 w-full min-w-0 text-center max-w-5xl mx-auto px-6 pt-24 pb-20",children:[e.jsxs(k,{to:"/changelog",className:"inline-flex max-w-full flex-wrap items-center justify-center gap-2 px-4 py-2 bg-surface/70 border border-cyan-300/20 rounded-full text-center text-xs leading-relaxed text-cyan-300 hover:bg-cyan-300/10 transition-all mb-8 backdrop-blur-sm",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-green-400 animate-pulse-dot"}),e.jsxs("span",{children:["v",i," · 18 verified wheels · Changelog →"]})]}),e.jsxs("h1",{className:"max-w-4xl mx-auto break-words text-3xl sm:text-5xl md:text-6xl lg:text-7xl font-extrabold tracking-tight leading-[1.05] mb-6",style:{textShadow:"0 4px 32px rgba(0,0,0,0.9)"},children:[e.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-cyan-300 to-cyan-400",children:"QEC Decoding"})," ","for Python"]}),e.jsxs("p",{className:"text-base sm:text-lg md:text-xl text-secondary/90 max-w-3xl mx-auto mb-5 leading-relaxed break-words",style:{textShadow:"0 2px 16px rgba(0,0,0,0.8)"},children:["One library for many decoder families on the same check matrix: Union-Find, exact MWPM, BP-OSD and Relay-BP for qLDPC codes, on CPU and GPU, with Stim and Sinter integration."," ",e.jsx("span",{className:"text-primary font-semibold",children:"Every correction is checked against its syndrome"}),", and commercial licences verify offline, so it runs air-gapped."]}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed",style:{textShadow:"0 2px 12px rgba(0,0,0,0.8)"},children:"Built for hardware teams, qLDPC researchers and academic labs. Free for academic and non-commercial research; commercial plans from $79/month with a 14-day money-back guarantee."}),e.jsxs("div",{className:"flex flex-col sm:flex-row flex-wrap gap-3 sm:gap-4 justify-center items-stretch sm:items-center mb-10",children:[e.jsx(k,{to:"/pricing",className:"btn-gold px-8 py-4 text-sm sm:text-base font-bold w-full sm:w-auto",children:"View Plans & Pricing →"}),e.jsx(k,{to:"/decoder",className:"btn-cyan px-8 py-4 text-sm sm:text-base w-full sm:w-auto",children:"Explore the Decoder"}),e.jsx("a",{href:"https://github.com/qectorlab/qector-decoder-workbench-windows/releases/latest",className:"btn-outline px-8 py-4 text-sm sm:text-base w-full sm:w-auto",target:"_blank",rel:"noopener noreferrer",children:"Free Workbench GUI"})]}),e.jsx("div",{className:"max-w-2xl mx-auto mb-10 text-left",children:e.jsx(ze,{language:"bash",filename:"Quick start",code:`pip install qector-decoder-v3==${i} -python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"`})}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 md:divide-x md:divide-white/5 border-t border-white/5 pt-6 max-w-2xl mx-auto",children:[e.jsx(D,{value:"17",label:"Decoder configurations"}),e.jsx(D,{value:"H·c = s",label:"Checked on every result"}),e.jsx(D,{value:"CPU + GPU",label:"Batch decoding"}),e.jsx(D,{value:"Offline",label:"Air-gapped licensing"})]}),e.jsxs("div",{className:"max-w-2xl mx-auto mt-10 p-5 md:p-6 bg-surface/50 border border-cyan-300/20 rounded-2xl text-center shadow-lg backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] text-cyan-300 font-semibold tracking-[0.2em] mb-2 uppercase",children:"Evidence policy"}),e.jsx("div",{className:"text-lg md:text-xl font-bold text-primary tracking-tight mb-2",children:"No hardware-specific results published"}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed max-w-lg mx-auto",children:["QECTOR publishes contracts, methodology, and artifacts rather than portable speed numbers. Read the ",e.jsx(k,{to:"/evidence",className:"link-accent",children:"evidence policy"})," before generating a local measurement."]})]})]})]}),e.jsx("section",{className:"section-band bg-surface/20 border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill-gold mb-4",children:"Release Assurance"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"A Clear Path From Code to Evidence"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"The public release, validation contract, and commercial delivery path are explicit by design."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Current Runtime"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"qector-decoder-v3 1.0.1"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"The live PyPI release supports Python 3.9 through 3.14 with 18 binary wheels across Windows, Linux, and macOS, each with build provenance."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Contract"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Correctness before speed"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Every correction is checked against H c = s (mod 2). Measurements stay workload-scoped, artifact-hashed, and separate from universal performance claims."})]}),e.jsxs("div",{className:"card-surface p-6 border-gold-400/20",children:[e.jsx("div",{className:"text-gold-400 font-mono text-xs uppercase tracking-wider mb-3",children:"Secure Delivery"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Signed, traceable licensing"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Commercial fulfillment requires a live Stripe event, issues a v2 Ed25519 token, and records independent billing and license delivery states."}),e.jsx(k,{to:"/license",className:"inline-block text-gold-400 text-sm font-medium hover:underline mt-3",children:"Read the license activation procedure →"})]})]}),e.jsxs("div",{className:"mt-8 card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Evidence Registry"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 text-sm",children:[e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21941046",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Normative reference manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21941046"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.21611214",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"v1.0.0 user manual"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.21611214"})]}),e.jsxs("a",{href:"https://doi.org/10.5281/zenodo.22046403",target:"_blank",rel:"noopener noreferrer",className:"text-secondary hover:text-cyan-300 transition-colors",children:[e.jsx("span",{className:"block text-primary font-semibold",children:"Verification and proof bundle"}),e.jsx("span",{className:"font-mono text-xs",children:"10.5281/zenodo.22046403"})]})]})]})]})}),e.jsx("section",{className:"section-thin border-t border-b border-gridline/30 bg-void/80",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-5xl mx-auto text-center",children:[e.jsx("p",{className:"text-xs text-muted-foreground uppercase tracking-widest mb-8",children:"Works with your existing stack"}),e.jsxs("div",{className:"flex flex-wrap justify-center items-center gap-x-12 gap-y-8",children:[e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Stim"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install stim"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Sinter"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install sinter"})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("span",{className:"text-2xl font-bold tracking-tight text-white/90",children:"Qiskit"}),e.jsx("code",{className:"text-xs bg-surface border border-gridline px-2 py-1 rounded text-muted-foreground font-mono",children:"pip install qiskit-qec"})]})]})]})})}),e.jsx("section",{ref:t=>n(t,0),className:"py-8 bg-void",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-7xl mx-auto flex flex-wrap justify-center gap-3",children:[{icon:e.jsx(he,{size:16}),label:"Artifacts (GitHub)",href:"https://github.com/GuillaumeLessard/qector-decoder"},{icon:e.jsx(pe,{size:16}),label:"Mastering QEC · Google Play",href:"https://play.google.com/store/books/details?id=dGXuEQAAQBAJ",gold:!0},{icon:e.jsx(ue,{size:16}),label:`PyPI Wheel v${i}`,href:"https://pypi.org/project/qector-decoder-v3/"},{icon:e.jsx(fe,{size:16}),label:"Free Workbench App",href:"/workbench"},{icon:e.jsx(ge,{size:16}),label:"ORCID 0009-0000-3465-3753",href:"https://orcid.org/0009-0000-3465-3753"}].map(t=>e.jsx(Te,{icon:t.icon,label:t.label,href:t.href,variant:t.gold?"gold":"default"},t.label))})})}),e.jsx("section",{className:"section-band bg-void border-y border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Proof Suite"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"Executable Verification for the 1.0 Line"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"Hashed-lock reproducible install, CERT_STRICT gate, and Lean/Coq kernel evidence - verifiable against Reference Manual v1.0.0."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reproducible Install"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Hashed-lock & CERT_STRICT"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Proof runs are hashed-locked and gated by CERT_STRICT - no universal benchmark figures, only workload-scoped artifacts."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Reference Manual v1.0.0"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"DOI 10.5281/zenodo.21941046"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Normative manual with syndrome-faithfulness foundations, 15 backends, and API stability tiers. All proofs trace to this document."})]}),e.jsxs("div",{className:"card-surface p-6 border-cyan-300/20",children:[e.jsx("div",{className:"text-cyan-300 font-mono text-xs uppercase tracking-wider mb-3",children:"Lean/Coq Evidence"}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:"Kernel-checked proofs"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed",children:"Executable suite checks GF(2) invariants and logical cosets with Lean/Coq kernels - evidence, not claims."})]})]}),e.jsxs("div",{className:"text-center mt-8",children:[e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-proof",target:"_blank",rel:"noopener noreferrer",className:"btn-cyan",children:"View qector-proof on GitHub"}),e.jsx("span",{className:"text-muted-foreground text-xs ml-3",children:"github.com/GuillaumeLessard/qector-proof"})]})]})}),e.jsx("section",{className:"section-feature bg-surface/30 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>n(t,1),className:"text-center mb-14",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"How It Works"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight",children:"From Installation to Validation"}),e.jsx("p",{className:"text-secondary text-lg max-w-2xl mx-auto mt-3",children:"QECTOR integrates directly into your existing QEC workflow with minimal friction."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:[{step:"01",title:"Install",desc:"Install the 1.0.1 wheel in a supported Python 3.9-3.14 environment alongside your existing Stim or PyMatching workflow.",detail:'pip install --upgrade "qector-decoder-v3>=1.0.1,<2"',code:!0},{step:"02",title:"Decode",desc:"Access 17 concrete Rust-accelerated decoder configurations through a unified Python API. Workbench also exposes AutoDecoder and Auto Router as two orchestration kinds, for 19 named kinds in total.",detail:"from qector_decoder_v3 import BlossomDecoder, BpOsdDecoder",code:!0},{step:"03",title:"Validate",desc:"Claims are scoped to a declared workload and backed by SHA-256 sealed artifacts. Run qector-doctor before relying on optional paths and preserve the report with the result.",detail:"evidence policy · SHA-256 sealed",code:!1}].map(t=>e.jsxs("div",{className:"card-surface p-6 relative",children:[e.jsx("div",{className:"text-4xl font-black text-cyan-300/20 absolute top-4 right-4 select-none",children:t.step}),e.jsx("div",{className:"w-10 h-10 rounded-full bg-cyan-300/10 border border-cyan-300/20 flex items-center justify-center text-cyan-300 font-bold text-sm mb-4",children:t.step}),e.jsx("h3",{className:"text-lg font-bold text-primary mb-2",children:t.title}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-3",children:t.desc}),t.code&&e.jsx("code",{className:"block text-xs bg-void border border-gridline rounded-lg px-3 py-2 text-cyan-300 font-mono overflow-x-auto",children:t.detail}),!t.code&&e.jsx("span",{className:"inline-flex items-center gap-1.5 text-xs text-cyan-300 font-mono bg-cyan-300/5 px-3 py-1.5 rounded-lg border border-cyan-300/10",children:t.detail})]},t.step))})]})}),e.jsxs("section",{id:"platform",className:"section-feature relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:"radial-gradient(circle at center, rgba(103, 232, 249, 0.06) 0%, transparent 70%)"}}),e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsx("div",{ref:t=>n(t,2),children:e.jsx(Z,{eyebrow:"Why QECTOR",heading:"More Than Just MWPM",description:"QEC decoding is not one-size-fits-all. Surface codes, qLDPC codes, optional batch paths, and simulation workloads each demand different decoders. QECTOR documents the supported contracts and the evidence needed to evaluate a selected workload."})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[{title:"Blossom MWPM (Exact)",tag:"Blossom",desc:"Weight-optimal exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes.",proof:"Exact optimal matching · Stim-native"},{title:"qLDPC Support",tag:"BP-OSD (qLDPC)",desc:"Matching decoders are restricted to graphlike structures. BP-OSD handles reachable arbitrary GF(2) check matrices, including LDPC and qLDPC workloads.",proof:"Hyperedge-safe GF(2) path"},{title:"Workload-Scoped Execution",tag:"Union-Find + Optional GPU",desc:"Union-Find and optional GPU batch paths are available for supported workloads. Availability and performance must be verified on the target environment.",proof:"Environment-dependent paths"},{title:"One Library, Pluggable",tag:"Stim · PyMatching · Sinter · Qiskit",desc:"Drop QECTOR into any existing Stim or PyMatching workflow. Same API surface, swappable backend. No vendor lock-in.",proof:"Drop-in, same API surface"}].map((t,l)=>e.jsx("div",{ref:m=>n(m,3+l),children:e.jsx($e,{title:t.title,tag:t.tag,desc:t.desc,proof:t.proof})},t.title))})]})})]}),e.jsx("section",{id:"decoder-section",className:"section-feature bg-surface/50",children:e.jsx("div",{className:"section-padding",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{ref:t=>n(t,7),className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"19 Workbench Kinds · 17 Concrete Configs"}),e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight mb-6",children:"Decoding Algorithms"}),e.jsx("p",{className:"text-secondary text-lg leading-relaxed mb-8",children:"Union-Find, Fast Union-Find, Blossom MWPM, Sparse Blossom, Belief-Matching, BP-OSD, GPU Batch (CUDA/OpenCL), Hybrid, Predecoded, two-stage, ambiguity-cluster, colour-code, space-time, and other concrete paths are exposed through a consistent Python API. Workbench adds the two orchestration kinds, AutoDecoder and Auto Router, to make 19 named kinds."}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[{label:" v1.0.1 Stable",desc:"Corrected code families and Union-Find peeling, Python 3.14, GPU on Pro licences, signed provenance for every wheel."},{label:" 18 Binary Wheels",desc:"Python 3.9-3.14 across Windows amd64, Linux x86_64, and macOS arm64, each tested on its own OS before release."},{label:" GPU Batch Paths",desc:"CUDA and OpenCL batch paths are available for supported hardware and drivers; OpenCL via source build."},{label:" Reproducible Harness",desc:"qector bench ships with the package; measure on your own hardware, no universal figures claimed."}].map(t=>e.jsxs("div",{className:"p-4 bg-void/50 border border-gridline/50 rounded-xl",children:[e.jsx("div",{className:"text-cyan-300 font-semibold text-sm mb-1",children:t.label}),e.jsx("div",{className:"text-muted-foreground text-xs leading-relaxed",children:t.desc})]},t.label))}),e.jsxs("div",{className:"flex flex-wrap gap-3 mt-8",children:[e.jsx("a",{href:"https://pypi.org/project/qector-decoder-v3/",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/pypi/v/qector-decoder-v3?style=flat-square&color=24e7ff",alt:"qector-decoder-v3 version on PyPI",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/github/v/release/GuillaumeLessard/qector-decoder?style=flat-square&color=24e7ff",alt:"Latest qector-decoder release on GitHub",loading:"lazy"})}),e.jsx("a",{href:"https://github.com/GuillaumeLessard/qector-decoder",target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{src:"https://img.shields.io/badge/GitHub-Artifacts-blue?logo=github",alt:"GitHub release artifacts for QECTOR",loading:"lazy"})})]})]}),e.jsx("div",{ref:t=>n(t,8),className:"relative w-full",children:e.jsx(Me,{})})]})})})}),e.jsx("section",{className:"section-feature relative",children:e.jsx("div",{className:"section-padding relative z-10",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{ref:t=>n(t,9),children:[e.jsx(Z,{eyebrow:"Performance",heading:"Measure on Your Own Hardware"}),e.jsx(qe,{title:"Reproducible Benchmark Harness",statement:"No universal benchmark figures are published on this site, because results depend on your hardware, drivers, and workloads. The qector bench harness ships with the package so you can measure logical error rates and throughput on your own machines.",href:"https://github.com/GuillaumeLessard/qector-decoder",linkLabel:"GitHub Artifacts →",className:"max-w-3xl mx-auto mb-6"})]}),e.jsx("div",{ref:t=>n(t,10),className:"max-w-3xl mx-auto",children:e.jsxs("div",{className:"p-5 bg-void/50 border border-gridline/50 rounded-xl font-mono text-xs text-muted-foreground leading-relaxed overflow-x-auto",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"}),' pip install "qector-decoder-v3[bench]"']}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector-doctor"]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-cyan-300",children:"$"})," qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001"]}),e.jsx("div",{className:"text-green-400 mt-2",children:"✓ Logical error rates and throughput written as reproducible JSON"})]})}),e.jsx("div",{className:"text-center mt-8 flex flex-wrap justify-center gap-3",children:e.jsx(k,{to:"/evidence",className:"btn-outline",children:"Evidence & Reports"})})]})})}),e.jsx("section",{className:"section-band bg-surface/20 border-t border-gridline",children:e.jsxs("div",{className:"section-padding max-w-5xl mx-auto",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold tracking-tight text-center mb-10",children:"Enterprise Compliance & Licensing"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"card-surface border-cyan-300/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-cyan-300/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-cyan-300 flex items-center gap-2 mb-4",children:"License Clarity"}),e.jsx("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:"The package is source-available under PolyForm Noncommercial 1.0.0 for community use. Commercial use, hosted services, and redistribution require the written scope described on the license and pricing pages."}),e.jsx(k,{to:"/commercial",className:"text-cyan-300 text-sm font-medium hover:underline",children:"Learn about licensing →"})]}),e.jsxs("div",{className:"card-surface border-gold-400/20 bg-void/50 p-8 rounded-2xl relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-gold-400/5 to-transparent pointer-events-none"}),e.jsx("h3",{className:"text-lg font-bold text-gold-400 flex items-center gap-2 mb-4",children:"Commercial Licences, Air-Gapped"}),e.jsxs("p",{className:"text-secondary text-sm leading-relaxed mb-4",children:["Pro from ",S(L.proMonthly),"/month or ",S(L.proAnnual),"/year with GPU batch decoding, Lab for distance 63 and an SLA. Licences are verified offline, with no licence server, and every plan has a ",L.refundDays,"-day money-back guarantee."]}),e.jsx(k,{to:"/pricing",className:"btn-gold text-sm",children:"View Pricing & Tiers →"})]})]})]})}),e.jsx("section",{id:"pricing-section",className:"section-feature bg-surface/50 border-t border-gridline",children:e.jsx("div",{className:"section-padding",children:e.jsxs("div",{className:"max-w-xl mx-auto text-center",children:[e.jsxs("div",{ref:t=>n(t,11),className:"mb-6",children:[e.jsx("span",{className:"eyebrow-pill mb-4",children:"Self-Serve · Instant Clearance"}),e.jsx("h2",{className:"text-3xl font-bold mb-3",children:"QECTOR Pro"}),e.jsxs("p",{className:"text-secondary text-sm max-w-md mx-auto",children:["Air-gapped licence · Cancel any time · ",L.refundDays,"-day money-back guarantee"]})]}),e.jsxs("div",{ref:t=>n(t,12),className:"card-surface border-cyan-300/35 neon-border-cyan relative overflow-hidden p-8 rounded-2xl bg-void/80 text-center",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-cyan-300/5 to-transparent pointer-events-none"}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("h3",{className:"text-4xl font-extrabold text-primary",children:[S(L.proMonthly),e.jsx("span",{className:"text-lg font-semibold text-muted-foreground",children:"/mo"})]}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-1",children:["or ",S(L.proAnnual),"/year (2 months free) · Production use"]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row justify-center gap-3 mb-6",children:[e.jsxs("a",{href:J.proMonthly,className:"btn-cyan text-base font-bold py-3.5 px-8 rounded-xl shadow-lg shadow-cyan-300/20 inline-flex items-center justify-center gap-2",target:"_blank",rel:"noopener noreferrer",children:[e.jsxs("span",{children:["Buy Pro: ",S(L.proMonthly),"/mo"]}),e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),e.jsx("polyline",{points:"12 5 19 12 12 19"})]})]}),e.jsxs("a",{href:J.proAnnual,className:"btn-outline text-base py-3.5 px-8 rounded-xl",target:"_blank",rel:"noopener noreferrer",children:["Buy annual: ",S(L.proAnnual),"/yr"]})]}),e.jsx("div",{className:"border-t border-gridline/60 pt-4 mt-4 text-left space-y-2",children:["Full QECTOR Decoder v3 (all decoder families)","GPU (CUDA/OpenCL) batch decoding unlocked","Signed licence token, verified offline: works air-gapped","Email support (2 business day response)",`${L.refundDays}-day money-back guarantee on your first payment`].map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs text-secondary",children:[e.jsx("span",{className:"text-green-400",children:"✓"}),e.jsx("span",{children:t})]},t))})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-4",children:["Need Lab, perpetual or OEM? ",e.jsx(k,{to:"/pricing",className:"text-cyan-300 hover:underline",children:"View all tiers →"})]})]})})})]})}const Ve=c.lazy(()=>g(()=>import("./About-Sj0SVf3I.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),Ue=c.lazy(()=>g(()=>import("./Decoder-B0aQK11-.js"),__vite__mapDeps([7,1,8,2,3,4,5,6]))),Fe=c.lazy(()=>g(()=>import("./Workbench-Ct-U8BKA.js"),__vite__mapDeps([9,1,8,2,10,3,4,5,6]))),Qe=c.lazy(()=>g(()=>import("./McpServer-C5JtddAJ.js"),__vite__mapDeps([11,1,8,3,4,5,6,2]))),We=c.lazy(()=>g(()=>import("./ClaudePlugin-D4c0dp2L.js"),__vite__mapDeps([12,1,8,10,6,3,4,5,2]))),Be=c.lazy(()=>g(()=>import("./Blog-BFZmecCN.js"),__vite__mapDeps([13,1,14,3,4,5,6,2]))),He=c.lazy(()=>g(()=>import("./BlogPost-CkWMP1e_.js"),__vite__mapDeps([15,1,14,4,3,5,6,2]))),Ke=c.lazy(()=>g(()=>import("./Pricing-Cn8Zecmp.js"),__vite__mapDeps([16,1,17,3,4,5,8,2,6]))),Ye=c.lazy(()=>g(()=>import("./PricingFR-B_DF8Sg3.js"),__vite__mapDeps([18,1,17,3,4,5,8,2,6]))),Je=c.lazy(()=>g(()=>import("./Commercial-BPs2_LwV.js"),__vite__mapDeps([19,1,8,3,4,5,6,2]))),Ze=c.lazy(()=>g(()=>import("./Contact-DuHdX58e.js"),__vite__mapDeps([20,1,21,2,3,4,5,6]))),Xe=c.lazy(()=>g(()=>import("./License-DDdBqsPy.js"),__vite__mapDeps([22,1,8,3,4,5,6,2]))),et=c.lazy(()=>g(()=>import("./Privacy-CAKpuiQ_.js"),__vite__mapDeps([23,1,24,8,3,4,5,25,6,2]))),tt=c.lazy(()=>g(()=>import("./Terms-CBCTDevc.js"),__vite__mapDeps([26,1,24,8,3,4,5,27,6,2]))),rt=c.lazy(()=>g(()=>import("./TermsFR-CGlEiMoF.js"),__vite__mapDeps([28,1,24,8,3,4,5,27,6,2]))),st=c.lazy(()=>g(()=>import("./Refund-CRy_OFTy.js"),__vite__mapDeps([29,1,24,8,3,4,5,27,6,2]))),at=c.lazy(()=>g(()=>import("./RefundFR-KUCUHxUI.js"),__vite__mapDeps([30,1,24,8,3,4,5,27,6,2]))),nt=c.lazy(()=>g(()=>import("./PrivacyFR-yruEp8O3.js"),__vite__mapDeps([31,1,24,8,3,4,5,25,6,2]))),ot=c.lazy(()=>g(()=>import("./LicenseAgreement-prqWmpN4.js"),__vite__mapDeps([32,1,24,8,3,4,5,33,6,2]))),lt=c.lazy(()=>g(()=>import("./LicenseAgreementFR-vtWAZWNF.js"),__vite__mapDeps([34,1,24,8,3,4,5,33,6,2]))),it=c.lazy(()=>g(()=>import("./Security-CMQacbrM.js"),__vite__mapDeps([35,1,8,3,4,5,6,2]))),ct=c.lazy(()=>g(()=>import("./Compare-H6yva3AD.js"),__vite__mapDeps([36,1,8,3,4,5,6,2]))),dt=c.lazy(()=>g(()=>import("./Founder-C30HSU2C.js"),__vite__mapDeps([37,1,21,3,4,5,6,2]))),mt=c.lazy(()=>g(()=>import("./Evidence-BwlSEt0X.js"),__vite__mapDeps([38,1,8,2,10,3,4,5,6]))),xt=c.lazy(()=>g(()=>import("./Changelog-BkfmouBY.js"),__vite__mapDeps([39,1,8,10,3,4,5,6,2]))),ht=c.lazy(()=>g(()=>import("./TechnicalReference-BcuWSg0l.js"),__vite__mapDeps([40,1,8,2,6,3,4,5]))),pt=c.lazy(()=>g(()=>import("./Docs-KUXBA0rX.js"),__vite__mapDeps([41,1,8,2,3,4,5,6]))),ut=c.lazy(()=>g(()=>import("./Installer-BPMW9xjA.js"),__vite__mapDeps([42,1,8,3,4,5,6,2]))),ft=c.lazy(()=>g(()=>import("./Manual-DufMHAK3.js"),__vite__mapDeps([43,1,6,8,3,4,5,2]))),gt=c.lazy(()=>g(()=>import("./Success-B8_Hgbq9.js"),__vite__mapDeps([44,1,8,3,4,5,6,2]))),bt=c.lazy(()=>g(()=>import("./NotFound-D-ACnmyk.js"),__vite__mapDeps([45,1,8,3,4,5,6,2])));function yt(){return e.jsx(Re,{children:e.jsx(Le,{children:e.jsx(c.Suspense,{fallback:e.jsx(Se,{}),children:e.jsxs(ne,{children:[e.jsx(u,{path:"/",element:e.jsx(Ge,{})}),e.jsx(u,{path:"/about",element:e.jsx(Ve,{})}),e.jsx(u,{path:"/decoder",element:e.jsx(Ue,{})}),e.jsx(u,{path:"/workbench",element:e.jsx(Fe,{})}),e.jsx(u,{path:"/mcp-server",element:e.jsx(Qe,{})}),e.jsx(u,{path:"/claude-plugin",element:e.jsx(We,{})}),e.jsx(u,{path:"/blog",element:e.jsx(Be,{})}),e.jsx(u,{path:"/blog/:id",element:e.jsx(He,{})}),e.jsx(u,{path:"/pricing",element:e.jsx(Ke,{})}),e.jsx(u,{path:"/fr/pricing",element:e.jsx(Ye,{})}),e.jsx(u,{path:"/commercial",element:e.jsx(Je,{})}),e.jsx(u,{path:"/contact",element:e.jsx(Ze,{})}),e.jsx(u,{path:"/license",element:e.jsx(Xe,{})}),e.jsx(u,{path:"/privacy",element:e.jsx(et,{})}),e.jsx(u,{path:"/terms",element:e.jsx(tt,{})}),e.jsx(u,{path:"/fr/terms",element:e.jsx(rt,{})}),e.jsx(u,{path:"/refund",element:e.jsx(st,{})}),e.jsx(u,{path:"/fr/refund",element:e.jsx(at,{})}),e.jsx(u,{path:"/fr/privacy",element:e.jsx(nt,{})}),e.jsx(u,{path:"/license-agreement",element:e.jsx(ot,{})}),e.jsx(u,{path:"/fr/license-agreement",element:e.jsx(lt,{})}),e.jsx(u,{path:"/security",element:e.jsx(it,{})}),e.jsx(u,{path:"/compare",element:e.jsx(ct,{})}),e.jsx(u,{path:"/guillaume-lessard",element:e.jsx(dt,{})}),e.jsx(u,{path:"/evidence",element:e.jsx(mt,{})}),e.jsx(u,{path:"/changelog",element:e.jsx(xt,{})}),e.jsx(u,{path:"/technical-reference",element:e.jsx(ht,{})}),e.jsx(u,{path:"/docs",element:e.jsx(pt,{})}),e.jsx(u,{path:"/installer",element:e.jsx(ut,{})}),e.jsx(u,{path:"/manual",element:e.jsx(ft,{})}),e.jsx(u,{path:"/success",element:e.jsx(gt,{})}),e.jsx(u,{path:"*",element:e.jsx(bt,{})})]})})})})}const X=e.jsx(c.StrictMode,{children:e.jsx(oe,{children:e.jsx(yt,{})})}),T=document.getElementById("root");if(T.childElementCount===0)W.createRoot(T).render(X);else{const s=document.createElement("div");s.setAttribute("aria-hidden","true"),s.style.cssText="position:absolute;top:0;left:0;width:100%;visibility:hidden;pointer-events:none;",T.after(s);let i=!1;const n=()=>{i||(i=!0,l.disconnect(),T.remove(),s.removeAttribute("style"),s.removeAttribute("aria-hidden"),s.id="root")},t=()=>s.querySelector("footer")!==null&&s.querySelector("[data-page-loader]")===null,l=new MutationObserver(()=>{t()&&requestAnimationFrame(n)});l.observe(s,{childList:!0,subtree:!0}),window.setTimeout(n,4e3),W.createRoot(s).render(X)}export{$e as A,ze as C,qe as E,De as J,J as L,L as P,Me as Q,Ae as S,Z as a,S as b,Ct as c,_t as d,ee as u}; diff --git a/assets/index-Bqoypqx2.css b/assets/index-Bqoypqx2.css deleted file mode 100644 index e2dae144..00000000 --- a/assets/index-Bqoypqx2.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px}:root{--background: 222 47% 4%;--foreground: 210 40% 93%;--card: 222 47% 7%;--card-foreground: 210 40% 93%;--popover: 222 47% 8%;--popover-foreground: 210 40% 93%;--primary: 187 92% 69%;--primary-foreground: 222 47% 4%;--secondary: 215 25% 70%;--secondary-foreground: 210 40% 93%;--muted: 215 25% 20%;--muted-foreground: 215 16% 72%;--accent: 187 92% 69%;--accent-foreground: 222 47% 4%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 215 25% 18%;--input: 215 25% 18%;--ring: 187 92% 69%;--radius: 1rem}html{scroll-behavior:smooth}.js-enabled #prerendered{display:none!important}body{overflow-x:hidden;--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));font-family:Inter,system-ui,-apple-system,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(circle at 10% 20%,rgba(103,232,249,.04) 0%,transparent 40%),radial-gradient(circle at 90% 80%,rgba(251,191,36,.02) 0%,transparent 40%),linear-gradient(to bottom,#020617,#0b1329);background-attachment:fixed}h1,h2,h3,h4,h5,h6{font-family:Inter,system-ui,-apple-system,sans-serif;letter-spacing:-.025em;color:hsl(var(--primary))}@media(min-width:768px){h1,h2,h3,h4,h5,h6{text-wrap:balance}}code{font-family:JetBrains Mono,Fira Code,monospace}::-moz-selection{background:#67e8f94d;color:#e2e8f0}::selection{background:#67e8f94d;color:#e2e8f0}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-cyan{--tw-prose-links: #0891b2;--tw-prose-invert-links: #06b6d4}.prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.btn-cyan{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #67e8f9 var(--tw-gradient-to-position);padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-cyan:hover{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #a5f3fc var(--tw-gradient-to-position);--tw-shadow: 0 0 24px rgba(103,232,249,.45);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-cyan:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-gold{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;border-color:#fbbf2499;background-color:#fbbf240d;padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-gold:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1));background-color:#fbbf241a;--tw-shadow: 0 0 24px rgba(251,191,36,.25);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-gold:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1));padding:.75rem 1.5rem;color:hsl(var(--secondary));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-outline:hover{border-color:#67e8f966;background-color:#ffffff0d;color:hsl(var(--primary))}.btn-outline:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.card-surface{border-radius:1rem;border-width:1px;border-color:#1e293bcc;background-color:#0b132966;padding:1.5rem;--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;animation-duration:.5s}.card-surface:hover{border-color:#67e8f94d;--tw-shadow: 0 0 30px rgba(103,232,249,.12);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-surface:not(.revealed),.prose:not(.revealed){opacity:0;transform:translateY(30px)}.card-surface.revealed,.prose.revealed{opacity:1;transform:translateY(0);transition:opacity .7s ease-out,transform .7s ease-out}.section-padding{padding-left:1.5rem;padding-right:1.5rem}@media(min-width:640px){.section-padding{padding-left:2rem;padding-right:2rem}}@media(min-width:1024px){.section-padding{padding-left:4rem;padding-right:4rem}}@media(min-width:1280px){.section-padding{padding-left:6rem;padding-right:6rem}}.eyebrow-pill{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#67e8f933;background-color:#67e8f91a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.eyebrow-pill-gold{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#fbbf2433;background-color:#fbbf241a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.link-accent{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1));text-underline-offset:4px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.link-accent:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1));text-decoration-line:underline}.section-feature{padding-top:5rem;padding-bottom:5rem}@media(min-width:768px){.section-feature{padding-top:7rem;padding-bottom:7rem}}.section-band{padding-top:4rem;padding-bottom:4rem}@media(min-width:768px){.section-band{padding-top:5rem;padding-bottom:5rem}}.section-thin{padding-top:2.5rem;padding-bottom:2.5rem}@media(min-width:768px){.section-thin{padding-top:3rem;padding-bottom:3rem}}.glass-nav{border-width:1px;border-color:#ffffff1a;background-color:#0b1329bf;--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.neon-border-cyan{box-shadow:0 0 24px #67e8f91f,inset 0 0 24px #67e8f90a}.neon-border-gold{box-shadow:0 0 24px #fbbf241f,inset 0 0 24px #fbbf240a}.quantum-grid-bg{background-size:30px 30px;background-image:linear-gradient(to right,rgba(255,255,255,.015) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.015) 1px,transparent 1px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-left-\[40px\]{left:-40px}.-right-12{right:-3rem}.-top-12{top:-3rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[-1px\]{left:-1px}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-1\/3{top:33.333333%}.top-1\/4{top:25%}.top-24{top:6rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.order-last{order:9999}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2 / span 2}.row-start-1{grid-row-start:1}.\!m-0{margin:0!important}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-10{width:2.5rem;height:2.5rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1\.15rem\]{height:1.15rem}.h-\[36rem\]{height:36rem}.h-\[500px\]{height:500px}.h-\[600px\]{height:600px}.h-\[800px\]{height:800px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:0px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[calc\(100dvh-110px\)\]{max-height:calc(100dvh - 110px)}.min-h-0{min-height:0px}.min-h-16{min-height:4rem}.min-h-4{min-height:1rem}.min-h-\[44px\]{min-height:44px}.min-h-\[500px\]{min-height:500px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[1000px\]{width:1000px}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[36rem\]{width:36rem}.w-\[600px\]{width:600px}.w-\[800px\]{width:800px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-5{min-width:1.25rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[120px\]{min-width:120px}.min-w-\[12rem\]{min-width:12rem}.min-w-\[140px\]{min-width:140px}.min-w-\[44px\]{min-width:44px}.min-w-\[560px\]{min-width:560px}.min-w-\[640px\]{min-width:640px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[11rem\]{max-width:11rem}.max-w-\[440px\]{max-width:440px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/3{--tw-translate-x: -33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[140\%\]{--tw-translate-y: -140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/3{--tw-translate-x: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/3{--tw-translate-y: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-45{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-gradient-xy{animation:gradient-xy 6s ease infinite}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.scroll-mt-32{scroll-margin-top:8rem}.scroll-py-1{scroll-padding-top:.25rem;scroll-padding-bottom:.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-8{gap:2rem}.gap-\[--spacing\(var\(--gap\)\)\]{gap:var(--spacing(var(--gap)))}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-8{row-gap:2rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-14>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gridline>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 41 59 / var(--tw-divide-opacity, 1))}.divide-gridline\/50>:not([hidden])~:not([hidden]){border-color:#1e293b80}.divide-slate-800\/60>:not([hidden])~:not([hidden]){border-color:#1e293b99}.self-start{align-self:flex-start}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[23px\]{border-radius:23px}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:calc(var(--radius) - 6px)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-blue-400\/30{border-color:#60a5fa4d}.border-border{border-color:hsl(var(--border))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-300\/10{border-color:#67e8f91a}.border-cyan-300\/20{border-color:#67e8f933}.border-cyan-300\/25{border-color:#67e8f940}.border-cyan-300\/30{border-color:#67e8f94d}.border-cyan-300\/35{border-color:#67e8f959}.border-cyan-300\/40{border-color:#67e8f966}.border-cyan-800\/40{border-color:#155e7566}.border-cyan-800\/50{border-color:#155e7580}.border-cyan-800\/60{border-color:#155e7599}.border-cyan-900\/40{border-color:#164e6366}.border-cyan-900\/50{border-color:#164e6380}.border-cyan-900\/60{border-color:#164e6399}.border-emerald-500\/30{border-color:#10b9814d}.border-gold-400\/20{border-color:#fbbf2433}.border-gold-400\/25{border-color:#fbbf2440}.border-gold-400\/30{border-color:#fbbf244d}.border-gold-400\/60{border-color:#fbbf2499}.border-green-400\/20{border-color:#4ade8033}.border-gridline{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-gridline\/30{border-color:#1e293b4d}.border-gridline\/40{border-color:#1e293b66}.border-gridline\/50{border-color:#1e293b80}.border-gridline\/60{border-color:#1e293b99}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-purple-400\/20{border-color:#c084fc33}.border-red-400\/20{border-color:#f8717133}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/60{border-color:#1e293b99}.border-slate-800\/80{border-color:#1e293bcc}.border-slate-800\/90{border-color:#1e293be6}.border-transparent{border-color:transparent}.border-void{--tw-border-opacity: 1;border-color:rgb(2 6 23 / var(--tw-border-opacity, 1))}.border-white\/5{border-color:#ffffff0d}.border-l-transparent{border-left-color:transparent}.border-t-cyan-300{--tw-border-opacity: 1;border-top-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#050b14\]{--tw-bg-opacity: 1;background-color:rgb(5 11 20 / var(--tw-bg-opacity, 1))}.bg-\[\#0b1329\]\/40{background-color:#0b132966}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-black\/50{background-color:#00000080}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-300\/10{background-color:#67e8f91a}.bg-cyan-300\/5{background-color:#67e8f90d}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.bg-cyan-400\/10{background-color:#22d3ee1a}.bg-cyan-400\/5{background-color:#22d3ee0d}.bg-cyan-500\/20{background-color:#06b6d433}.bg-cyan-900\/10{background-color:#164e631a}.bg-cyan-950\/50{background-color:#08334480}.bg-cyan-950\/60{background-color:#08334499}.bg-cyan-950\/80{background-color:#083344cc}.bg-destructive{--tw-bg-opacity: 1;background-color:hsl(var(--destructive) / var(--tw-bg-opacity, 1))}.bg-emerald-950\/50{background-color:#022c2280}.bg-foreground{background-color:hsl(var(--foreground))}.bg-gold-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-gold-400\/10{background-color:#fbbf241a}.bg-gold-400\/5{background-color:#fbbf240d}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-400\/10{background-color:#4ade801a}.bg-green-400\/5{background-color:#4ade800d}.bg-green-500\/80{background-color:#22c55ecc}.bg-gridline{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-purple-400\/10{background-color:#c084fc1a}.bg-red-400\/5{background-color:#f871710d}.bg-red-500\/80{background-color:#ef4444cc}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/20{background-color:#1e293b33}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/90{background-color:#020617e6}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-surface\/10{background-color:#0f172a1a}.bg-surface\/20{background-color:#0f172a33}.bg-surface\/30{background-color:#0f172a4d}.bg-surface\/50{background-color:#0f172a80}.bg-surface\/70{background-color:#0f172ab3}.bg-surface\/90{background-color:#0f172ae6}.bg-transparent{background-color:transparent}.bg-void{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-void\/30{background-color:#0206174d}.bg-void\/50{background-color:#02061780}.bg-void\/70{background-color:#020617b3}.bg-void\/80{background-color:#020617cc}.bg-void\/90{background-color:#020617e6}.bg-void\/95{background-color:#020617f2}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/80{background-color:#eab308cc}.bg-\[radial-gradient\(ellipse_at_top\,_var\(--tw-gradient-stops\)\)\]{background-image:radial-gradient(ellipse at top,var(--tw-gradient-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-cyan-300{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/10{--tw-gradient-from: rgb(103 232 249 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/5{--tw-gradient-from: rgb(103 232 249 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/80{--tw-gradient-from: rgb(103 232 249 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400{--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400\/5{--tw-gradient-from: rgb(34 211 238 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500\/\[0\.04\]{--tw-gradient-from: rgb(6 182 212 / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-900\/20{--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-950\/40{--tw-gradient-from: rgb(8 51 68 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(8 51 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gold-400\/5{--tw-gradient-from: rgb(251 191 36 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-400\/5{--tw-gradient-from: rgb(74 222 128 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from: #020617 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-surface\/50{--tw-gradient-from: rgb(15 23 42 / .5) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-void\/60{--tw-gradient-from: rgb(2 6 23 / .6) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-cyan-500{--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #06b6d4 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gold-400\/30{--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(251 191 36 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #0f172a var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/30{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/40{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .4) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/60{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .6) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-transparent{--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #020617 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void\/25{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(2 6 23 / .25) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-cyan-300\/10{--tw-gradient-to: rgb(103 232 249 / .1) var(--tw-gradient-to-position)}.to-cyan-400{--tw-gradient-to: #22d3ee var(--tw-gradient-to-position)}.to-cyan-950\/20{--tw-gradient-to: rgb(8 51 68 / .2) var(--tw-gradient-to-position)}.to-gold-400{--tw-gradient-to: #fbbf24 var(--tw-gradient-to-position)}.to-slate-400{--tw-gradient-to: #94a3b8 var(--tw-gradient-to-position)}.to-slate-950{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-void{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-white\/70{--tw-gradient-to: rgb(255 255 255 / .7) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.fill-foreground{fill:hsl(var(--foreground))}.fill-primary{fill:hsl(var(--primary))}.object-cover{-o-object-fit:cover;object-fit:cover}.\!p-5{padding:1.25rem!important}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-32{padding-top:8rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.font-sans{font-family:Inter,system-ui,-apple-system,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-8xl{font-size:6rem;line-height:1}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.05\]{line-height:1.05}.leading-\[1\.1\]{line-height:1.1}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-background{color:hsl(var(--background))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-cyan-100\/70{color:#cffafeb3}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-300\/20{color:#67e8f933}.text-cyan-300\/80{color:#67e8f9cc}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-destructive{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-gold-200\/60{color:#fde68a99}.text-gold-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-gold-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-gold-400\/60{color:#fbbf2499}.text-gold-400\/80{color:#fbbf24cc}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-secondary{color:hsl(var(--secondary))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-secondary\/80{color:hsl(var(--secondary) / .8)}.text-secondary\/90{color:hsl(var(--secondary) / .9)}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-void{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.placeholder-cyan-300\/60::-moz-placeholder{color:#67e8f999}.placeholder-cyan-300\/60::placeholder{color:#67e8f999}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(103\,232\,249\,0\.35\)\]{--tw-shadow: 0 0 12px rgba(103,232,249,.35);--tw-shadow-colored: 0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_30px_rgba\(34\,211\,238\,0\.3\)\]{--tw-shadow: 0 0 30px rgba(34,211,238,.3);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.5\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.5);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.8\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.8);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-deep{--tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, .5);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-cyan-300\/20{--tw-shadow-color: rgb(103 232 249 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-400\/20{--tw-shadow-color: rgb(34 211 238 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur: blur(100px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[120px\]{--tw-blur: blur(120px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-bottom-8{--tw-enter-translate-y: 2rem}.duration-100{animation-duration:.1s}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.duration-700{animation-duration:.7s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.animate-pulse-dot{animation:pulse-dot 2s ease-in-out infinite}.animate-gradient-xy{background-size:200% 200%;animation:gradient-xy 6s ease-in-out infinite}.\[--cell-size\:--spacing\(8\)\]{--cell-size: var(--spacing(8))}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}@keyframes gradient-xy{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#020617}::-webkit-scrollbar-thumb{background:#1e293b;border-radius:5px;border:2px solid #020617}::-webkit-scrollbar-thumb:hover{background:#334155}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.card-surface,.prose{opacity:1;transform:none;transition:none}}@media(forced-colors:active){.text-gradient-cyan,.text-gradient-gold{color:CanvasText!important}}.marker\:text-cyan-300\/60 *::marker{color:#67e8f999}.marker\:text-cyan-300\/60::marker{color:#67e8f999}.selection\:bg-cyan-400\/30 *::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30 *::selection{background-color:#22d3ee4d}.selection\:bg-primary *::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary *::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground *::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground *::selection{color:hsl(var(--primary-foreground))}.selection\:bg-cyan-400\/30::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30::selection{background-color:#22d3ee4d}.selection\:bg-primary::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground::selection{color:hsl(var(--primary-foreground))}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:mt-0:last-child{margin-top:0}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-cyan-300\/30:hover{border-color:#67e8f94d}.hover\:border-cyan-300\/40:hover{border-color:#67e8f966}.hover\:border-cyan-400\/30:hover{border-color:#22d3ee4d}.hover\:border-cyan-400\/40:hover{border-color:#22d3ee66}.hover\:border-cyan-500\/30:hover{border-color:#06b6d44d}.hover\:border-cyan-500\/40:hover{border-color:#06b6d466}.hover\:border-red-900\/30:hover{border-color:#7f1d1d4d}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300:hover{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300\/10:hover{background-color:#67e8f91a}.hover\:bg-cyan-300\/20:hover{background-color:#67e8f933}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gold-400\/10:hover{background-color:#fbbf241a}.hover\:bg-gold-400\/20:hover{background-color:#fbbf2433}.hover\:bg-green-400\/20:hover{background-color:#4ade8033}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-950\/20:hover{background-color:#450a0a33}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/50:hover{background-color:#1e293b80}.hover\:bg-slate-900\/40:hover{background-color:#0f172a66}.hover\:bg-surface:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-surface\/20:hover{background-color:#0f172a33}.hover\:bg-surface\/30:hover{background-color:#0f172a4d}.hover\:bg-surface\/40:hover{background-color:#0f172a66}.hover\:bg-surface\/60:hover{background-color:#0f172a99}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-cyan-100:hover{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.hover\:text-cyan-200:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.hover\:text-cyan-300:hover{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.hover\:text-emerald-300:hover{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:fixed:focus{position:fixed}.focus\:left-4:focus{left:1rem}.focus\:top-4:focus{top:1rem}.focus\:z-10:focus{z-index:10}.focus\:z-\[100\]:focus{z-index:100}.focus\:rounded-lg:focus{border-radius:var(--radius)}.focus\:border-cyan-300\/50:focus{border-color:#67e8f980}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-cyan-300:focus{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:font-semibold:focus{font-weight:600}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-void:focus{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color: hsl(var(--destructive) / .2)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: hsl(var(--ring) / .5)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-cyan-300\/20:disabled{background-color:#67e8f933}.disabled\:text-muted\/20:disabled{color:hsl(var(--muted) / .2)}.disabled\:text-void\/40:disabled{color:#02061766}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:border-cyan-300\/30{border-color:#67e8f94d}.group:hover .group-hover\:bg-cyan-300\/20{background-color:#67e8f933}.group:hover .group-hover\:fill-cyan-300{fill:#67e8f9}.group:hover .group-hover\:stroke-cyan-200{stroke:#a5f3fc}.group:hover .group-hover\:stroke-cyan-300\/40{stroke:#67e8f966}.group:hover .group-hover\:text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\>button\]\:ml-\[-0\.45rem\]:has(>button){margin-left:-.45rem}.has-\[\>button\]\:mr-\[-0\.45rem\]:has(>button){margin-right:-.45rem}.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(>kbd){margin-left:-.35rem}.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(>kbd){margin-right:-.35rem}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:.5rem}.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:.75rem}.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:.75rem}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-width:1px}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:hsl(var(--ring))}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){--tw-border-opacity: 1;border-color:hsl(var(--destructive) / var(--tw-border-opacity, 1))}.has-\[\>svg\]\:p-0:has(>svg){padding:0}.has-\[\>svg\]\:px-2:has(>svg){padding-left:.5rem;padding-right:.5rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color: hsl(var(--ring) / .5)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color: hsl(var(--destructive) / .2)}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start{align-self:flex-start}.group\/field:has([data-orientation=horizontal]) .group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance{text-wrap:balance}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pb-2\.5{padding-bottom:.625rem}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pt-2\.5{padding-top:.625rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{left:0;right:0}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{top:0;bottom:0}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{left:0;right:0}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:0}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:0}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:0}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:0}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:6rem}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:6rem}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:.375rem}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[size\=default\]\:h-9[data-size=default]{height:2.25rem}.data-\[size\=sm\]\:h-8[data-size=sm]{height:2rem}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom],.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:11rem}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:.375rem}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical],.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:.75rem}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) - 2px)}.data-\[selected\=true\]\:rounded-none[data-selected=true],.data-\[spacing\=0\]\:rounded-none[data-spacing="0"]{border-radius:0}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-variant=outline][data-spacing="0"]{border-left-width:0px}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-width:1px}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:hsl(var(--ring))}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:hsl(var(--primary))}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:hsl(var(--accent) / .5)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:hsl(var(--primary))}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:hsl(var(--accent))}.data-\[range-start\=true\]\:bg-primary[data-range-start=true],.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:hsl(var(--primary))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:.875rem;line-height:1.25rem}.data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:1rem;line-height:1.5rem}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:hsl(var(--accent-foreground))}.data-\[error\=true\]\:text-destructive[data-error=true],.data-\[invalid\=true\]\:text-destructive[data-invalid=true]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:hsl(var(--primary-foreground))}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:hsl(var(--accent-foreground))}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true],.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:hsl(var(--primary-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[spacing\=0\]\:shadow-none[data-spacing="0"]{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline][data-spacing=default],.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color: hsl(var(--ring) / .5)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot=select-value]>*{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\*\:data-\[slot\=select-value\]\:flex[data-slot=select-value]>*{display:flex}.\*\:data-\[slot\=select-value\]\:items-center[data-slot=select-value]>*{align-items:center}.\*\:data-\[slot\=select-value\]\:gap-2[data-slot=select-value]>*{gap:.5rem}.\*\:data-\[slot\=alert-description\]\:text-destructive\/90[data-slot=alert-description]>*{color:hsl(var(--destructive) / .9)}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[spacing\=0\]\:first\:rounded-l-md:first-child[data-spacing="0"]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l:first-child[data-variant=outline][data-spacing="0"]{border-left-width:1px}.data-\[spacing\=0\]\:last\:rounded-r-md:last-child[data-spacing="0"]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[active\=true\]\:hover\:bg-accent:hover[data-active=true],.data-\[state\=open\]\:hover\:bg-accent:hover[data-state=open]{background-color:hsl(var(--accent))}.data-\[active\=true\]\:focus\:bg-accent:focus[data-active=true]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:focus\:bg-accent:focus[data-state=open]{background-color:hsl(var(--accent))}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant=destructive]{background-color:hsl(var(--destructive) / .1)}.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.group[data-disabled=true] .group-data-\[disabled\=true\]\:pointer-events-none{pointer-events:none}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:relative{position:relative}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:top-full{top:100%}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:z-10{z-index:10}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group\/field-group[data-variant=outline] .group-data-\[variant\=outline\]\/field-group\:-mb-2{margin-bottom:-.5rem}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5{margin-top:.375rem}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block{display:block}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:border-ring{border-color:hsl(var(--ring))}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:bg-popover{background-color:hsl(var(--popover))}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center,.group\/drawer-content[data-vaul-drawer-direction=top] .group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center{text-align:center}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground{color:hsl(var(--popover-foreground))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group\/field[data-disabled=true] .group-data-\[disabled\=true\]\/field\:opacity-50,.group\/input-group[data-disabled=true] .group-data-\[disabled\=true\]\/input-group\:opacity-50,.group[data-disabled=true] .group-data-\[disabled\=true\]\:opacity-50{opacity:.5}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-\[3px\]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:duration-200{transition-duration:.2s;animation-duration:.2s}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.prose-headings\:font-bold :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:700}.prose-headings\:tracking-tight :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){letter-spacing:-.025em}.prose-a\:text-cyan-300 :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-code\:rounded-md :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) - 2px)}.prose-code\:bg-cyan-950\/30 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#0833444d}.prose-code\:px-1\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.375rem;padding-right:.375rem}.prose-code\:py-0\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.125rem;padding-bottom:.125rem}.prose-code\:text-cyan-200 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.prose-pre\:border :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-pre\:border-slate-800 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.prose-pre\:bg-slate-950\/80 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#020617cc}.prose-img\:rounded-xl :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) + 4px)}.prose-img\:border :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-img\:border-slate-800 :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-input:is(.dark *){border-color:hsl(var(--input))}.dark\:bg-destructive\/60:is(.dark *){background-color:hsl(var(--destructive) / .6)}.dark\:bg-input\/30:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:text-muted-foreground:is(.dark *){color:hsl(var(--muted-foreground))}.dark\:hover\:bg-accent\/50:hover:is(.dark *){background-color:hsl(var(--accent) / .5)}.dark\:hover\:bg-input\/50:hover:is(.dark *){background-color:hsl(var(--input) / .5)}.dark\:hover\:text-accent-foreground:hover:is(.dark *){color:hsl(var(--accent-foreground))}.dark\:focus-visible\:ring-destructive\/40:focus-visible:is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:has([data-slot][aria-invalid=true]):is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:data-\[state\=active\]\:border-input[data-state=active]:is(.dark *){border-color:hsl(var(--input))}.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]:is(.dark *){background-color:hsl(var(--primary))}.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state=checked]:is(.dark *){background-color:hsl(var(--primary-foreground))}.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state=unchecked]:is(.dark *){background-color:hsl(var(--foreground))}.dark\:data-\[state\=unchecked\]\:bg-input\/80[data-state=unchecked]:is(.dark *){background-color:hsl(var(--input) / .8)}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]:is(.dark *){color:hsl(var(--foreground))}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant=destructive]:is(.dark *){background-color:hsl(var(--destructive) / .2)}@media not all and (min-width:640px){.max-sm\:opacity-100{opacity:1}}@media(min-width:640px){.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:hidden{display:none}.sm\:w-auto{width:auto}.sm\:min-w-\[80px\]{min-width:80px}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:gap-4{gap:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pl-2\.5{padding-left:.625rem}.sm\:pr-2\.5{padding-right:.625rem}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:24rem}}@media(min-width:768px){.md\:absolute{position:absolute}.md\:mx-0{margin-left:0;margin-right:0}.md\:mb-16{margin-bottom:4rem}.md\:ml-8{margin-left:2rem}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:gap-1\.5{gap:.375rem}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.md\:divide-white\/5>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.md\:p-12{padding:3rem}.md\:p-6{padding:1.5rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:text-left{text-align:left}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-7xl{font-size:4.5rem;line-height:1}.md\:text-9xl{font-size:8rem;line-height:1}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}.md\:opacity-0{opacity:0}.md\:after\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:gap-8{gap:2rem}.lg\:text-6xl{font-size:3.75rem;line-height:1}.lg\:text-7xl{font-size:4.5rem;line-height:1}}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none>*:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>*:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0>*:not(:first-child){border-left-width:0px}.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>*:not(:first-child){border-top-width:0px}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>*:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none>*:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:focus-visible\:relative:focus-visible>*{position:relative}.\[\&\>\*\]\:focus-visible\:z-10:focus-visible>*{z-index:10}.\[\&\>\*\]\:data-\[slot\=field\]\:p-4[data-slot=field]>*{padding:1rem}.\[\&\>\.sr-only\]\:w-auto>.sr-only{width:auto}.\[\&\>\[data-slot\=field-group\]\]\:gap-4>[data-slot=field-group]{gap:1rem}.\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:1 1 auto}.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md>[data-slot=select-trigger]:last-of-type:has(select[aria-hidden=true]:last-child){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=w-]){width:-moz-fit-content;width:fit-content}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>a\:hover\]\:text-primary>a:hover{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>input\]\:flex-1>input{flex:1 1 0%}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3>input:has(>[data-align=block-end]){padding-top:.75rem}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3>input:has(>[data-align=block-start]){padding-bottom:.75rem}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2>input:has(>[data-align=inline-end]){padding-right:.5rem}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2>input:has(>[data-align=inline-start]){padding-left:.5rem}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:1rem;height:1rem}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:.75rem;height:.75rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{-o-object-fit:cover;object-fit:cover}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:hsl(var(--muted-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:transparent}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:hsl(var(--background) / .2)}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:hsl(var(--background))}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:hsl(var(--background) / .1)}[data-variant=legend]+.\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:-.375rem}a.\[a\&\]\:hover\:bg-accent:hover{background-color:hsl(var(--accent))}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:hsl(var(--secondary) / .9)}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))} diff --git a/assets/index-C0MRek1P.css b/assets/index-C0MRek1P.css deleted file mode 100644 index 688018d6..00000000 --- a/assets/index-C0MRek1P.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px}:root{--background: 222 47% 4%;--foreground: 210 40% 93%;--card: 222 47% 7%;--card-foreground: 210 40% 93%;--popover: 222 47% 8%;--popover-foreground: 210 40% 93%;--primary: 187 92% 69%;--primary-foreground: 222 47% 4%;--secondary: 215 25% 70%;--secondary-foreground: 210 40% 93%;--muted: 215 25% 20%;--muted-foreground: 215 16% 72%;--accent: 187 92% 69%;--accent-foreground: 222 47% 4%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 215 25% 18%;--input: 215 25% 18%;--ring: 187 92% 69%;--radius: 1rem}html{scroll-behavior:smooth}.js-enabled #prerendered{display:none!important}body{overflow-x:hidden;--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));font-family:Inter,system-ui,-apple-system,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(circle at 10% 20%,rgba(103,232,249,.04) 0%,transparent 40%),radial-gradient(circle at 90% 80%,rgba(251,191,36,.02) 0%,transparent 40%),linear-gradient(to bottom,#020617,#0b1329);background-attachment:fixed}h1,h2,h3,h4,h5,h6{font-family:Inter,system-ui,-apple-system,sans-serif;letter-spacing:-.025em;color:hsl(var(--primary))}@media(min-width:768px){h1,h2,h3,h4,h5,h6{text-wrap:balance}}code{font-family:JetBrains Mono,Fira Code,monospace}::-moz-selection{background:#67e8f94d;color:#e2e8f0}::selection{background:#67e8f94d;color:#e2e8f0}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-cyan{--tw-prose-links: #0891b2;--tw-prose-invert-links: #06b6d4}.prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.btn-cyan{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #67e8f9 var(--tw-gradient-to-position);padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-cyan:hover{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #a5f3fc var(--tw-gradient-to-position);--tw-shadow: 0 0 24px rgba(103,232,249,.45);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-cyan:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-gold{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;border-color:#fbbf2499;background-color:#fbbf240d;padding:.75rem 1.5rem;font-weight:700;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-gold:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1));background-color:#fbbf241a;--tw-shadow: 0 0 24px rgba(251,191,36,.25);--tw-shadow-colored: 0 0 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-gold:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--radius) + 4px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1));padding:.75rem 1.5rem;color:hsl(var(--secondary));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.btn-outline:hover{border-color:#67e8f966;background-color:#ffffff0d;color:hsl(var(--primary))}.btn-outline:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:not(pre)>code{overflow-wrap:anywhere}.card-surface{min-width:0;border-radius:1rem;border-width:1px;border-color:#1e293bcc;background-color:#0b132966;padding:1.5rem;--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;animation-duration:.5s}.card-surface:hover{border-color:#67e8f94d;--tw-shadow: 0 0 30px rgba(103,232,249,.12);--tw-shadow-colored: 0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.js-enabled .card-surface:not(.revealed),.js-enabled .prose:not(.revealed){opacity:0;transform:translateY(30px)}.card-surface.revealed,.prose.revealed{opacity:1;transform:translateY(0);transition:opacity .7s ease-out,transform .7s ease-out}.section-padding{padding-left:1.5rem;padding-right:1.5rem}@media(min-width:640px){.section-padding{padding-left:2rem;padding-right:2rem}}@media(min-width:1024px){.section-padding{padding-left:4rem;padding-right:4rem}}@media(min-width:1280px){.section-padding{padding-left:6rem;padding-right:6rem}}.eyebrow-pill{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#67e8f933;background-color:#67e8f91a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.eyebrow-pill-gold{display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-color:#fbbf2433;background-color:#fbbf241a;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.link-accent{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1));text-underline-offset:4px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.link-accent:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1));text-decoration-line:underline}.section-feature{padding-top:5rem;padding-bottom:5rem}@media(min-width:768px){.section-feature{padding-top:7rem;padding-bottom:7rem}}.section-band{padding-top:4rem;padding-bottom:4rem}@media(min-width:768px){.section-band{padding-top:5rem;padding-bottom:5rem}}.section-thin{padding-top:2.5rem;padding-bottom:2.5rem}@media(min-width:768px){.section-thin{padding-top:3rem;padding-bottom:3rem}}.glass-nav{border-width:1px;border-color:#ffffff1a;background-color:#0b1329bf;--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.neon-border-cyan{box-shadow:0 0 24px #67e8f91f,inset 0 0 24px #67e8f90a}.neon-border-gold{box-shadow:0 0 24px #fbbf241f,inset 0 0 24px #fbbf240a}.quantum-grid-bg{background-size:30px 30px;background-image:linear-gradient(to right,rgba(255,255,255,.015) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.015) 1px,transparent 1px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-left-\[40px\]{left:-40px}.-left-\[9999px\]{left:-9999px}.-right-12{right:-3rem}.-top-12{top:-3rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[-1px\]{left:-1px}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-1\/3{top:33.333333%}.top-1\/4{top:25%}.top-24{top:6rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.order-last{order:9999}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2 / span 2}.row-start-1{grid-row-start:1}.\!m-0{margin:0!important}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-10{width:2.5rem;height:2.5rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1\.15rem\]{height:1.15rem}.h-\[36rem\]{height:36rem}.h-\[500px\]{height:500px}.h-\[600px\]{height:600px}.h-\[800px\]{height:800px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:0px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[calc\(100dvh-110px\)\]{max-height:calc(100dvh - 110px)}.min-h-0{min-height:0px}.min-h-16{min-height:4rem}.min-h-4{min-height:1rem}.min-h-\[44px\]{min-height:44px}.min-h-\[500px\]{min-height:500px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[1000px\]{width:1000px}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[20\%\]{width:20%}.w-\[36rem\]{width:36rem}.w-\[600px\]{width:600px}.w-\[800px\]{width:800px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-5{min-width:1.25rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[120px\]{min-width:120px}.min-w-\[12rem\]{min-width:12rem}.min-w-\[140px\]{min-width:140px}.min-w-\[14rem\]{min-width:14rem}.min-w-\[44px\]{min-width:44px}.min-w-\[560px\]{min-width:560px}.min-w-\[640px\]{min-width:640px}.min-w-\[760px\]{min-width:760px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[11rem\]{max-width:11rem}.max-w-\[440px\]{max-width:440px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/3{--tw-translate-x: -33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[140\%\]{--tw-translate-y: -140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/3{--tw-translate-x: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/3{--tw-translate-y: 33.333333%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-45{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.scroll-mt-24{scroll-margin-top:6rem}.scroll-py-1{scroll-padding-top:.25rem;scroll-padding-bottom:.25rem}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-8{gap:2rem}.gap-\[--spacing\(var\(--gap\)\)\]{gap:var(--spacing(var(--gap)))}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.gap-y-8{row-gap:2rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-14>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gridline>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 41 59 / var(--tw-divide-opacity, 1))}.divide-gridline\/50>:not([hidden])~:not([hidden]){border-color:#1e293b80}.divide-slate-800\/60>:not([hidden])~:not([hidden]){border-color:#1e293b99}.self-start{align-self:flex-start}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:calc(var(--radius) - 6px)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-blue-400\/30{border-color:#60a5fa4d}.border-border{border-color:hsl(var(--border))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-300\/10{border-color:#67e8f91a}.border-cyan-300\/20{border-color:#67e8f933}.border-cyan-300\/25{border-color:#67e8f940}.border-cyan-300\/30{border-color:#67e8f94d}.border-cyan-300\/35{border-color:#67e8f959}.border-cyan-300\/40{border-color:#67e8f966}.border-cyan-300\/50{border-color:#67e8f980}.border-cyan-800\/40{border-color:#155e7566}.border-cyan-800\/50{border-color:#155e7580}.border-cyan-800\/60{border-color:#155e7599}.border-cyan-900\/40{border-color:#164e6366}.border-cyan-900\/50{border-color:#164e6380}.border-cyan-900\/60{border-color:#164e6399}.border-emerald-500\/30{border-color:#10b9814d}.border-gold-400\/20{border-color:#fbbf2433}.border-gold-400\/25{border-color:#fbbf2440}.border-gold-400\/30{border-color:#fbbf244d}.border-gold-400\/60{border-color:#fbbf2499}.border-green-400\/20{border-color:#4ade8033}.border-gridline{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-gridline\/30{border-color:#1e293b4d}.border-gridline\/40{border-color:#1e293b66}.border-gridline\/50{border-color:#1e293b80}.border-gridline\/60{border-color:#1e293b99}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-purple-400\/20{border-color:#c084fc33}.border-red-400\/20{border-color:#f8717133}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/60{border-color:#1e293b99}.border-slate-800\/80{border-color:#1e293bcc}.border-slate-800\/90{border-color:#1e293be6}.border-transparent{border-color:transparent}.border-void{--tw-border-opacity: 1;border-color:rgb(2 6 23 / var(--tw-border-opacity, 1))}.border-white\/5{border-color:#ffffff0d}.border-l-transparent{border-left-color:transparent}.border-t-cyan-300{--tw-border-opacity: 1;border-top-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#050b14\]{--tw-bg-opacity: 1;background-color:rgb(5 11 20 / var(--tw-bg-opacity, 1))}.bg-\[\#0a1322\]{--tw-bg-opacity: 1;background-color:rgb(10 19 34 / var(--tw-bg-opacity, 1))}.bg-\[\#0b1329\]\/40{background-color:#0b132966}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-black\/50{background-color:#00000080}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-300\/10{background-color:#67e8f91a}.bg-cyan-300\/5{background-color:#67e8f90d}.bg-cyan-300\/\[0\.04\]{background-color:#67e8f90a}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.bg-cyan-400\/10{background-color:#22d3ee1a}.bg-cyan-400\/5{background-color:#22d3ee0d}.bg-cyan-900\/10{background-color:#164e631a}.bg-cyan-950\/50{background-color:#08334480}.bg-cyan-950\/60{background-color:#08334499}.bg-cyan-950\/80{background-color:#083344cc}.bg-destructive{--tw-bg-opacity: 1;background-color:hsl(var(--destructive) / var(--tw-bg-opacity, 1))}.bg-emerald-950\/50{background-color:#022c2280}.bg-foreground{background-color:hsl(var(--foreground))}.bg-gold-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-gold-400\/10{background-color:#fbbf241a}.bg-gold-400\/5{background-color:#fbbf240d}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-400\/10{background-color:#4ade801a}.bg-green-400\/5{background-color:#4ade800d}.bg-green-500\/80{background-color:#22c55ecc}.bg-gridline{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-purple-400\/10{background-color:#c084fc1a}.bg-red-400\/5{background-color:#f871710d}.bg-red-500\/80{background-color:#ef4444cc}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/20{background-color:#1e293b33}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/90{background-color:#020617e6}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-surface\/10{background-color:#0f172a1a}.bg-surface\/20{background-color:#0f172a33}.bg-surface\/30{background-color:#0f172a4d}.bg-surface\/50{background-color:#0f172a80}.bg-surface\/70{background-color:#0f172ab3}.bg-surface\/90{background-color:#0f172ae6}.bg-transparent{background-color:transparent}.bg-void{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-void\/30{background-color:#0206174d}.bg-void\/50{background-color:#02061780}.bg-void\/70{background-color:#020617b3}.bg-void\/80{background-color:#020617cc}.bg-void\/90{background-color:#020617e6}.bg-void\/95{background-color:#020617f2}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/80{background-color:#eab308cc}.bg-\[radial-gradient\(ellipse_at_top\,_var\(--tw-gradient-stops\)\)\]{background-image:radial-gradient(ellipse at top,var(--tw-gradient-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-cyan-300{--tw-gradient-from: #67e8f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/10{--tw-gradient-from: rgb(103 232 249 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/5{--tw-gradient-from: rgb(103 232 249 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-300\/80{--tw-gradient-from: rgb(103 232 249 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(103 232 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400\/5{--tw-gradient-from: rgb(34 211 238 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500\/\[0\.04\]{--tw-gradient-from: rgb(6 182 212 / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-900\/20{--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-950\/40{--tw-gradient-from: rgb(8 51 68 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(8 51 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gold-400\/5{--tw-gradient-from: rgb(251 191 36 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-400\/5{--tw-gradient-from: rgb(74 222 128 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from: #020617 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-surface\/50{--tw-gradient-from: rgb(15 23 42 / .5) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-void\/60{--tw-gradient-from: rgb(2 6 23 / .6) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-gold-400\/30{--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(251 191 36 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #0f172a var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/30{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/40{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .4) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-surface\/60{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .6) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-transparent{--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #020617 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-void\/25{--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(2 6 23 / .25) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-cyan-300\/10{--tw-gradient-to: rgb(103 232 249 / .1) var(--tw-gradient-to-position)}.to-cyan-400{--tw-gradient-to: #22d3ee var(--tw-gradient-to-position)}.to-cyan-950\/20{--tw-gradient-to: rgb(8 51 68 / .2) var(--tw-gradient-to-position)}.to-slate-400{--tw-gradient-to: #94a3b8 var(--tw-gradient-to-position)}.to-slate-950{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-void{--tw-gradient-to: #020617 var(--tw-gradient-to-position)}.to-white\/70{--tw-gradient-to: rgb(255 255 255 / .7) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.fill-foreground{fill:hsl(var(--foreground))}.fill-primary{fill:hsl(var(--primary))}.object-cover{-o-object-fit:cover;object-fit:cover}.\!p-5{padding:1.25rem!important}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-16{padding-bottom:4rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-32{padding-top:8rem}.pt-36{padding-top:9rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.font-sans{font-family:Inter,system-ui,-apple-system,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-8xl{font-size:6rem;line-height:1}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.9em\]{font-size:.9em}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.05\]{line-height:1.05}.leading-\[1\.08\]{line-height:1.08}.leading-\[1\.1\]{line-height:1.1}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-background{color:hsl(var(--background))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-300\/20{color:#67e8f933}.text-cyan-300\/80{color:#67e8f9cc}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-destructive{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-gold-200\/60{color:#fde68a99}.text-gold-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-gold-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-gold-400\/60{color:#fbbf2499}.text-gold-400\/80{color:#fbbf24cc}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-secondary{color:hsl(var(--secondary))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-secondary\/80{color:hsl(var(--secondary) / .8)}.text-secondary\/90{color:hsl(var(--secondary) / .9)}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-void{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.placeholder-cyan-300\/60::-moz-placeholder{color:#67e8f999}.placeholder-cyan-300\/60::placeholder{color:#67e8f999}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(103\,232\,249\,0\.35\)\]{--tw-shadow: 0 0 12px rgba(103,232,249,.35);--tw-shadow-colored: 0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.5\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.5);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(103\,232\,249\,0\.8\)\]{--tw-shadow: 0 0 8px rgba(103,232,249,.8);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-deep{--tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, .5);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-cyan-300\/20{--tw-shadow-color: rgb(103 232 249 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-400\/20{--tw-shadow-color: rgb(34 211 238 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur: blur(100px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[120px\]{--tw-blur: blur(120px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-bottom-8{--tw-enter-translate-y: 2rem}.duration-100{animation-duration:.1s}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.duration-700{animation-duration:.7s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.animate-pulse-dot{animation:pulse-dot 2s ease-in-out infinite}.\[--cell-size\:--spacing\(8\)\]{--cell-size: var(--spacing(8))}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}@keyframes gradient-xy{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#020617}::-webkit-scrollbar-thumb{background:#1e293b;border-radius:5px;border:2px solid #020617}::-webkit-scrollbar-thumb:hover{background:#334155}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.card-surface,.prose{opacity:1;transform:none;transition:none}}@media(forced-colors:active){.text-gradient-cyan,.text-gradient-gold{color:CanvasText!important}}.marker\:text-cyan-300\/60 *::marker{color:#67e8f999}.marker\:text-cyan-300\/60::marker{color:#67e8f999}.selection\:bg-cyan-400\/30 *::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30 *::selection{background-color:#22d3ee4d}.selection\:bg-primary *::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary *::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground *::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground *::selection{color:hsl(var(--primary-foreground))}.selection\:bg-cyan-400\/30::-moz-selection{background-color:#22d3ee4d}.selection\:bg-cyan-400\/30::selection{background-color:#22d3ee4d}.selection\:bg-primary::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground::selection{color:hsl(var(--primary-foreground))}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:mb-0:last-child{margin-bottom:0}.last\:mt-0:last-child{margin-top:0}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-cyan-300\/30:hover{border-color:#67e8f94d}.hover\:border-cyan-300\/40:hover{border-color:#67e8f966}.hover\:border-cyan-400\/30:hover{border-color:#22d3ee4d}.hover\:border-cyan-400\/40:hover{border-color:#22d3ee66}.hover\:border-cyan-500\/30:hover{border-color:#06b6d44d}.hover\:border-cyan-500\/40:hover{border-color:#06b6d466}.hover\:border-red-900\/30:hover{border-color:#7f1d1d4d}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300:hover{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300\/10:hover{background-color:#67e8f91a}.hover\:bg-cyan-300\/20:hover{background-color:#67e8f933}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gold-400\/10:hover{background-color:#fbbf241a}.hover\:bg-gold-400\/20:hover{background-color:#fbbf2433}.hover\:bg-green-400\/20:hover{background-color:#4ade8033}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-950\/20:hover{background-color:#450a0a33}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/50:hover{background-color:#1e293b80}.hover\:bg-slate-900\/40:hover{background-color:#0f172a66}.hover\:bg-surface:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-surface\/20:hover{background-color:#0f172a33}.hover\:bg-surface\/30:hover{background-color:#0f172a4d}.hover\:bg-surface\/40:hover{background-color:#0f172a66}.hover\:bg-surface\/60:hover{background-color:#0f172a99}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-cyan-100:hover{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.hover\:text-cyan-200:hover{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.hover\:text-cyan-300:hover{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.hover\:text-emerald-300:hover{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:fixed:focus{position:fixed}.focus\:left-4:focus{left:1rem}.focus\:top-4:focus{top:1rem}.focus\:z-10:focus{z-index:10}.focus\:z-\[100\]:focus{z-index:100}.focus\:rounded-lg:focus{border-radius:var(--radius)}.focus\:border-cyan-300\/50:focus{border-color:#67e8f980}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-cyan-300:focus{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:font-semibold:focus{font-weight:600}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-void:focus{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color: hsl(var(--destructive) / .2)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: hsl(var(--ring) / .5)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-cyan-300\/20:disabled{background-color:#67e8f933}.disabled\:text-muted\/20:disabled{color:hsl(var(--muted) / .2)}.disabled\:text-void\/40:disabled{color:#02061766}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:border-cyan-300\/30{border-color:#67e8f94d}.group:hover .group-hover\:bg-cyan-300\/20{background-color:#67e8f933}.group:hover .group-hover\:fill-cyan-300{fill:#67e8f9}.group:hover .group-hover\:stroke-cyan-200{stroke:#a5f3fc}.group:hover .group-hover\:stroke-cyan-300\/40{stroke:#67e8f966}.group:hover .group-hover\:text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\>button\]\:ml-\[-0\.45rem\]:has(>button){margin-left:-.45rem}.has-\[\>button\]\:mr-\[-0\.45rem\]:has(>button){margin-right:-.45rem}.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(>kbd){margin-left:-.35rem}.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(>kbd){margin-right:-.35rem}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:.5rem}.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:.75rem}.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:.75rem}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-width:1px}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:hsl(var(--ring))}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){--tw-border-opacity: 1;border-color:hsl(var(--destructive) / var(--tw-border-opacity, 1))}.has-\[\>svg\]\:p-0:has(>svg){padding:0}.has-\[\>svg\]\:px-2:has(>svg){padding-left:.5rem;padding-right:.5rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color: hsl(var(--ring) / .5)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color: hsl(var(--destructive) / .2)}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start{align-self:flex-start}.group\/field:has([data-orientation=horizontal]) .group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance{text-wrap:balance}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pb-2\.5{padding-bottom:.625rem}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pt-2\.5{padding-top:.625rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{left:0;right:0}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{top:0;bottom:0}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{left:0;right:0}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:0}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:0}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:0}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:0}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:6rem}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:6rem}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:.375rem}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[size\=default\]\:h-9[data-size=default]{height:2.25rem}.data-\[size\=sm\]\:h-8[data-size=sm]{height:2rem}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom],.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:11rem}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:.375rem}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical],.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:.75rem}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) - 2px)}.data-\[selected\=true\]\:rounded-none[data-selected=true],.data-\[spacing\=0\]\:rounded-none[data-spacing="0"]{border-radius:0}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-variant=outline][data-spacing="0"]{border-left-width:0px}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-width:1px}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:hsl(var(--ring))}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:hsl(var(--primary))}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:hsl(var(--accent) / .5)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:hsl(var(--primary))}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:hsl(var(--accent))}.data-\[range-start\=true\]\:bg-primary[data-range-start=true],.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:hsl(var(--primary))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:.875rem;line-height:1.25rem}.data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:1rem;line-height:1.5rem}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:hsl(var(--accent-foreground))}.data-\[error\=true\]\:text-destructive[data-error=true],.data-\[invalid\=true\]\:text-destructive[data-invalid=true]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:hsl(var(--primary-foreground))}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:hsl(var(--accent-foreground))}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true],.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:hsl(var(--primary-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[spacing\=0\]\:shadow-none[data-spacing="0"]{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline][data-spacing=default],.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color: hsl(var(--ring) / .5)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot=select-value]>*{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\*\:data-\[slot\=select-value\]\:flex[data-slot=select-value]>*{display:flex}.\*\:data-\[slot\=select-value\]\:items-center[data-slot=select-value]>*{align-items:center}.\*\:data-\[slot\=select-value\]\:gap-2[data-slot=select-value]>*{gap:.5rem}.\*\:data-\[slot\=alert-description\]\:text-destructive\/90[data-slot=alert-description]>*{color:hsl(var(--destructive) / .9)}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[spacing\=0\]\:first\:rounded-l-md:first-child[data-spacing="0"]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l:first-child[data-variant=outline][data-spacing="0"]{border-left-width:1px}.data-\[spacing\=0\]\:last\:rounded-r-md:last-child[data-spacing="0"]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[active\=true\]\:hover\:bg-accent:hover[data-active=true],.data-\[state\=open\]\:hover\:bg-accent:hover[data-state=open]{background-color:hsl(var(--accent))}.data-\[active\=true\]\:focus\:bg-accent:focus[data-active=true]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:focus\:bg-accent:focus[data-state=open]{background-color:hsl(var(--accent))}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant=destructive]{background-color:hsl(var(--destructive) / .1)}.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.group[data-disabled=true] .group-data-\[disabled\=true\]\:pointer-events-none{pointer-events:none}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:relative{position:relative}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:top-full{top:100%}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:z-10{z-index:10}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group\/field-group[data-variant=outline] .group-data-\[variant\=outline\]\/field-group\:-mb-2{margin-bottom:-.5rem}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5{margin-top:.375rem}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block{display:block}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:border-ring{border-color:hsl(var(--ring))}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:bg-popover{background-color:hsl(var(--popover))}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center,.group\/drawer-content[data-vaul-drawer-direction=top] .group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center{text-align:center}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground{color:hsl(var(--popover-foreground))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group\/field[data-disabled=true] .group-data-\[disabled\=true\]\/field\:opacity-50,.group\/input-group[data-disabled=true] .group-data-\[disabled\=true\]\/input-group\:opacity-50,.group[data-disabled=true] .group-data-\[disabled\=true\]\:opacity-50{opacity:.5}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-\[3px\]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:duration-200{transition-duration:.2s;animation-duration:.2s}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.prose-headings\:font-bold :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:700}.prose-headings\:tracking-tight :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){letter-spacing:-.025em}.prose-a\:text-cyan-300 :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-code\:rounded-md :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) - 2px)}.prose-code\:bg-cyan-950\/30 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#0833444d}.prose-code\:px-1\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.375rem;padding-right:.375rem}.prose-code\:py-0\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.125rem;padding-bottom:.125rem}.prose-code\:text-cyan-200 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.prose-pre\:border :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-pre\:border-slate-800 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.prose-pre\:bg-slate-950\/80 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:#020617cc}.prose-img\:rounded-xl :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:calc(var(--radius) + 4px)}.prose-img\:border :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-img\:border-slate-800 :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-input:is(.dark *){border-color:hsl(var(--input))}.dark\:bg-destructive\/60:is(.dark *){background-color:hsl(var(--destructive) / .6)}.dark\:bg-input\/30:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:text-muted-foreground:is(.dark *){color:hsl(var(--muted-foreground))}.dark\:hover\:bg-accent\/50:hover:is(.dark *){background-color:hsl(var(--accent) / .5)}.dark\:hover\:bg-input\/50:hover:is(.dark *){background-color:hsl(var(--input) / .5)}.dark\:hover\:text-accent-foreground:hover:is(.dark *){color:hsl(var(--accent-foreground))}.dark\:focus-visible\:ring-destructive\/40:focus-visible:is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:has([data-slot][aria-invalid=true]):is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:data-\[state\=active\]\:border-input[data-state=active]:is(.dark *){border-color:hsl(var(--input))}.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]:is(.dark *){background-color:hsl(var(--primary))}.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state=checked]:is(.dark *){background-color:hsl(var(--primary-foreground))}.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state=unchecked]:is(.dark *){background-color:hsl(var(--foreground))}.dark\:data-\[state\=unchecked\]\:bg-input\/80[data-state=unchecked]:is(.dark *){background-color:hsl(var(--input) / .8)}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]:is(.dark *){color:hsl(var(--foreground))}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant=destructive]:is(.dark *){background-color:hsl(var(--destructive) / .2)}@media not all and (min-width:640px){.max-sm\:opacity-100{opacity:1}}@media(min-width:640px){.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:hidden{display:none}.sm\:w-auto{width:auto}.sm\:min-w-\[80px\]{min-width:80px}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:gap-4{gap:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pl-2\.5{padding-left:.625rem}.sm\:pr-2\.5{padding-right:.625rem}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:24rem}}@media(min-width:768px){.md\:absolute{position:absolute}.md\:mx-0{margin-left:0;margin-right:0}.md\:mb-16{margin-bottom:4rem}.md\:ml-8{margin-left:2rem}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:gap-1\.5{gap:.375rem}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.md\:divide-white\/5>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.md\:whitespace-nowrap{white-space:nowrap}.md\:p-12{padding:3rem}.md\:p-6{padding:1.5rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:py-28{padding-top:7rem;padding-bottom:7rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:text-left{text-align:left}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-7xl{font-size:4.5rem;line-height:1}.md\:text-9xl{font-size:8rem;line-height:1}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}.md\:opacity-0{opacity:0}.md\:after\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:gap-8{gap:2rem}.lg\:text-6xl{font-size:3.75rem;line-height:1}.lg\:text-7xl{font-size:4.5rem;line-height:1}}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none>*:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>*:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0>*:not(:first-child){border-left-width:0px}.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>*:not(:first-child){border-top-width:0px}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>*:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none>*:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:focus-visible\:relative:focus-visible>*{position:relative}.\[\&\>\*\]\:focus-visible\:z-10:focus-visible>*{z-index:10}.\[\&\>\*\]\:data-\[slot\=field\]\:p-4[data-slot=field]>*{padding:1rem}.\[\&\>\.sr-only\]\:w-auto>.sr-only{width:auto}.\[\&\>\[data-slot\=field-group\]\]\:gap-4>[data-slot=field-group]{gap:1rem}.\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:1 1 auto}.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md>[data-slot=select-trigger]:last-of-type:has(select[aria-hidden=true]:last-child){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=w-]){width:-moz-fit-content;width:fit-content}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>a\:hover\]\:text-primary>a:hover{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>input\]\:flex-1>input{flex:1 1 0%}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3>input:has(>[data-align=block-end]){padding-top:.75rem}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3>input:has(>[data-align=block-start]){padding-bottom:.75rem}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2>input:has(>[data-align=inline-end]){padding-right:.5rem}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2>input:has(>[data-align=inline-start]){padding-left:.5rem}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:1rem;height:1rem}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:.75rem;height:.75rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{-o-object-fit:cover;object-fit:cover}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:hsl(var(--muted-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:transparent}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:hsl(var(--background) / .2)}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:hsl(var(--background))}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:hsl(var(--background) / .1)}[data-variant=legend]+.\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:-.375rem}a.\[a\&\]\:hover\:bg-accent:hover{background-color:hsl(var(--accent))}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:hsl(var(--secondary) / .9)}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))} diff --git a/assets/index-CCmwjNGU.js b/assets/index-CCmwjNGU.js deleted file mode 100644 index 5c9c0772..00000000 --- a/assets/index-CCmwjNGU.js +++ /dev/null @@ -1,5 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/About-BU6bVOrg.js","assets/vendor-react-BiHfrq0e.js","assets/vendor-gsap-a3sj5zmn.js","assets/vendor-ui-B8TlNU4J.js","assets/Decoder-biNq2b_R.js","assets/NeuralReveal-uYarhiMA.js","assets/MetricCard-BJ0ePioZ.js","assets/Workbench-BidwJKAH.js","assets/releases--9GgxpSb.js","assets/McpServer-Co_2_izC.js","assets/ClaudePlugin-RchU6fia.js","assets/Blog-B5AVcxHA.js","assets/blogData-OjR2ZtNr.js","assets/BlogPost-Cflzrvst.js","assets/BlogPost-dRWncRqa.css","assets/Pricing-BMbyXkw2.js","assets/faqData-De1eOWz0.js","assets/PricingFR-DYCR87D8.js","assets/Commercial-DQA7Mxss.js","assets/Contact-BcMJNVGG.js","assets/CalendlyWidget-BuhQfp2_.js","assets/License-CXS5aYz7.js","assets/LicenseFR-Ckd0MEiL.js","assets/DecoderFR-DlRe5BDF.js","assets/Privacy-DTWyxh_E.js","assets/LegalPage-k7aoVn24.js","assets/privacy-C_JimZhu.js","assets/Terms-BQl40Nln.js","assets/terms-DgnSX4e_.js","assets/TermsFR-LQl3tW0l.js","assets/Refund-7XZ4VkKd.js","assets/RefundFR-i_PP-hSK.js","assets/PrivacyFR-Bhng6Sji.js","assets/LicenseAgreement-6bmCtLLY.js","assets/licenseAgreement-SdRZXyQm.js","assets/LicenseAgreementFR-CCa0fXfI.js","assets/Security-_EeEi6gF.js","assets/HomeFR-DAGdU1jQ.js","assets/GettingStarted-B53GBAZh.js","assets/UseCases-C79R3CZj.js","assets/Status-TwBfNKPu.js","assets/Compare-5L3DLJJs.js","assets/Founder-D4bg94dW.js","assets/Evidence-C-hSXMLq.js","assets/Changelog-Coh13L0q.js","assets/TechnicalReference-6OShAOCc.js","assets/Docs-Do1RRZu3.js","assets/Installer-DsNWHCu5.js","assets/Manual-Bko8q4XD.js","assets/Success-BhHxkaUv.js","assets/NotFound-LmmZglSu.js"])))=>i.map(i=>d[i]); -import{r as l,j as e,c as Ce}from"./vendor-react-BiHfrq0e.js";import{S as ke,C as st,a as ot,b as lt,R as it,c as ct,d as dt,F as ut,B as mt,P as ht,M as pt,e as ft}from"./vendor-ui-B8TlNU4J.js";import{g as he,S as xt}from"./vendor-gsap-a3sj5zmn.js";(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))s(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const c of o.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&s(c)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();var Re="popstate";function gt(t={}){function r(s,a){let{pathname:o,search:c,hash:d}=s.location;return pe("",{pathname:o,search:c,hash:d},a.state&&a.state.usr||null,a.state&&a.state.key||"default")}function n(s,a){return typeof a=="string"?a:H(a)}return yt(r,n,null,t)}function O(t,r){if(t===!1||t===null||typeof t>"u")throw new Error(r)}function T(t,r){if(!t){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function bt(){return Math.random().toString(36).substring(2,10)}function Pe(t,r){return{usr:t.state,key:t.key,idx:r}}function pe(t,r,n=null,s){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof r=="string"?q(r):r,state:n,key:r&&r.key||s||bt()}}function H({pathname:t="/",search:r="",hash:n=""}){return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function q(t){let r={};if(t){let n=t.indexOf("#");n>=0&&(r.hash=t.substring(n),t=t.substring(0,n));let s=t.indexOf("?");s>=0&&(r.search=t.substring(s),t=t.substring(0,s)),t&&(r.pathname=t)}return r}function yt(t,r,n,s={}){let{window:a=document.defaultView,v5Compat:o=!1}=s,c=a.history,d="POP",u=null,i=h();i==null&&(i=0,c.replaceState({...c.state,idx:i},""));function h(){return(c.state||{idx:null}).idx}function x(){d="POP";let N=h(),y=N==null?null:N-i;i=N,u&&u({action:d,location:j.location,delta:y})}function v(N,y){d="PUSH";let f=pe(j.location,N,y);i=h()+1;let m=Pe(f,i),b=j.createHref(f);try{c.pushState(m,"",b)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;a.location.assign(b)}o&&u&&u({action:d,location:j.location,delta:1})}function p(N,y){d="REPLACE";let f=pe(j.location,N,y);i=h();let m=Pe(f,i),b=j.createHref(f);c.replaceState(m,"",b),o&&u&&u({action:d,location:j.location,delta:0})}function g(N){return vt(N)}let j={get action(){return d},get location(){return t(a,c)},listen(N){if(u)throw new Error("A history only accepts one active listener");return a.addEventListener(Re,x),u=N,()=>{a.removeEventListener(Re,x),u=null}},createHref(N){return r(a,N)},createURL:g,encodeLocation(N){let y=g(N);return{pathname:y.pathname,search:y.search,hash:y.hash}},push:v,replace:p,go(N){return c.go(N)}};return j}function vt(t,r=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),O(n,"No window.location.(origin|href) available to create URL");let s=typeof t=="string"?t:H(t);return s=s.replace(/ $/,"%20"),!r&&s.startsWith("//")&&(s=n+s),new URL(s,n)}function Fe(t,r,n="/"){return jt(t,r,n,!1)}function jt(t,r,n,s){let a=typeof r=="string"?q(r):r,o=U(a.pathname||"/",n);if(o==null)return null;let c=Ue(t);wt(c);let d=null;for(let u=0;d==null&&u{let u={relativePath:d===void 0?o.path||"":d,caseSensitive:o.caseSensitive===!0,childrenIndex:c,route:o};u.relativePath.startsWith("/")&&(O(u.relativePath.startsWith(s),`Absolute route path "${u.relativePath}" nested under path "${s}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),u.relativePath=u.relativePath.slice(s.length));let i=F([s,u.relativePath]),h=n.concat(u);o.children&&o.children.length>0&&(O(o.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${i}".`),Ue(o.children,r,h,i)),!(o.path==null&&!o.index)&&r.push({path:i,score:_t(i,o.index),routesMeta:h})};return t.forEach((o,c)=>{if(o.path===""||!o.path?.includes("?"))a(o,c);else for(let d of Be(o.path))a(o,c,d)}),r}function Be(t){let r=t.split("/");if(r.length===0)return[];let[n,...s]=r,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(s.length===0)return a?[o,""]:[o];let c=Be(s.join("/")),d=[];return d.push(...c.map(u=>u===""?o:[o,u].join("/"))),a&&d.push(...c),d.map(u=>t.startsWith("/")&&u===""?"/":u)}function wt(t){t.sort((r,n)=>r.score!==n.score?n.score-r.score:Lt(r.routesMeta.map(s=>s.childrenIndex),n.routesMeta.map(s=>s.childrenIndex)))}var Nt=/^:[\w-]+$/,Et=3,Ct=2,kt=1,Rt=10,Pt=-2,_e=t=>t==="*";function _t(t,r){let n=t.split("/"),s=n.length;return n.some(_e)&&(s+=Pt),r&&(s+=Ct),n.filter(a=>!_e(a)).reduce((a,o)=>a+(Nt.test(o)?Et:o===""?kt:Rt),s)}function Lt(t,r){return t.length===r.length&&t.slice(0,-1).every((s,a)=>s===r[a])?t[t.length-1]-r[r.length-1]:0}function St(t,r,n=!1){let{routesMeta:s}=t,a={},o="/",c=[];for(let d=0;d{if(h==="*"){let g=d[v]||"";c=o.slice(0,o.length-g.length).replace(/(.)\/+$/,"$1")}const p=d[v];return x&&!p?i[h]=void 0:i[h]=(p||"").replace(/%2F/g,"/"),i},{}),pathname:o,pathnameBase:c,pattern:t}}function Ot(t,r=!1,n=!0){T(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let s=[],a="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(c,d,u)=>(s.push({paramName:d,isOptional:u!=null}),u?"/?([^\\/]+)?":"/([^\\/]+)"));return t.endsWith("*")?(s.push({paramName:"*"}),a+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":t!==""&&t!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,r?void 0:"i"),s]}function Dt(t){try{return t.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return T(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${r}).`),t}}function U(t,r){if(r==="/")return t;if(!t.toLowerCase().startsWith(r.toLowerCase()))return null;let n=r.endsWith("/")?r.length-1:r.length,s=t.charAt(n);return s&&s!=="/"?null:t.slice(n)||"/"}function At(t,r="/"){let{pathname:n,search:s="",hash:a=""}=typeof t=="string"?q(t):t;return{pathname:n?n.startsWith("/")?n:Tt(n,r):r,search:Mt(s),hash:Ft(a)}}function Tt(t,r){let n=r.replace(/\/+$/,"").split("/");return t.split("/").forEach(a=>{a===".."?n.length>1&&n.pop():a!=="."&&n.push(a)}),n.length>1?n.join("/"):"/"}function de(t,r,n,s){return`Cannot include a '${t}' character in a manually specified \`to.${r}\` field [${JSON.stringify(s)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function $t(t){return t.filter((r,n)=>n===0||r.route.path&&r.route.path.length>0)}function ze(t){let r=$t(t);return r.map((n,s)=>s===r.length-1?n.pathname:n.pathnameBase)}function qe(t,r,n,s=!1){let a;typeof t=="string"?a=q(t):(a={...t},O(!a.pathname||!a.pathname.includes("?"),de("?","pathname","search",a)),O(!a.pathname||!a.pathname.includes("#"),de("#","pathname","hash",a)),O(!a.search||!a.search.includes("#"),de("#","search","hash",a)));let o=t===""||a.pathname==="",c=o?"/":a.pathname,d;if(c==null)d=n;else{let x=r.length-1;if(!s&&c.startsWith("..")){let v=c.split("/");for(;v[0]==="..";)v.shift(),x-=1;a.pathname=v.join("/")}d=x>=0?r[x]:"/"}let u=At(a,d),i=c&&c!=="/"&&c.endsWith("/"),h=(o||c===".")&&n.endsWith("/");return!u.pathname.endsWith("/")&&(i||h)&&(u.pathname+="/"),u}var F=t=>t.join("/").replace(/\/\/+/g,"/"),It=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),Mt=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,Ft=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function Ut(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}var We=["POST","PUT","PATCH","DELETE"];new Set(We);var Bt=["GET",...We];new Set(Bt);var W=l.createContext(null);W.displayName="DataRouter";var se=l.createContext(null);se.displayName="DataRouterState";var Ve=l.createContext({isTransitioning:!1});Ve.displayName="ViewTransition";var zt=l.createContext(new Map);zt.displayName="Fetchers";var qt=l.createContext(null);qt.displayName="Await";var $=l.createContext(null);$.displayName="Navigation";var Q=l.createContext(null);Q.displayName="Location";var I=l.createContext({outlet:null,matches:[],isDataRoute:!1});I.displayName="Route";var ge=l.createContext(null);ge.displayName="RouteError";function Wt(t,{relative:r}={}){O(J(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:s}=l.useContext($),{hash:a,pathname:o,search:c}=Y(t,{relative:r}),d=o;return n!=="/"&&(d=o==="/"?n:F([n,o])),s.createHref({pathname:d,search:c,hash:a})}function J(){return l.useContext(Q)!=null}function A(){return O(J(),"useLocation() may be used only in the context of a component."),l.useContext(Q).location}var Ge="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function He(t){l.useContext($).static||l.useLayoutEffect(t)}function Qe(){let{isDataRoute:t}=l.useContext(I);return t?nr():Vt()}function Vt(){O(J(),"useNavigate() may be used only in the context of a component.");let t=l.useContext(W),{basename:r,navigator:n}=l.useContext($),{matches:s}=l.useContext(I),{pathname:a}=A(),o=JSON.stringify(ze(s)),c=l.useRef(!1);return He(()=>{c.current=!0}),l.useCallback((u,i={})=>{if(T(c.current,Ge),!c.current)return;if(typeof u=="number"){n.go(u);return}let h=qe(u,JSON.parse(o),a,i.relative==="path");t==null&&r!=="/"&&(h.pathname=h.pathname==="/"?r:F([r,h.pathname])),(i.replace?n.replace:n.push)(h,i.state,i)},[r,n,o,a,t])}l.createContext(null);function ea(){let{matches:t}=l.useContext(I),r=t[t.length-1];return r?r.params:{}}function Y(t,{relative:r}={}){let{matches:n}=l.useContext(I),{pathname:s}=A(),a=JSON.stringify(ze(n));return l.useMemo(()=>qe(t,JSON.parse(a),s,r==="path"),[t,a,s,r])}function Gt(t,r){return Je(t,r)}function Je(t,r,n,s){O(J(),"useRoutes() may be used only in the context of a component.");let{navigator:a}=l.useContext($),{matches:o}=l.useContext(I),c=o[o.length-1],d=c?c.params:{},u=c?c.pathname:"/",i=c?c.pathnameBase:"/",h=c&&c.route;{let y=h&&h.path||"";Ye(u,!h||y.endsWith("*")||y.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${u}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let x=A(),v;if(r){let y=typeof r=="string"?q(r):r;O(i==="/"||y.pathname?.startsWith(i),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${i}" but pathname "${y.pathname}" was given in the \`location\` prop.`),v=y}else v=x;let p=v.pathname||"/",g=p;if(i!=="/"){let y=i.replace(/^\//,"").split("/");g="/"+p.replace(/^\//,"").split("/").slice(y.length).join("/")}let j=Fe(t,{pathname:g});T(h||j!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),T(j==null||j[j.length-1].route.element!==void 0||j[j.length-1].route.Component!==void 0||j[j.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let N=Kt(j&&j.map(y=>Object.assign({},y,{params:Object.assign({},d,y.params),pathname:F([i,a.encodeLocation?a.encodeLocation(y.pathname).pathname:y.pathname]),pathnameBase:y.pathnameBase==="/"?i:F([i,a.encodeLocation?a.encodeLocation(y.pathnameBase).pathname:y.pathnameBase])})),o,n,s);return r&&N?l.createElement(Q.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...v},navigationType:"POP"}},N):N}function Ht(){let t=rr(),r=Ut(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,s="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:s},o={padding:"2px 4px",backgroundColor:s},c=null;return console.error("Error handled by React Router default ErrorBoundary:",t),c=l.createElement(l.Fragment,null,l.createElement("p",null,"💿 Hey developer 👋"),l.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",l.createElement("code",{style:o},"ErrorBoundary")," or"," ",l.createElement("code",{style:o},"errorElement")," prop on your route.")),l.createElement(l.Fragment,null,l.createElement("h2",null,"Unexpected Application Error!"),l.createElement("h3",{style:{fontStyle:"italic"}},r),n?l.createElement("pre",{style:a},n):null,c)}var Qt=l.createElement(Ht,null),Jt=class extends l.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?l.createElement(I.Provider,{value:this.props.routeContext},l.createElement(ge.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function Yt({routeContext:t,match:r,children:n}){let s=l.useContext(W);return s&&s.static&&s.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(s.staticContext._deepestRenderedBoundaryId=r.route.id),l.createElement(I.Provider,{value:t},n)}function Kt(t,r=[],n=null,s=null){if(t==null){if(!n)return null;if(n.errors)t=n.matches;else if(r.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let a=t,o=n?.errors;if(o!=null){let u=a.findIndex(i=>i.route.id&&o?.[i.route.id]!==void 0);O(u>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(",")}`),a=a.slice(0,Math.min(a.length,u+1))}let c=!1,d=-1;if(n)for(let u=0;u=0?a=a.slice(0,d+1):a=[a[0]];break}}}return a.reduceRight((u,i,h)=>{let x,v=!1,p=null,g=null;n&&(x=o&&i.route.id?o[i.route.id]:void 0,p=i.route.errorElement||Qt,c&&(d<0&&h===0?(Ye("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),v=!0,g=null):d===h&&(v=!0,g=i.route.hydrateFallbackElement||null)));let j=r.concat(a.slice(0,h+1)),N=()=>{let y;return x?y=p:v?y=g:i.route.Component?y=l.createElement(i.route.Component,null):i.route.element?y=i.route.element:y=u,l.createElement(Yt,{match:i,routeContext:{outlet:u,matches:j,isDataRoute:n!=null},children:y})};return n&&(i.route.ErrorBoundary||i.route.errorElement||h===0)?l.createElement(Jt,{location:n.location,revalidation:n.revalidation,component:p,error:x,children:N(),routeContext:{outlet:null,matches:j,isDataRoute:!0}}):N()},null)}function be(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Xt(t){let r=l.useContext(W);return O(r,be(t)),r}function Zt(t){let r=l.useContext(se);return O(r,be(t)),r}function er(t){let r=l.useContext(I);return O(r,be(t)),r}function ye(t){let r=er(t),n=r.matches[r.matches.length-1];return O(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function tr(){return ye("useRouteId")}function rr(){let t=l.useContext(ge),r=Zt("useRouteError"),n=ye("useRouteError");return t!==void 0?t:r.errors?.[n]}function nr(){let{router:t}=Xt("useNavigate"),r=ye("useNavigate"),n=l.useRef(!1);return He(()=>{n.current=!0}),l.useCallback(async(a,o={})=>{T(n.current,Ge),n.current&&(typeof a=="number"?t.navigate(a):await t.navigate(a,{fromRouteId:r,...o}))},[t,r])}var Le={};function Ye(t,r,n){!r&&!Le[t]&&(Le[t]=!0,T(!1,n))}l.memo(ar);function ar({routes:t,future:r,state:n}){return Je(t,void 0,n,r)}function E(t){O(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function sr({basename:t="/",children:r=null,location:n,navigationType:s="POP",navigator:a,static:o=!1}){O(!J(),"You cannot render a inside another . You should never have more than one in your app.");let c=t.replace(/^\/*/,"/"),d=l.useMemo(()=>({basename:c,navigator:a,static:o,future:{}}),[c,a,o]);typeof n=="string"&&(n=q(n));let{pathname:u="/",search:i="",hash:h="",state:x=null,key:v="default"}=n,p=l.useMemo(()=>{let g=U(u,c);return g==null?null:{location:{pathname:g,search:i,hash:h,state:x,key:v},navigationType:s}},[c,u,i,h,x,v,s]);return T(p!=null,` is not able to match the URL "${u}${i}${h}" because it does not start with the basename, so the won't render anything.`),p==null?null:l.createElement($.Provider,{value:d},l.createElement(Q.Provider,{children:r,value:p}))}function or({children:t,location:r}){return Gt(fe(t),r)}function fe(t,r=[]){let n=[];return l.Children.forEach(t,(s,a)=>{if(!l.isValidElement(s))return;let o=[...r,a];if(s.type===l.Fragment){n.push.apply(n,fe(s.props.children,o));return}O(s.type===E,`[${typeof s.type=="string"?s.type:s.type.name}] is not a component. All component children of must be a or `),O(!s.props.index||!s.props.children,"An index route cannot have child routes.");let c={id:s.props.id||o.join("-"),caseSensitive:s.props.caseSensitive,element:s.props.element,Component:s.props.Component,index:s.props.index,path:s.props.path,loader:s.props.loader,action:s.props.action,hydrateFallbackElement:s.props.hydrateFallbackElement,HydrateFallback:s.props.HydrateFallback,errorElement:s.props.errorElement,ErrorBoundary:s.props.ErrorBoundary,hasErrorBoundary:s.props.hasErrorBoundary===!0||s.props.ErrorBoundary!=null||s.props.errorElement!=null,shouldRevalidate:s.props.shouldRevalidate,handle:s.props.handle,lazy:s.props.lazy};s.props.children&&(c.children=fe(s.props.children,o)),n.push(c)}),n}var te="get",re="application/x-www-form-urlencoded";function oe(t){return t!=null&&typeof t.tagName=="string"}function lr(t){return oe(t)&&t.tagName.toLowerCase()==="button"}function ir(t){return oe(t)&&t.tagName.toLowerCase()==="form"}function cr(t){return oe(t)&&t.tagName.toLowerCase()==="input"}function dr(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function ur(t,r){return t.button===0&&(!r||r==="_self")&&!dr(t)}function xe(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((r,n)=>{let s=t[n];return r.concat(Array.isArray(s)?s.map(a=>[n,a]):[[n,s]])},[]))}function mr(t,r){let n=xe(t);return r&&r.forEach((s,a)=>{n.has(a)||r.getAll(a).forEach(o=>{n.append(a,o)})}),n}var X=null;function hr(){if(X===null)try{new FormData(document.createElement("form"),0),X=!1}catch{X=!0}return X}var pr=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function ue(t){return t!=null&&!pr.has(t)?(T(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${re}"`),null):t}function fr(t,r){let n,s,a,o,c;if(ir(t)){let d=t.getAttribute("action");s=d?U(d,r):null,n=t.getAttribute("method")||te,a=ue(t.getAttribute("enctype"))||re,o=new FormData(t)}else if(lr(t)||cr(t)&&(t.type==="submit"||t.type==="image")){let d=t.form;if(d==null)throw new Error('Cannot submit a
Pricing
Contact
Back to All Articles
August 2026FoundationsBy Guillaume Lessard · 5 min read

Syndrome Faithfulness: The Decoder Contract

The GF(2) invariant Hc=s, logical cosets, degeneracy, and graphlike eligibility explained from first principles.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: quantum error correction, stabilizer codes, syndrome decoding, fault tolerance

-

Abstract

-

Quantum error correction is often introduced as a search for the most likely physical error. A decoder has a more basic obligation first: the correction it returns must reproduce the measured syndrome. In the binary representation used by QECTOR, that obligation is

-Hc=s(mod2).Hc = s \pmod 2. -

This post builds the invariant from the parity-check map, proves why it places the residual error in the kernel of H, and explains why that still does not settle the logical outcome. The line between a valid syndrome representative and a harmless stabilizer representative is the foundation for comparing every decoder family.

-

1. The binary picture

-

Work over the field F2 = {0, 1}, where addition is XOR. Let n be the number of physical qubits and m the number of checks. A binary error vector is e in F2^n, a parity-check matrix is H in F2^(m x n), and the measured syndrome is

-s=He(mod2).s = He \pmod 2. -

The j-th syndrome bit records whether the error anticommutes with check j. The matrix is therefore not decoder metadata. It is the map that defines what the measurement means.

-

The Tanner graph carries one qubit node per column and one check node per row, with an edge wherever H[j, i] = 1. Different algorithms read the same incidence structure differently: message passing follows Tanner edges, Union-Find grows clusters, and graphlike matching interprets low-degree qubits as detector edges.

-

2. Stabilizers, kernels, and cosets

-

A stabilizer code is the common +1 eigenspace of commuting Pauli checks. In the binary CSS picture, the two sectors use matrices H_X and H_Z with

-HXHZT=0(mod2).H_X H_Z^T = 0 \pmod 2. -

For one sector, the zero-syndrome vectors form

-ker⁡(H)={v:Hv=0}.\ker(H) = \{v : Hv = 0\}. -

The row space im(H^T) sits inside this kernel when the stabilizers commute. Vectors in im(H^T) are products of stabilizers and act trivially on the code space. Vectors in ker(H) outside the row space are undetectable logical operators.

-

A syndrome never identifies a unique physical error. If e produces s, then every vector in the affine set e + ker(H) produces the same syndrome. A decoder picks a representative of that set using geometry, weights, beliefs, or a lookup table.

-

3. The syndrome-faithfulness theorem

-

Let a decoder return c for a reachable syndrome s = He.

-

Theorem

-

The following statements are equivalent for the returned correction:

-
    -
  1. The correction is syndrome-faithful: Hc = s.
  2. -
  3. The residual c + e lies in ker(H).
  4. -
-

Proof

-

If Hc = s and He = s, then

-H(c+e)=Hc+He=s+s=0(mod2).H(c + e) = Hc + He = s + s = 0 \pmod 2. -

So c + e in ker(H). Conversely, if H(c + e) = 0, then

-Hc+He=0⟹Hc=He=s(mod2).Hc + He = 0 \quad\Longrightarrow\quad Hc = He = s \pmod 2. -

The equation is the complete algebraic gate for returning to the code space. It says nothing yet about which logical coset the residual occupies.

-

4. Logical success is a quotient question

-

The logical criterion is the next layer:

-success  ⟺  c+e∈im⁡(HT),\text{success} \iff c + e \in \operatorname{im}(H^T), -

and

-logical failure  ⟺  c+e∈ker⁡(H)∖im⁡(HT).\text{logical failure} \iff c + e \in \ker(H) \setminus \operatorname{im}(H^T). -

Two corrections can be different bit strings and still be equally correct if their difference is a stabilizer. Scoring c == e is therefore the wrong metric for a degenerate stabilizer code. Score logical observables or coset membership instead.

-

For a CSS code, the sector dimensions carry the same idea. From H_X H_Z^T = 0 we get

-dim⁡(ker⁡(HX)/im⁡(HZT))=k,\dim\left(\ker(H_X) / \operatorname{im}(H_Z^T)\right) = k, -

so the quotient holds the logical degrees of freedom, not the raw error representatives.

-

5. A small example: the Steane code

-

One sector of the Steane [[7,1,3]] code can use the checks

-
{3, 4, 5, 6}
-{1, 2, 5, 6}
-{0, 2, 4, 6}
-

Take an error on qubit 5:

-
e = [0, 0, 0, 0, 0, 1, 0]
-

Qubit 5 belongs to the first two checks, so

-
s = [1, 1, 0].
-

The minimal correction is c = e, but it is not the only faithful one. Add any stabilizer row combination g, and c + g still produces [1, 1, 0] with the same logical action. A raw-vector comparison would call these different. A coset comparison would not.

-

6. What graphlike means

-

Matching-based decoders need an extra structural condition. In a graphlike detector model, every qubit or fault mechanism touches at most two checks. The mechanism then becomes an edge between detector nodes, with a virtual boundary for one-ended cases.

-

If any qubit participates in more than two checks, the mechanism is a hyperedge. It cannot be silently rewritten as pairwise matching edges without changing the problem. QECTOR's documented routing rule sends such a matrix to BP-OSD, whose contract accepts any reachable GF(2) check matrix.

-

This guard matters more than a code-family label. A problem named "surface" is not automatically graphlike, and a general matrix is not automatically eligible for Blossom.

-

7. How the invariant travels through the engine

-

The reference manual describes fifteen specialized backends. They differ in domain and accuracy claims but share one gate:

-
    -
  • Blossom builds paths whose boundary is the defect set.
  • -
  • Sparse Blossom processes tight collision events, and escalates when a sparse solve is incomplete or unfaithful.
  • -
  • Union-Find grows clusters and peels a spanning forest.
  • -
  • BP-OSD repairs a residual syndrome with a GF(2) basis solve.
  • -
  • Ambiguity clustering solves reliable and ambiguous components whose residuals sum to the global syndrome.
  • -
  • Space-time decoding applies the same boundary argument to a lifted detector matrix.
  • -
  • GPU batch paths are checked against the CPU reference on tested configurations.
  • -
-

The algorithms are not interchangeable. The invariant is the common contract that lets the routing layer and the validation harness compare them safely.

-

8. Evidence and claim boundaries

-

The manual anchors the faithfulness claim to the syndrome-faithfulness tests and the cross-decoder tests in the frozen workspace. It separately scopes exact MWPM, Sparse Blossom, Union-Find, BP-OSD, DEM, GPU identity, and API claims to their named evidence.

-

It does not establish a universal threshold, a universal fastest backend, or a hardware-independent latency number. Those claims need a surviving artifact with the circuit, code, noise model, seed, shots, environment, raw results, and hash.

-

Takeaway

-

The first question for any decoder is not "did it guess the exact error?" It is:

-
Does H @ correction equal the reachable syndrome modulo 2?
-

Once the answer is yes, the remaining question is which element of ker(H) separates the correction from the true error. That is the logical-coset problem. Keeping the two questions separate is the shortest path to correct mathematics, honest benchmarks, and robust decoder engineering.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/01_qec_foundations_syndrome_faithfulness.md b/blog/01_qec_foundations_syndrome_faithfulness.md deleted file mode 100644 index 16e5cc3d..00000000 --- a/blog/01_qec_foundations_syndrome_faithfulness.md +++ /dev/null @@ -1,164 +0,0 @@ -# Syndrome Faithfulness: The Contract Every QEC Decoder Must Keep - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: quantum error correction, stabilizer codes, syndrome decoding, fault tolerance - -## Abstract - -Quantum error correction is often introduced as a search for the most likely physical error. A decoder has a more basic obligation first: the correction it returns must reproduce the measured syndrome. In the binary representation used by QECTOR, that obligation is - -$$ -Hc = s \pmod 2. -$$ - -This post builds the invariant from the parity-check map, proves why it places the residual error in the kernel of `H`, and explains why that still does not settle the logical outcome. The line between a valid syndrome representative and a harmless stabilizer representative is the foundation for comparing every decoder family. - -## 1. The binary picture - -Work over the field `F2 = {0, 1}`, where addition is XOR. Let `n` be the number of physical qubits and `m` the number of checks. A binary error vector is `e in F2^n`, a parity-check matrix is `H in F2^(m x n)`, and the measured syndrome is - -$$ -s = He \pmod 2. -$$ - -The `j`-th syndrome bit records whether the error anticommutes with check `j`. The matrix is therefore not decoder metadata. It is the map that defines what the measurement means. - -The Tanner graph carries one qubit node per column and one check node per row, with an edge wherever `H[j, i] = 1`. Different algorithms read the same incidence structure differently: message passing follows Tanner edges, Union-Find grows clusters, and graphlike matching interprets low-degree qubits as detector edges. - -## 2. Stabilizers, kernels, and cosets - -A stabilizer code is the common `+1` eigenspace of commuting Pauli checks. In the binary CSS picture, the two sectors use matrices `H_X` and `H_Z` with - -$$ -H_X H_Z^T = 0 \pmod 2. -$$ - -For one sector, the zero-syndrome vectors form - -$$ -\ker(H) = \{v : Hv = 0\}. -$$ - -The row space `im(H^T)` sits inside this kernel when the stabilizers commute. Vectors in `im(H^T)` are products of stabilizers and act trivially on the code space. Vectors in `ker(H)` outside the row space are undetectable logical operators. - -A syndrome never identifies a unique physical error. If `e` produces `s`, then every vector in the affine set `e + ker(H)` produces the same syndrome. A decoder picks a representative of that set using geometry, weights, beliefs, or a lookup table. - -## 3. The syndrome-faithfulness theorem - -Let a decoder return `c` for a reachable syndrome `s = He`. - -### Theorem - -The following statements are equivalent for the returned correction: - -1. The correction is syndrome-faithful: `Hc = s`. -2. The residual `c + e` lies in `ker(H)`. - -### Proof - -If `Hc = s` and `He = s`, then - -$$ -H(c + e) = Hc + He = s + s = 0 \pmod 2. -$$ - -So `c + e in ker(H)`. Conversely, if `H(c + e) = 0`, then - -$$ -Hc + He = 0 \quad\Longrightarrow\quad Hc = He = s \pmod 2. -$$ - -The equation is the complete algebraic gate for returning to the code space. It says nothing yet about which logical coset the residual occupies. - -## 4. Logical success is a quotient question - -The logical criterion is the next layer: - -$$ -\text{success} \iff c + e \in \operatorname{im}(H^T), -$$ - -and - -$$ -\text{logical failure} \iff c + e \in \ker(H) \setminus \operatorname{im}(H^T). -$$ - -Two corrections can be different bit strings and still be equally correct if their difference is a stabilizer. Scoring `c == e` is therefore the wrong metric for a degenerate stabilizer code. Score logical observables or coset membership instead. - -For a CSS code, the sector dimensions carry the same idea. From `H_X H_Z^T = 0` we get - -$$ -\dim\left(\ker(H_X) / \operatorname{im}(H_Z^T)\right) = k, -$$ - -so the quotient holds the logical degrees of freedom, not the raw error representatives. - -## 5. A small example: the Steane code - -One sector of the Steane `[[7,1,3]]` code can use the checks - -```text -{3, 4, 5, 6} -{1, 2, 5, 6} -{0, 2, 4, 6} -``` - -Take an error on qubit 5: - -```text -e = [0, 0, 0, 0, 0, 1, 0] -``` - -Qubit 5 belongs to the first two checks, so - -```text -s = [1, 1, 0]. -``` - -The minimal correction is `c = e`, but it is not the only faithful one. Add any stabilizer row combination `g`, and `c + g` still produces `[1, 1, 0]` with the same logical action. A raw-vector comparison would call these different. A coset comparison would not. - -## 6. What graphlike means - -Matching-based decoders need an extra structural condition. In a graphlike detector model, every qubit or fault mechanism touches at most two checks. The mechanism then becomes an edge between detector nodes, with a virtual boundary for one-ended cases. - -If any qubit participates in more than two checks, the mechanism is a hyperedge. It cannot be silently rewritten as pairwise matching edges without changing the problem. QECTOR's documented routing rule sends such a matrix to BP-OSD, whose contract accepts any reachable GF(2) check matrix. - -This guard matters more than a code-family label. A problem named "surface" is not automatically graphlike, and a general matrix is not automatically eligible for Blossom. - -## 7. How the invariant travels through the engine - -The reference manual describes fifteen specialized backends. They differ in domain and accuracy claims but share one gate: - -- Blossom builds paths whose boundary is the defect set. -- Sparse Blossom processes tight collision events, and escalates when a sparse solve is incomplete or unfaithful. -- Union-Find grows clusters and peels a spanning forest. -- BP-OSD repairs a residual syndrome with a GF(2) basis solve. -- Ambiguity clustering solves reliable and ambiguous components whose residuals sum to the global syndrome. -- Space-time decoding applies the same boundary argument to a lifted detector matrix. -- GPU batch paths are checked against the CPU reference on tested configurations. - -The algorithms are not interchangeable. The invariant is the common contract that lets the routing layer and the validation harness compare them safely. - -## 8. Evidence and claim boundaries - -The manual anchors the faithfulness claim to the syndrome-faithfulness tests and the cross-decoder tests in the frozen workspace. It separately scopes exact MWPM, Sparse Blossom, Union-Find, BP-OSD, DEM, GPU identity, and API claims to their named evidence. - -It does **not** establish a universal threshold, a universal fastest backend, or a hardware-independent latency number. Those claims need a surviving artifact with the circuit, code, noise model, seed, shots, environment, raw results, and hash. - -## Takeaway - -The first question for any decoder is not "did it guess the exact error?" It is: - -```text -Does H @ correction equal the reachable syndrome modulo 2? -``` - -Once the answer is yes, the remaining question is which element of `ker(H)` separates the correction from the true error. That is the logical-coset problem. Keeping the two questions separate is the shortest path to correct mathematics, honest benchmarks, and robust decoder engineering. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/02BlossomMwpmExact/index.html b/blog/02BlossomMwpmExact/index.html deleted file mode 100644 index 442974b6..00000000 --- a/blog/02BlossomMwpmExact/index.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Exact Blossom Decoding for Graphlike QEC · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026Decoder AlgorithmsBy Guillaume Lessard · 5 min read

Exact Blossom Decoding for Graphlike QEC

How weighted MWPM, Edmonds' primal-dual view, path boundaries, and sparse candidate escalation fit together.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: MWPM, Blossom, graphlike decoding, surface codes, optimization

-

Abstract

-

For a graphlike detector model, a syndrome is a set of defects. Minimum-weight perfect matching (MWPM) pairs those defects, and each pair is expanded into a minimum-weight path in the detector graph. QECTOR's BlossomDecoder implements the exact weighted matching contract described in the v1.0.0 manual. This post explains the matching problem, the primal-dual view of Edmonds' algorithm, the path-flipping proof of syndrome faithfulness, and the boundary between the exact solver and sparse candidate generation.

-

1. From defects to a matching problem

-

Let H be a graphlike parity-check map and let s be a reachable syndrome. The defect set is

-D={v:sv=1}.D = \{v : s_v = 1\}. -

Each graph edge represents a fault mechanism. A mechanism with probability p receives the log-likelihood weight

-w=log⁡(1−pp)=−log⁡(p1−p).w = \log\left(\frac{1-p}{p}\right) = -\log\left(\frac{p}{1-p}\right). -

For two defects u and v, the matching graph uses the shortest-path distance between them. A virtual boundary node handles a one-ended path. The solver selects a perfect matching on the defects, then XORs the selected graph paths into one correction vector.

-

The graphlike condition matters: a mechanism touching three or more detectors is a hyperedge, not a matching edge. The correct QECTOR route for that structure is BP-OSD.

-

2. The primal and dual programs

-

For the complete graph on D, let x_uv indicate whether defects u and v are paired. The primal objective is

-min⁡∑(u,v)wuvxuv\min \sum_{(u,v)} w_{uv}x_{uv} -

subject to every defect being matched exactly once, together with the odd-set constraints that define the matching polytope. The dual assigns vertex potentials and blossom potentials. In schematic form, its edge constraints are

-yu+yv+∑B∋u,vzB≤wuv,zB≥0.y_u + y_v + \sum_{B \ni u,v} z_B \leq w_{uv}, \qquad z_B \geq 0. -

An edge is tight when equality holds. Complementary slackness supplies the optimality certificate: an optimal matching can be supported by tight edges, and every active blossom meets the required matching boundary condition.

-

Blossom contraction is not a heuristic shortcut. An odd cycle can hide an augmenting path from the current alternating forest. Contracting that cycle into a temporary pseudonode lets the primal-dual search continue; expanding it restores the matching structure.

-

3. The path-flipping theorem

-

The matching objective chooses a likely pairing. The syndrome-faithfulness proof is a separate boundary argument.

-

Theorem

-

Let M be a perfect matching of the defect set. For every matched pair (u, v), let P_uv be a graph path between the two defects, or a path from a defect to the virtual boundary. Define

-c=⨁(u,v)∈MPuv.c = \bigoplus_{(u,v)\in M} P_{uv}. -

Then Hc = s (mod 2).

-

Proof

-

The interior vertices of a path have even incidence, so they cancel over F2. A path from u to v has boundary e_u + e_v. A boundary path has boundary e_u, because the virtual boundary contributes no detector syndrome. Therefore

-Hc=⨁(u,v)∈M(eu+ev).Hc = \bigoplus_{(u,v)\in M} (e_u + e_v). -

Every defect appears exactly once in the perfect matching, so the right-hand side is the XOR of all defect basis vectors. That is exactly s.

-

The proof does not require a unique path. If two shortest paths connect the same endpoints, their XOR is a cycle in ker(H). That is degeneracy, not a correctness failure.

-

4. A hand-worked ring example

-

Consider the ring checks

-
{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 0}
-

and the syndrome

-
s = [1, 0, 1, 0, 0].
-

The defects are checks 0 and 2. There are two arcs between them:

-
    -
  • the short arc uses qubits 1 and 2, so c_short = [0, 1, 1, 0, 0];
  • -
  • the long arc uses qubits 0, 4, and 3.
  • -
-

With unit weights, the short arc is selected. Direct multiplication verifies

-
H @ c_short = [1, 0, 1, 0, 0]  (mod 2).
-

If the edge probabilities change, the selected arc can change too. Both paths remain syndrome-faithful because they share the same boundary. The weight model selects a representative; it does not change the algebraic contract.

-

5. Exact solver versus sparse candidate generation

-

The dense matching problem grows quickly with the number of defects. QECTOR's exact BlossomDecoder is the reference weighted MWPM path, documented as exact on the audited small matching codes. It is the right comparison point for correctness and optimality tests.

-

The sparse decoder uses a different engineering strategy. Candidate neighbors can be restricted with

-k=max⁡(12,⌈kmult∣D∣⌉),k = \max\left(12,\left\lceil k_{mult}\sqrt{|D|}\right\rceil\right), -

and the sparse solve can escalate to the full graph when the candidate set is incomplete or the returned correction fails verification. The manual therefore describes Sparse Blossom as faithful and near-optimal within its tested scope, not as a universal replacement for exact MWPM.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
QuestionExact BlossomSparse Blossom
Matching objectiveExact weighted MWPMEvent-driven sparse solve
Evidence boundaryAudited small matching codesTested faithfulness, near-optimality
Candidate graphFull matching graphAdaptive candidates with escalation
Shared gateH c = sH c = s
-

6. Minimal API path

-

The stable API example in the manual is deliberately small:

-
import numpy as np
-from qector_decoder_v3 import BlossomDecoder
-
-checks = [[0, 1], [1, 2], [2, 3], [3, 4]]
-syndrome = np.array([0, 1, 0, 0], dtype=np.uint8)
-
-correction = BlossomDecoder(checks, n_qubits=5).decode(syndrome)
-# Validate H @ correction == syndrome modulo 2.
-

For a detector error model, parse the model, verify that it is graphlike, collapse parallel mechanisms when appropriate, and pass its likelihood weights to the decoder. Unweighted decoding is not a substitute for a circuit-level prior when mechanisms have different probabilities.

-

7. What MWPM does not prove

-

An optimal matching objective does not prove a threshold for every code, noise model, or implementation. A faithful correction does not imply logical success for the sampled error either. The logical test stays

-c+e∈im⁡(HT).c + e \in \operatorname{im}(H^T). -

The v1.0.0 changelog anchors comparisons the way the manual requires: its 120-test LER suite on the distance-3 repetition code at p = 0.01 reports ler_qector = 0.00392 against ler_pymatching = 0.00317, inside the documented 4.5x margin. Any public comparison should still name the code family, distance, rounds, noise model, DEM settings, decoder mode, shots, seed, environment, and raw artifact. The manual intentionally excludes hardware-bound latency and throughput figures.

-

Takeaway

-

Blossom is valuable not because every QEC problem is a matching problem, but because it provides a precise reference for the graphlike problems that are matching problems. The optimization certificate chooses the minimum-weight pairing, the path boundary proof guarantees the syndrome, and the logical-coset test determines whether the correction is harmless.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/02_blossom_mwpm_exact.md b/blog/02_blossom_mwpm_exact.md deleted file mode 100644 index 45259733..00000000 --- a/blog/02_blossom_mwpm_exact.md +++ /dev/null @@ -1,154 +0,0 @@ -# Exact Blossom Decoding: Why MWPM Is a Reference Solver for Graphlike QEC - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: MWPM, Blossom, graphlike decoding, surface codes, optimization - -## Abstract - -For a graphlike detector model, a syndrome is a set of defects. Minimum-weight perfect matching (MWPM) pairs those defects, and each pair is expanded into a minimum-weight path in the detector graph. QECTOR's `BlossomDecoder` implements the exact weighted matching contract described in the v1.0.0 manual. This post explains the matching problem, the primal-dual view of Edmonds' algorithm, the path-flipping proof of syndrome faithfulness, and the boundary between the exact solver and sparse candidate generation. - -## 1. From defects to a matching problem - -Let `H` be a graphlike parity-check map and let `s` be a reachable syndrome. The defect set is - -$$ -D = \{v : s_v = 1\}. -$$ - -Each graph edge represents a fault mechanism. A mechanism with probability `p` receives the log-likelihood weight - -$$ -w = \log\left(\frac{1-p}{p}\right) = -\log\left(\frac{p}{1-p}\right). -$$ - -For two defects `u` and `v`, the matching graph uses the shortest-path distance between them. A virtual boundary node handles a one-ended path. The solver selects a perfect matching on the defects, then XORs the selected graph paths into one correction vector. - -The graphlike condition matters: a mechanism touching three or more detectors is a hyperedge, not a matching edge. The correct QECTOR route for that structure is BP-OSD. - -## 2. The primal and dual programs - -For the complete graph on `D`, let `x_uv` indicate whether defects `u` and `v` are paired. The primal objective is - -$$ -\min \sum_{(u,v)} w_{uv}x_{uv} -$$ - -subject to every defect being matched exactly once, together with the odd-set constraints that define the matching polytope. The dual assigns vertex potentials and blossom potentials. In schematic form, its edge constraints are - -$$ -y_u + y_v + \sum_{B \ni u,v} z_B \leq w_{uv}, \qquad z_B \geq 0. -$$ - -An edge is *tight* when equality holds. Complementary slackness supplies the optimality certificate: an optimal matching can be supported by tight edges, and every active blossom meets the required matching boundary condition. - -Blossom contraction is not a heuristic shortcut. An odd cycle can hide an augmenting path from the current alternating forest. Contracting that cycle into a temporary pseudonode lets the primal-dual search continue; expanding it restores the matching structure. - -## 3. The path-flipping theorem - -The matching objective chooses a likely pairing. The syndrome-faithfulness proof is a separate boundary argument. - -### Theorem - -Let `M` be a perfect matching of the defect set. For every matched pair `(u, v)`, let `P_uv` be a graph path between the two defects, or a path from a defect to the virtual boundary. Define - -$$ -c = \bigoplus_{(u,v)\in M} P_{uv}. -$$ - -Then `Hc = s (mod 2)`. - -### Proof - -The interior vertices of a path have even incidence, so they cancel over `F2`. A path from `u` to `v` has boundary `e_u + e_v`. A boundary path has boundary `e_u`, because the virtual boundary contributes no detector syndrome. Therefore - -$$ -Hc = \bigoplus_{(u,v)\in M} (e_u + e_v). -$$ - -Every defect appears exactly once in the perfect matching, so the right-hand side is the XOR of all defect basis vectors. That is exactly `s`. - -The proof does not require a unique path. If two shortest paths connect the same endpoints, their XOR is a cycle in `ker(H)`. That is degeneracy, not a correctness failure. - -## 4. A hand-worked ring example - -Consider the ring checks - -```text -{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 0} -``` - -and the syndrome - -```text -s = [1, 0, 1, 0, 0]. -``` - -The defects are checks 0 and 2. There are two arcs between them: - -- the short arc uses qubits 1 and 2, so `c_short = [0, 1, 1, 0, 0]`; -- the long arc uses qubits 0, 4, and 3. - -With unit weights, the short arc is selected. Direct multiplication verifies - -```text -H @ c_short = [1, 0, 1, 0, 0] (mod 2). -``` - -If the edge probabilities change, the selected arc can change too. Both paths remain syndrome-faithful because they share the same boundary. The weight model selects a representative; it does not change the algebraic contract. - -## 5. Exact solver versus sparse candidate generation - -The dense matching problem grows quickly with the number of defects. QECTOR's exact `BlossomDecoder` is the reference weighted MWPM path, documented as exact on the audited small matching codes. It is the right comparison point for correctness and optimality tests. - -The sparse decoder uses a different engineering strategy. Candidate neighbors can be restricted with - -$$ -k = \max\left(12,\left\lceil k_{mult}\sqrt{|D|}\right\rceil\right), -$$ - -and the sparse solve can escalate to the full graph when the candidate set is incomplete or the returned correction fails verification. The manual therefore describes Sparse Blossom as faithful and near-optimal within its tested scope, not as a universal replacement for exact MWPM. - -| Question | Exact Blossom | Sparse Blossom | -|---|---|---| -| Matching objective | Exact weighted MWPM | Event-driven sparse solve | -| Evidence boundary | Audited small matching codes | Tested faithfulness, near-optimality | -| Candidate graph | Full matching graph | Adaptive candidates with escalation | -| Shared gate | `H c = s` | `H c = s` | - -## 6. Minimal API path - -The stable API example in the manual is deliberately small: - -```python -import numpy as np -from qector_decoder_v3 import BlossomDecoder - -checks = [[0, 1], [1, 2], [2, 3], [3, 4]] -syndrome = np.array([0, 1, 0, 0], dtype=np.uint8) - -correction = BlossomDecoder(checks, n_qubits=5).decode(syndrome) -# Validate H @ correction == syndrome modulo 2. -``` - -For a detector error model, parse the model, verify that it is graphlike, collapse parallel mechanisms when appropriate, and pass its likelihood weights to the decoder. Unweighted decoding is not a substitute for a circuit-level prior when mechanisms have different probabilities. - -## 7. What MWPM does not prove - -An optimal matching objective does not prove a threshold for every code, noise model, or implementation. A faithful correction does not imply logical success for the sampled error either. The logical test stays - -$$ -c + e \in \operatorname{im}(H^T). -$$ - -The v1.0.0 changelog anchors comparisons the way the manual requires: its 120-test LER suite on the distance-3 repetition code at `p = 0.01` reports `ler_qector = 0.00392` against `ler_pymatching = 0.00317`, inside the documented 4.5x margin. Any public comparison should still name the code family, distance, rounds, noise model, DEM settings, decoder mode, shots, seed, environment, and raw artifact. The manual intentionally excludes hardware-bound latency and throughput figures. - -## Takeaway - -Blossom is valuable not because every QEC problem is a matching problem, but because it provides a precise reference for the graphlike problems that are matching problems. The optimization certificate chooses the minimum-weight pairing, the path boundary proof guarantees the syndrome, and the logical-coset test determines whether the correction is harmless. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/03SparseBlossomEventDriven/index.html b/blog/03SparseBlossomEventDriven/index.html deleted file mode 100644 index 968dff07..00000000 --- a/blog/03SparseBlossomEventDriven/index.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sparse Blossom and Event-Driven Growth · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026Decoder AlgorithmsBy Guillaume Lessard · 6 min read

Sparse Blossom and Event-Driven Growth

Region states, collision times, tight edges, radix heaps, and the tested scope of Sparse Blossom.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: Sparse Blossom, MWPM, region growth, radix heap, quantum error correction

-

Abstract

-

Exact matching is a useful reference for graphlike quantum error correction, but building every defect-to-defect distance is wasteful when the decoding graph is sparse and geometric. Sparse Blossom changes the execution model: regions grow from defects, collision events are scheduled, and only edges that become tight are exposed to the matching logic. This post explains the region states, the collision-time equation, the tight-edge invariant, the radix-heap queue, and the scope boundary in the v1.0.0 manual: the shipped decoder is documented and tested as syndrome-faithful and near-optimal, with escalation when a sparse solve is incomplete or unfaithful.

-

1. Why avoid a dense distance matrix?

-

For a syndrome s, matching operates on the complete graph of defects. Even when the physical detector graph has only local edges, the complete matching graph contains a potential edge for every pair of defects. Most of those pairs cannot participate in an optimal low-weight solution at the current dual state.

-

Sparse Blossom does not guess that long edges are impossible. It discovers candidate edges in the order in which they can become tight under a feasible dual solution. This is a correctness-oriented form of laziness: an edge is not ignored forever, it is deferred until its collision event becomes relevant.

-

2. The three region states

-

Each top-level region has a dual radius and one of three states:

-
Growing   dy/dt = +1   unmatched outer region
-Frozen    dy/dt =  0   matched region or outer blossom shell
-Shrinking dy/dt = -1   inner region of a blossom
-

The states compactly encode Edmonds' alternating-tree labels. Growing regions expand their dual variables, frozen regions hold their current value, and shrinking regions contract inside a blossom so internal tight edges stay tight.

-

For a dual edge constraint, define the slack

-fuv(t)=wuv−yu(t)−yv(t)−∑B∋u,vzB.f_{uv}(t) = w_{uv} - y_u(t) - y_v(t) - \sum_{B \ni u,v} z_B. -

The algorithm must never let a feasible slack become negative. The event queue is the mechanism that handles the exact time at which a slack reaches zero.

-

3. Collision time

-

Two regions meet when their accumulated radii account for the model distance:

-yu(t∗)+yv(t∗)+∑B∋u,vzB(t∗)=wuv.y_u(t^*) + y_v(t^*) + \sum_{B \ni u,v}z_B(t^*) = w_{uv}. -

With constant state speeds over the interval, the general update is

-t∗=t+wuv−yu−yv−∑zBdyu/dt+dyv/dt+∑dzB/dt,t^* = t + \frac{w_{uv}-y_u-y_v-\sum z_B}{dy_u/dt + dy_v/dt + \sum dz_B/dt}, -

when the denominator is positive. In the simplest Growing-Growing case this becomes

-t∗=t+wuv−yu−yv2.t^* = t + \frac{w_{uv}-y_u-y_v}{2}. -

If the denominator is non-positive, the regions are not approaching one another under the current state assignment, so there is no future collision in that interval.

-

The event queue stores future collision times. Processing events in non-decreasing order means the first moment an edge can become tight is handled before any dual constraint is violated.

-

4. Tight edges and complementary slackness

-

Let

-Etight(t)={(u,v):yu+yv+∑zB=wuv}.E_{tight}(t) = \{(u,v): y_u+y_v+\sum z_B = w_{uv}\}. -

For a feasible dual solution, complementary slackness says an optimal matching can be selected from tight edges, with the usual blossom boundary conditions. Sparse Blossom therefore needs to expose the tight subgraph at each event time, not the whole complete graph.

-

The core invariant is:

-
-

An edge that has not reached its collision time is not yet required by the current tight-edge solve; an edge that reaches its collision time enters the candidate structure.

-
-

The implementation still verifies the returned correction. A candidate set that cannot complete a faithful solve is never silently accepted.

-

5. Blossoms in an event-driven solver

-

When a tight edge is popped, the solver examines the alternating-tree roots:

-
    -
  1. Different outer roots can grow an alternating tree or expose an augmenting path.
  2. -
  3. An edge whose endpoints close an odd cycle in the same alternating structure forms a blossom.
  4. -
  5. A blossom is contracted at its lowest common ancestor.
  6. -
  7. The new region continues with the state implied by the outer/inner structure.
  8. -
  9. An edge internal to an inner region is not an augmenting event.
  10. -
-

Shrinking is not merely a graph operation. It is a dual update. The outer and inner rates are chosen so the sum controlling an internal edge stays constant, which is why edges already known to be tight remain usable while the search continues.

-

6. Why a radix heap fits the event stream

-

Collision keys are processed in non-decreasing order. When weights are represented by bounded integer keys, a radix heap can exploit that monotonicity. With a binary heap, the queue work is logarithmic in the number of vertices. With a radix heap over keys bounded by C, the documented amortized bound is of the form

-O(E+Vlog⁡C).O(E + V\log C). -

The manual also records the ordinary binary-heap bound O(E log V) for the event path. These are asymptotic implementation bounds, not wall-clock promises. A benchmark must report its machine, workload, distribution, and artifact separately.

-

7. Candidate sparsification and fallback

-

The matching candidate rule is adaptive:

-k=max⁡(12,⌈kmultndefects⌉),k = \max(12,\lceil k_{mult}\sqrt{n_{defects}}\rceil), -

with a documented default multiplier of 2.0. Candidate generation is event-driven. If the sparse solve is detected to be incomplete or unfaithful, the solver escalates to the full graph.

-

The guarantee is communicated this way:

-
    -
  • syndrome faithfulness is a required checked property;
  • -
  • sparse region growth is documented as near-optimal within its tested scope;
  • -
  • exact MWPM remains the reference path for audited small matching codes;
  • -
  • no universal optimality or hardware performance claim follows from the asymptotic mechanism alone.
  • -
-

8. A useful mental model

-

Imagine each defect inflating a weighted ball. The radius is not a physical distance; it is a dual variable. When two balls meet, the connecting route becomes tight and the matching search can use it. If the tight edges contain an odd cycle, the cycle becomes a blossom and the dual motion changes locally.

-

That model explains why the algorithm can skip the up-front all-pairs computation without changing the matching mathematics. It also explains why the implementation must track state transitions carefully: missing a collision is a dual-feasibility bug, while accepting an unverified sparse completion is a syndrome-faithfulness bug.

-

9. How to evaluate it

-

The manual points reviewers to the Sparse Blossom faithfulness test, the adaptive-k regression, and the candidate-set tests. A useful evaluation should record:

-
code family and distance
-detector graph and boundary convention
-noise model and edge weights
-defect distribution and batch shape
-decoder configuration and k multiplier
-seed, shots, environment, and commit
-raw output and SHA-256 hash
-

If optimality is the question, compare the matching objective against an exact oracle on an audited small code. If correctness is the question, verify H @ c == s for reachable syndromes. If logical performance is the question, score observables or cosets under one comparable noise model.

-

Takeaway

-

Sparse Blossom is best understood as event-driven primal-dual matching, not as a generic shortcut around correctness. Growth exposes tight edges, the queue orders the moments at which those edges matter, and blossom state transitions preserve the dual structure. The shipped scope stays explicit: faithful and near-optimal in tested configurations, with escalation when sparse evidence is insufficient.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/03_sparse_blossom_event_driven.md b/blog/03_sparse_blossom_event_driven.md deleted file mode 100644 index 85077300..00000000 --- a/blog/03_sparse_blossom_event_driven.md +++ /dev/null @@ -1,146 +0,0 @@ -# Sparse Blossom: Turning Matching Into an Event-Driven Growth Process - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: Sparse Blossom, MWPM, region growth, radix heap, quantum error correction - -## Abstract - -Exact matching is a useful reference for graphlike quantum error correction, but building every defect-to-defect distance is wasteful when the decoding graph is sparse and geometric. Sparse Blossom changes the execution model: regions grow from defects, collision events are scheduled, and only edges that become tight are exposed to the matching logic. This post explains the region states, the collision-time equation, the tight-edge invariant, the radix-heap queue, and the scope boundary in the v1.0.0 manual: the shipped decoder is documented and tested as syndrome-faithful and near-optimal, with escalation when a sparse solve is incomplete or unfaithful. - -## 1. Why avoid a dense distance matrix? - -For a syndrome `s`, matching operates on the complete graph of defects. Even when the physical detector graph has only local edges, the complete matching graph contains a potential edge for every pair of defects. Most of those pairs cannot participate in an optimal low-weight solution at the current dual state. - -Sparse Blossom does not guess that long edges are impossible. It discovers candidate edges in the order in which they can become tight under a feasible dual solution. This is a correctness-oriented form of laziness: an edge is not ignored forever, it is deferred until its collision event becomes relevant. - -## 2. The three region states - -Each top-level region has a dual radius and one of three states: - -```text -Growing dy/dt = +1 unmatched outer region -Frozen dy/dt = 0 matched region or outer blossom shell -Shrinking dy/dt = -1 inner region of a blossom -``` - -The states compactly encode Edmonds' alternating-tree labels. Growing regions expand their dual variables, frozen regions hold their current value, and shrinking regions contract inside a blossom so internal tight edges stay tight. - -For a dual edge constraint, define the slack - -$$ -f_{uv}(t) = w_{uv} - y_u(t) - y_v(t) - \sum_{B \ni u,v} z_B. -$$ - -The algorithm must never let a feasible slack become negative. The event queue is the mechanism that handles the exact time at which a slack reaches zero. - -## 3. Collision time - -Two regions meet when their accumulated radii account for the model distance: - -$$ -y_u(t^*) + y_v(t^*) + \sum_{B \ni u,v}z_B(t^*) = w_{uv}. -$$ - -With constant state speeds over the interval, the general update is - -$$ -t^* = t + \frac{w_{uv}-y_u-y_v-\sum z_B}{dy_u/dt + dy_v/dt + \sum dz_B/dt}, -$$ - -when the denominator is positive. In the simplest Growing-Growing case this becomes - -$$ -t^* = t + \frac{w_{uv}-y_u-y_v}{2}. -$$ - -If the denominator is non-positive, the regions are not approaching one another under the current state assignment, so there is no future collision in that interval. - -The event queue stores future collision times. Processing events in non-decreasing order means the first moment an edge can become tight is handled before any dual constraint is violated. - -## 4. Tight edges and complementary slackness - -Let - -$$ -E_{tight}(t) = \{(u,v): y_u+y_v+\sum z_B = w_{uv}\}. -$$ - -For a feasible dual solution, complementary slackness says an optimal matching can be selected from tight edges, with the usual blossom boundary conditions. Sparse Blossom therefore needs to expose the tight subgraph at each event time, not the whole complete graph. - -The core invariant is: - -> An edge that has not reached its collision time is not yet required by the current tight-edge solve; an edge that reaches its collision time enters the candidate structure. - -The implementation still verifies the returned correction. A candidate set that cannot complete a faithful solve is never silently accepted. - -## 5. Blossoms in an event-driven solver - -When a tight edge is popped, the solver examines the alternating-tree roots: - -1. Different outer roots can grow an alternating tree or expose an augmenting path. -2. An edge whose endpoints close an odd cycle in the same alternating structure forms a blossom. -3. A blossom is contracted at its lowest common ancestor. -4. The new region continues with the state implied by the outer/inner structure. -5. An edge internal to an inner region is not an augmenting event. - -Shrinking is not merely a graph operation. It is a dual update. The outer and inner rates are chosen so the sum controlling an internal edge stays constant, which is why edges already known to be tight remain usable while the search continues. - -## 6. Why a radix heap fits the event stream - -Collision keys are processed in non-decreasing order. When weights are represented by bounded integer keys, a radix heap can exploit that monotonicity. With a binary heap, the queue work is logarithmic in the number of vertices. With a radix heap over keys bounded by `C`, the documented amortized bound is of the form - -$$ -O(E + V\log C). -$$ - -The manual also records the ordinary binary-heap bound `O(E log V)` for the event path. These are asymptotic implementation bounds, not wall-clock promises. A benchmark must report its machine, workload, distribution, and artifact separately. - -## 7. Candidate sparsification and fallback - -The matching candidate rule is adaptive: - -$$ -k = \max(12,\lceil k_{mult}\sqrt{n_{defects}}\rceil), -$$ - -with a documented default multiplier of `2.0`. Candidate generation is event-driven. If the sparse solve is detected to be incomplete or unfaithful, the solver escalates to the full graph. - -The guarantee is communicated this way: - -- syndrome faithfulness is a required checked property; -- sparse region growth is documented as near-optimal within its tested scope; -- exact MWPM remains the reference path for audited small matching codes; -- no universal optimality or hardware performance claim follows from the asymptotic mechanism alone. - -## 8. A useful mental model - -Imagine each defect inflating a weighted ball. The radius is not a physical distance; it is a dual variable. When two balls meet, the connecting route becomes tight and the matching search can use it. If the tight edges contain an odd cycle, the cycle becomes a blossom and the dual motion changes locally. - -That model explains why the algorithm can skip the up-front all-pairs computation without changing the matching mathematics. It also explains why the implementation must track state transitions carefully: missing a collision is a dual-feasibility bug, while accepting an unverified sparse completion is a syndrome-faithfulness bug. - -## 9. How to evaluate it - -The manual points reviewers to the Sparse Blossom faithfulness test, the adaptive-`k` regression, and the candidate-set tests. A useful evaluation should record: - -```text -code family and distance -detector graph and boundary convention -noise model and edge weights -defect distribution and batch shape -decoder configuration and k multiplier -seed, shots, environment, and commit -raw output and SHA-256 hash -``` - -If optimality is the question, compare the matching objective against an exact oracle on an audited small code. If correctness is the question, verify `H @ c == s` for reachable syndromes. If logical performance is the question, score observables or cosets under one comparable noise model. - -## Takeaway - -Sparse Blossom is best understood as event-driven primal-dual matching, not as a generic shortcut around correctness. Growth exposes tight edges, the queue orders the moments at which those edges matter, and blossom state transitions preserve the dual structure. The shipped scope stays explicit: faithful and near-optimal in tested configurations, with escalation when sparse evidence is insufficient. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/04FastUnionFind/index.html b/blog/04FastUnionFind/index.html deleted file mode 100644 index 5c612d23..00000000 --- a/blog/04FastUnionFind/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UF-01: Parity, Peeling, and Graphlike Decoding · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026Decoder AlgorithmsBy Guillaume Lessard · 5 min read

UF-01: Parity, Peeling, and Graphlike Decoding

Cluster parity, spanning-forest peeling, weighted growth, zero-allocation structure, and domain boundaries.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: Union-Find, graphlike decoding, cluster growth, GF(2), Rust systems

-

Abstract

-

Union-Find decoding trades global matching optimality for a simple local process: grow clusters around fired detectors, merge them, and peel a spanning forest. QECTOR's UF-01 path makes that process predictable in memory as well as in algebra. This post derives the cluster-parity invariant, explains the satisfiability condition and the boundary sink, proves why leaf-to-root peeling returns a syndrome-faithful correction, and states the documented domain boundary: Union-Find is for graphlike codes, not arbitrary hypergraph checks.

-

1. Eligibility comes first

-

In a graphlike problem, each qubit appears in at most two checks. A qubit can therefore be represented as an edge between detector nodes. The decoder receives a syndrome s on detector nodes and must emit a set of edges c such that

-Hc=s(mod2).Hc = s \pmod 2. -

If a qubit participates in more than two checks, it is a hyperedge. QECTOR explicitly rejects that structure for the Union-Find family and routes it to BP-OSD. This is a contract, not a performance limitation to work around by silently changing the graph.

-

2. Cluster parity

-

For a cluster C of detector vertices, define

-π(C)=⨁v∈Csv.\pi(C) = \bigoplus_{v\in C} s_v. -

The parity has a simple merge law. For disjoint clusters C1 and C2,

-π(C1∪C2)=π(C1)⊕π(C2).\pi(C1 \cup C2) = \pi(C1) \oplus \pi(C2). -

An even cluster can be satisfied internally. An odd cluster needs either another odd cluster or a boundary. The virtual boundary is a parity sink: a one-ended path may terminate there without leaving an unsatisfied detector.

-

3. Growth and fusion

-

The unweighted procedure reads as five stages:

-
    -
  1. Create a cluster for each fired detector.
  2. -
  3. Grow the frontier of every unsatisfied odd cluster.
  4. -
  5. Add newly reached vertices and mark the corresponding graph edges.
  6. -
  7. Fuse clusters when their growth touches.
  8. -
  9. Stop when every cluster is even or boundary-attached.
  10. -
-

The stopping condition is exactly

-π(C)=0orboundary(C)=1.\pi(C) = 0 \quad\text{or}\quad \text{boundary}(C)=1. -

The implementation maintains parity, boundary state, root, and size in the Union-Find structure. Union-by-rank and path compression make the disjoint-set operations amortized near-linear in the graph size.

-

4. Peeling a spanning forest

-

Growth records a subgraph, not necessarily a tree. UF-01 builds a spanning forest and processes each tree from leaves to root. For an oriented tree edge from parent p to child v, flip the edge when the residual parity of the child subtree is one:

-c(p,v)=π(subtree(v)).c_{(p,v)} = \pi(\text{subtree}(v)). -

The child residual is then XORed into the parent residual.

-

Peeling proof

-

At a leaf, the only way to remove a syndrome bit is to flip its parent edge when that bit is one. Assume every processed child subtree has satisfied all internal vertices and passed only one residual bit to its parent. XOR is additive over F2, so combining child residuals with the parent's syndrome gives the correct residual for the larger subtree. At the root, the growth halt condition guarantees the residual is zero or is absorbed by the virtual boundary. Every detector therefore receives exactly its requested syndrome parity, and

-Hc=s(mod2).Hc = s \pmod 2. -

This proof is why UF peeling can be simple without being unverified.

-

5. Weighted growth

-

When mechanisms have different probabilities, edge lengths should reflect their priors:

-we=log⁡(1−pepe).w_e = \log\left(\frac{1-p_e}{p_e}\right). -

The weighted UF path advances clusters by adaptive time steps, stopping when a frontier edge saturates. Invalid weights are rejected during construction. With uniform weights, the weighted and unweighted paths are documented to agree in correction cost within the tested scope.

-

The weighted path is still a graphlike cluster-growth decoder. It is not a replacement for BP-OSD on hyperedges, and it is not an exact MWPM solver.

-

6. Repetition-code example and API path

-

Use the repetition checks

-
{0, 1}, {1, 2}, {2, 3}, {3, 4}
-

There are five qubits and four checks. Consider these reachable syndromes:

-
s1 = [1, 0, 0, 0]
-s2 = [1, 1, 0, 0]
-

For s1, the cluster at check 0 is odd and attaches to the left boundary through qubit 0. Peeling returns

-
c1 = [1, 0, 0, 0, 0].
-

For s2, the two adjacent defects form an even cluster. The connecting edge is qubit 1, so

-
c2 = [0, 1, 0, 0, 0].
-

Directly, H @ c1 = s1 and H @ c2 = s2 modulo two. The decoder did not need to enumerate all error patterns; cluster parity determined the required forest action.

-

The stable Python call mirrors the Blossom path:

-
import numpy as np
-from qector_decoder_v3 import UnionFindDecoder
-
-checks = [[0, 1], [1, 2], [2, 3], [3, 4]]
-syndrome = np.array([1, 1, 0, 0], dtype=np.uint8)
-
-correction = UnionFindDecoder(checks, n_qubits=5).decode(syndrome)
-# H @ correction == syndrome (mod 2) on graphlike inputs.
-

7. What zero allocation means here

-

UF-01 preallocates graph-sized buffers and resets them in place. The manual describes no heap allocation in the steady-state hot path and points to memory-growth and scratch-reuse tests. That is a structural property of the implementation, not a promise of a particular latency.

-

The same distinction applies to complexity. The documented amortized bound is

-O((V+E)α(V+E))O((V+E)\alpha(V+E)) -

with O(V+E) space, where alpha is the inverse Ackermann function. An asymptotic bound does not identify the wall-clock behavior of a particular CPU, compiler, graph, batch shape, or memory hierarchy.

-

8. Logical correctness is separate

-

UF-01 guarantees the syndrome contract on supported graphlike inputs. If e is the sampled physical error, faithfulness gives

-H(c+e)=0,H(c+e)=0, -

so c + e lies in ker(H). Whether the residual is harmless depends on the stabilizer row space:

-logical success  ⟺  c+e∈im⁡(HT).\text{logical success} \iff c+e \in \operatorname{im}(H^T). -

Union-Find is not minimum-weight perfect matching, so its logical-error behavior must be evaluated on a declared workload rather than inferred from the peeling proof.

-

9. Validation checklist

-

For a UF experiment, record:

-
    -
  • the check-to-qubit structure and proof that every qubit degree is at most two;
  • -
  • the boundary convention and whether growth is weighted;
  • -
  • the code family, distance, rounds, noise model, and reachable-syndrome generator;
  • -
  • single-shot versus pre-built hot-path versus batch timing;
  • -
  • the exact package/build environment and commit;
  • -
  • faithfulness results and logical-observable results separately;
  • -
  • raw artifacts and their SHA-256 hashes.
  • -
-

The manual anchors UF claims to faithfulness, property, batch-equivalence, memory, and native RSS tests. It does not carry a current universal test count or a universal speed claim.

-

Takeaway

-

UF-01 is a compact example of proof-guided systems design. Cluster parity tells the algorithm when it may stop, forest peeling turns that state into a correction, and preallocated buffers make the memory behavior explicit. The result is a faithful graphlike decoder with a near-linear amortized bound, not a universal decoder for every quantum code.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/04_fast_union_find_uf01.md b/blog/04_fast_union_find_uf01.md deleted file mode 100644 index c4a97808..00000000 --- a/blog/04_fast_union_find_uf01.md +++ /dev/null @@ -1,179 +0,0 @@ -# UF-01: Parity, Peeling, and Allocation-Free Graphlike Decoding - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: Union-Find, graphlike decoding, cluster growth, GF(2), Rust systems - -## Abstract - -Union-Find decoding trades global matching optimality for a simple local process: grow clusters around fired detectors, merge them, and peel a spanning forest. QECTOR's UF-01 path makes that process predictable in memory as well as in algebra. This post derives the cluster-parity invariant, explains the satisfiability condition and the boundary sink, proves why leaf-to-root peeling returns a syndrome-faithful correction, and states the documented domain boundary: Union-Find is for graphlike codes, not arbitrary hypergraph checks. - -## 1. Eligibility comes first - -In a graphlike problem, each qubit appears in at most two checks. A qubit can therefore be represented as an edge between detector nodes. The decoder receives a syndrome `s` on detector nodes and must emit a set of edges `c` such that - -$$ -Hc = s \pmod 2. -$$ - -If a qubit participates in more than two checks, it is a hyperedge. QECTOR explicitly rejects that structure for the Union-Find family and routes it to BP-OSD. This is a contract, not a performance limitation to work around by silently changing the graph. - -## 2. Cluster parity - -For a cluster `C` of detector vertices, define - -$$ -\pi(C) = \bigoplus_{v\in C} s_v. -$$ - -The parity has a simple merge law. For disjoint clusters `C1` and `C2`, - -$$ -\pi(C1 \cup C2) = \pi(C1) \oplus \pi(C2). -$$ - -An even cluster can be satisfied internally. An odd cluster needs either another odd cluster or a boundary. The virtual boundary is a parity sink: a one-ended path may terminate there without leaving an unsatisfied detector. - -## 3. Growth and fusion - -The unweighted procedure reads as five stages: - -1. Create a cluster for each fired detector. -2. Grow the frontier of every unsatisfied odd cluster. -3. Add newly reached vertices and mark the corresponding graph edges. -4. Fuse clusters when their growth touches. -5. Stop when every cluster is even or boundary-attached. - -The stopping condition is exactly - -$$ -\pi(C) = 0 \quad\text{or}\quad \text{boundary}(C)=1. -$$ - -The implementation maintains parity, boundary state, root, and size in the Union-Find structure. Union-by-rank and path compression make the disjoint-set operations amortized near-linear in the graph size. - -## 4. Peeling a spanning forest - -Growth records a subgraph, not necessarily a tree. UF-01 builds a spanning forest and processes each tree from leaves to root. For an oriented tree edge from parent `p` to child `v`, flip the edge when the residual parity of the child subtree is one: - -$$ -c_{(p,v)} = \pi(\text{subtree}(v)). -$$ - -The child residual is then XORed into the parent residual. - -### Peeling proof - -At a leaf, the only way to remove a syndrome bit is to flip its parent edge when that bit is one. Assume every processed child subtree has satisfied all internal vertices and passed only one residual bit to its parent. XOR is additive over `F2`, so combining child residuals with the parent's syndrome gives the correct residual for the larger subtree. At the root, the growth halt condition guarantees the residual is zero or is absorbed by the virtual boundary. Every detector therefore receives exactly its requested syndrome parity, and - -$$ -Hc = s \pmod 2. -$$ - -This proof is why UF peeling can be simple without being unverified. - -## 5. Weighted growth - -When mechanisms have different probabilities, edge lengths should reflect their priors: - -$$ -w_e = \log\left(\frac{1-p_e}{p_e}\right). -$$ - -The weighted UF path advances clusters by adaptive time steps, stopping when a frontier edge saturates. Invalid weights are rejected during construction. With uniform weights, the weighted and unweighted paths are documented to agree in correction cost within the tested scope. - -The weighted path is still a graphlike cluster-growth decoder. It is not a replacement for BP-OSD on hyperedges, and it is not an exact MWPM solver. - -## 6. Repetition-code example and API path - -Use the repetition checks - -```text -{0, 1}, {1, 2}, {2, 3}, {3, 4} -``` - -There are five qubits and four checks. Consider these reachable syndromes: - -```text -s1 = [1, 0, 0, 0] -s2 = [1, 1, 0, 0] -``` - -For `s1`, the cluster at check 0 is odd and attaches to the left boundary through qubit 0. Peeling returns - -```text -c1 = [1, 0, 0, 0, 0]. -``` - -For `s2`, the two adjacent defects form an even cluster. The connecting edge is qubit 1, so - -```text -c2 = [0, 1, 0, 0, 0]. -``` - -Directly, `H @ c1 = s1` and `H @ c2 = s2` modulo two. The decoder did not need to enumerate all error patterns; cluster parity determined the required forest action. - -The stable Python call mirrors the Blossom path: - -```python -import numpy as np -from qector_decoder_v3 import UnionFindDecoder - -checks = [[0, 1], [1, 2], [2, 3], [3, 4]] -syndrome = np.array([1, 1, 0, 0], dtype=np.uint8) - -correction = UnionFindDecoder(checks, n_qubits=5).decode(syndrome) -# H @ correction == syndrome (mod 2) on graphlike inputs. -``` - -## 7. What zero allocation means here - -UF-01 preallocates graph-sized buffers and resets them in place. The manual describes no heap allocation in the steady-state hot path and points to memory-growth and scratch-reuse tests. That is a structural property of the implementation, not a promise of a particular latency. - -The same distinction applies to complexity. The documented amortized bound is - -$$ -O((V+E)\alpha(V+E)) -$$ - -with `O(V+E)` space, where `alpha` is the inverse Ackermann function. An asymptotic bound does not identify the wall-clock behavior of a particular CPU, compiler, graph, batch shape, or memory hierarchy. - -## 8. Logical correctness is separate - -UF-01 guarantees the syndrome contract on supported graphlike inputs. If `e` is the sampled physical error, faithfulness gives - -$$ -H(c+e)=0, -$$ - -so `c + e` lies in `ker(H)`. Whether the residual is harmless depends on the stabilizer row space: - -$$ -\text{logical success} \iff c+e \in \operatorname{im}(H^T). -$$ - -Union-Find is not minimum-weight perfect matching, so its logical-error behavior must be evaluated on a declared workload rather than inferred from the peeling proof. - -## 9. Validation checklist - -For a UF experiment, record: - -- the check-to-qubit structure and proof that every qubit degree is at most two; -- the boundary convention and whether growth is weighted; -- the code family, distance, rounds, noise model, and reachable-syndrome generator; -- single-shot versus pre-built hot-path versus batch timing; -- the exact package/build environment and commit; -- faithfulness results and logical-observable results separately; -- raw artifacts and their SHA-256 hashes. - -The manual anchors UF claims to faithfulness, property, batch-equivalence, memory, and native RSS tests. It does not carry a current universal test count or a universal speed claim. - -## Takeaway - -UF-01 is a compact example of proof-guided systems design. Cluster parity tells the algorithm when it may stop, forest peeling turns that state into a correction, and preallocated buffers make the memory behavior explicit. The result is a faithful graphlike decoder with a near-linear amortized bound, not a universal decoder for every quantum code. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/05BpOsdQldpc/index.html b/blog/05BpOsdQldpc/index.html deleted file mode 100644 index ff0dfc3a..00000000 --- a/blog/05BpOsdQldpc/index.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BP-OSD for qLDPC Hypergraphs · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026qLDPC and AIBy Guillaume Lessard · 6 min read

BP-OSD for qLDPC Hypergraphs

Log-domain belief propagation, ordered statistics, residual GF(2) solving, and faithful non-graphlike decoding.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: qLDPC, BP-OSD, belief propagation, ordered statistics, GF(2), hypergraphs

-

Abstract

-

Minimum-weight matching is natural when each fault mechanism touches at most two detectors. Quantum LDPC and other non-graphlike codes do not provide that guarantee. BP-OSD is QECTOR's general GF(2) path: belief propagation supplies a reliability ordering, then ordered-statistics decoding solves a residual linear system. The design separation matters: beliefs choose a candidate representative, while the algebraic solve restores syndrome faithfulness. This post derives the log-domain update, the OSD-0/OSD-W stages, and the residual-solve theorem, then explains the numerical, batching, and claim boundaries documented in v1.0.0.

-

1. Why hyperedges change the decoder choice

-

Let a column of H describe one fault mechanism. If that column has weight two, it can be drawn as a graph edge between two detectors. If it has weight three or more, it is a hyperedge. Pairing its detectors independently loses the fact that one mechanism caused all of them.

-

QECTOR uses the structural rule

-
max qubit/check degree <= 2  -> graphlike decoders may be eligible
-any degree > 2               -> matching is ineligible; use BP-OSD
-

The BP-OSD contract is expressed for an arbitrary reachable GF(2) matrix. This is why it is the correct fallback for qLDPC, color-code, and general hypergraph inputs.

-

2. Belief propagation in the log domain

-

For each qubit q, the prior log-likelihood ratio is combined with messages from neighboring checks. With m_(q->c) and m_(c->q) denoting variable-to-check and check-to-variable messages, the exact sum-product check update uses

-mc→q=sgn⁡(∏q′∈N(c)∖qmq′→c)ϕ(∑q′∈N(c)∖qϕ(∣mq′→c∣)),m_{c\to q} = \operatorname{sgn}\left(\prod_{q'\in N(c)\setminus q}m_{q'\to c}\right) -\phi\left(\sum_{q'\in N(c)\setminus q}\phi(|m_{q'\to c}|)\right), -

where

-ϕ(x)=−log⁡(tanh⁡x2)=log⁡coth⁡x2.\phi(x) = -\log\left(\tanh\frac{x}{2}\right) = \log\coth\frac{x}{2}. -

The posterior reliability is

-γq=LLR⁡prior(q)+∑c∈N(q)mc→q.\gamma_q = \operatorname{LLR}_{prior}(q) + \sum_{c\in N(q)}m_{c\to q}. -

The decoder hard-decodes from the signs of gamma. If that hard decision already satisfies H e = s, it can return immediately. Otherwise it passes the residual to OSD.

-

QECTOR also documents min-sum as an opt-in approximation and a relay (layered) schedule in which checks are processed sequentially. These are schedule choices; they do not remove the need for the faithful post-process.

-

3. Ordered statistics decoding

-

OSD uses BP for ranking rather than treating BP's hard decision as infallible.

-
    -
  1. -

    Sort qubit columns by ascending |gamma_q|, so the least reliable columns are known.

    -
  2. -
  3. -

    Extract a rank-r independent column basis of H using GF(2) elimination.

    -
  4. -
  5. -

    Keep BP's hard decisions on the fixed/free portion according to the implementation's basis convention.

    -
  6. -
  7. -

    Solve the basis for the residual syndrome.

    -
  8. -
  9. -

    For OSD-W, sweep combinations among a width

    -W=max⁡(2 osd_order,6)W = \max(2\,\text{osd\_order}, 6) -

    of the least-reliable columns and retain the lowest-weight faithful candidate.

    -
  10. -
-

OSD-0 performs one residual solve. Higher order adds a search over selected reliability perturbations. The search changes which representative is preferred; it does not change the syndrome equation every candidate must satisfy.

-

4. The residual-solve theorem

-

Let B be a rank-r column basis of H. Suppose the fixed columns contribute H_fixed e_fixed. Define

-seff=s+Hfixedefixed(mod2).s_{eff} = s + H_{fixed}e_{fixed} \pmod 2. -

The OSD stage solves

-HBeB=seff(mod2).H_B e_B = s_{eff} \pmod 2. -

Theorem

-

If s is reachable, every OSD candidate constructed from a consistent residual solve satisfies Hc = s (mod 2).

-

Proof

-

Reachability means s lies in the column space of H. The fixed contribution also lies in that column space, so their sum s_eff remains in it. Because B is a full-rank column basis, the residual system has a solution for every reachable residual. Reconstructing the full correction gives

-Hc=Hfixedefixed+HBeB=Hfixedefixed+seff=s(mod2).Hc = H_{fixed}e_{fixed} + H_B e_B - = H_{fixed}e_{fixed} + s_{eff} - = s \pmod 2. -

BP convergence therefore affects which candidate the decoder prefers, but not whether the OSD candidate reproduces the reachable syndrome.

-

5. What OSD does and does not optimize

-

The reliability ordering is a proxy for the probability of each error bit. OSD-W can search multiple low-reliability combinations and select a lower-weight candidate. In a degenerate quantum code, the goal is not raw-vector equality with the sampled error. The residual must land in the correct logical coset:

-c+e∈im⁡(HT)c + e \in \operatorname{im}(H^T) -

for logical success. Faithfulness only establishes c + e in ker(H).

-

The division of labour is:

- - - - - - - - - - - - - - - - - - - - - - - - - -
StageQuestion answered
BPWhich qubits look reliable or ambiguous?
GF(2) basis solveCan the residual syndrome be satisfied exactly?
OSD-W searchWhich faithful representative has the best available weight?
Logical scoringDid the residual stay in the stabilizer coset?
-

6. Numerical stability and implementation scope

-

The manual records two check-node rules, exact sum-product and min-sum, plus a relay schedule. The Rust implementation evaluates the box-plus function exactly in a small range and uses a tabulated interpolation path over a larger range. The relevant evidence is numerical-stability testing, not a universal floating-point guarantee across arbitrary hardware.

-

On the Python surface, BPOSDDecoder exposes bp_method ("relay" selects the layered schedule) and an adjustable osd_lambda. The batch path can run BP over a batch on a usable GPU and send only non-converged shots through the exact GF(2) post-process. Two bounds apply: the published 1.0.0 wheels are CPU-only, so GPU paths are build-time feature gates whose runtime availability is reported by cuda_is_available(); and without a usable device the batch path falls back to NumPy with the same validity contract. The single-shot path is CPU-oriented because a GPU launch is not assumed to amortize for one syndrome.

-

7. Complexity language that stays honest

-

The manual describes the dominant terms as BP message work plus GF(2) elimination and any OSD-W search. A compact workload-level expression is

-O(IBPE+r3+OSD search work),O(I_{BP}E + r^3 + \text{OSD search work}), -

where I_BP is the iteration count, E the Tanner-graph edge count, and r the matrix rank. These terms explain tuning pressure; they are not a wall-clock result.

-

An evaluation must state the matrix, rank, message schedule, damping or min-sum choice, OSD order, dtype, batch size, device, seed, and artifact. A qLDPC result without those details is difficult to reproduce and should not be presented as a general threshold.

-

8. A small residual example

-

Take

-H=[110011],s=[1,0].H = \begin{bmatrix}1&1&0\\0&1&1\end{bmatrix},\qquad s = [1,0]. -

If the hard decision is [1,0,0], it already satisfies the syndrome. If BP instead proposes [0,1,0], then

-
H @ [0, 1, 0] = [1, 1]
-residual = [1, 0] + [1, 1] = [0, 1]  (mod 2)
-

Fix column 1 at its proposed value and use columns 0 and 2 as a basis. Column 2 contributes [0,1], so the repaired candidate is [0,1,1]. Multiplication gives

-
H @ [0, 1, 1] = [1, 0]  (mod 2).
-

The hard decision was not faithful; the OSD residual solve was.

-

Takeaway

-

BP-OSD is not "matching with more messages." It is a different contract for a different matrix structure. BP supplies soft information, OSD supplies an exact GF(2) repair, and logical evaluation remains a coset question. That separation is what lets QECTOR handle non-graphlike checks without pretending that hyperedges are ordinary graph edges.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/05_bp_osd_qldpc.md b/blog/05_bp_osd_qldpc.md deleted file mode 100644 index cf78125e..00000000 --- a/blog/05_bp_osd_qldpc.md +++ /dev/null @@ -1,165 +0,0 @@ -# BP-OSD for qLDPC: When Matching Stops Being the Right Abstraction - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: qLDPC, BP-OSD, belief propagation, ordered statistics, GF(2), hypergraphs - -## Abstract - -Minimum-weight matching is natural when each fault mechanism touches at most two detectors. Quantum LDPC and other non-graphlike codes do not provide that guarantee. BP-OSD is QECTOR's general GF(2) path: belief propagation supplies a reliability ordering, then ordered-statistics decoding solves a residual linear system. The design separation matters: beliefs choose a candidate representative, while the algebraic solve restores syndrome faithfulness. This post derives the log-domain update, the OSD-0/OSD-W stages, and the residual-solve theorem, then explains the numerical, batching, and claim boundaries documented in v1.0.0. - -## 1. Why hyperedges change the decoder choice - -Let a column of `H` describe one fault mechanism. If that column has weight two, it can be drawn as a graph edge between two detectors. If it has weight three or more, it is a hyperedge. Pairing its detectors independently loses the fact that one mechanism caused all of them. - -QECTOR uses the structural rule - -```text -max qubit/check degree <= 2 -> graphlike decoders may be eligible -any degree > 2 -> matching is ineligible; use BP-OSD -``` - -The BP-OSD contract is expressed for an arbitrary reachable GF(2) matrix. This is why it is the correct fallback for qLDPC, color-code, and general hypergraph inputs. - -## 2. Belief propagation in the log domain - -For each qubit `q`, the prior log-likelihood ratio is combined with messages from neighboring checks. With `m_(q->c)` and `m_(c->q)` denoting variable-to-check and check-to-variable messages, the exact sum-product check update uses - -$$ -m_{c\to q} = \operatorname{sgn}\left(\prod_{q'\in N(c)\setminus q}m_{q'\to c}\right) -\phi\left(\sum_{q'\in N(c)\setminus q}\phi(|m_{q'\to c}|)\right), -$$ - -where - -$$ -\phi(x) = -\log\left(\tanh\frac{x}{2}\right) = \log\coth\frac{x}{2}. -$$ - -The posterior reliability is - -$$ -\gamma_q = \operatorname{LLR}_{prior}(q) + \sum_{c\in N(q)}m_{c\to q}. -$$ - -The decoder hard-decodes from the signs of `gamma`. If that hard decision already satisfies `H e = s`, it can return immediately. Otherwise it passes the residual to OSD. - -QECTOR also documents min-sum as an opt-in approximation and a relay (layered) schedule in which checks are processed sequentially. These are schedule choices; they do not remove the need for the faithful post-process. - -## 3. Ordered statistics decoding - -OSD uses BP for ranking rather than treating BP's hard decision as infallible. - -1. Sort qubit columns by ascending `|gamma_q|`, so the least reliable columns are known. -2. Extract a rank-`r` independent column basis of `H` using GF(2) elimination. -3. Keep BP's hard decisions on the fixed/free portion according to the implementation's basis convention. -4. Solve the basis for the residual syndrome. -5. For OSD-W, sweep combinations among a width - - $$ - W = \max(2\,\text{osd\_order}, 6) - $$ - - of the least-reliable columns and retain the lowest-weight faithful candidate. - -OSD-0 performs one residual solve. Higher order adds a search over selected reliability perturbations. The search changes which representative is preferred; it does not change the syndrome equation every candidate must satisfy. - -## 4. The residual-solve theorem - -Let `B` be a rank-`r` column basis of `H`. Suppose the fixed columns contribute `H_fixed e_fixed`. Define - -$$ -s_{eff} = s + H_{fixed}e_{fixed} \pmod 2. -$$ - -The OSD stage solves - -$$ -H_B e_B = s_{eff} \pmod 2. -$$ - -### Theorem - -If `s` is reachable, every OSD candidate constructed from a consistent residual solve satisfies `Hc = s (mod 2)`. - -### Proof - -Reachability means `s` lies in the column space of `H`. The fixed contribution also lies in that column space, so their sum `s_eff` remains in it. Because `B` is a full-rank column basis, the residual system has a solution for every reachable residual. Reconstructing the full correction gives - -$$ -Hc = H_{fixed}e_{fixed} + H_B e_B - = H_{fixed}e_{fixed} + s_{eff} - = s \pmod 2. -$$ - -BP convergence therefore affects which candidate the decoder prefers, but not whether the OSD candidate reproduces the reachable syndrome. - -## 5. What OSD does and does not optimize - -The reliability ordering is a proxy for the probability of each error bit. OSD-W can search multiple low-reliability combinations and select a lower-weight candidate. In a degenerate quantum code, the goal is not raw-vector equality with the sampled error. The residual must land in the correct logical coset: - -$$ -c + e \in \operatorname{im}(H^T) -$$ - -for logical success. Faithfulness only establishes `c + e in ker(H)`. - -The division of labour is: - -| Stage | Question answered | -|---|---| -| BP | Which qubits look reliable or ambiguous? | -| GF(2) basis solve | Can the residual syndrome be satisfied exactly? | -| OSD-W search | Which faithful representative has the best available weight? | -| Logical scoring | Did the residual stay in the stabilizer coset? | - -## 6. Numerical stability and implementation scope - -The manual records two check-node rules, exact sum-product and min-sum, plus a relay schedule. The Rust implementation evaluates the box-plus function exactly in a small range and uses a tabulated interpolation path over a larger range. The relevant evidence is numerical-stability testing, not a universal floating-point guarantee across arbitrary hardware. - -On the Python surface, `BPOSDDecoder` exposes `bp_method` ("relay" selects the layered schedule) and an adjustable `osd_lambda`. The batch path can run BP over a batch on a usable GPU and send only non-converged shots through the exact GF(2) post-process. Two bounds apply: the published 1.0.0 wheels are CPU-only, so GPU paths are build-time feature gates whose runtime availability is reported by `cuda_is_available()`; and without a usable device the batch path falls back to NumPy with the same validity contract. The single-shot path is CPU-oriented because a GPU launch is not assumed to amortize for one syndrome. - -## 7. Complexity language that stays honest - -The manual describes the dominant terms as BP message work plus GF(2) elimination and any OSD-W search. A compact workload-level expression is - -$$ -O(I_{BP}E + r^3 + \text{OSD search work}), -$$ - -where `I_BP` is the iteration count, `E` the Tanner-graph edge count, and `r` the matrix rank. These terms explain tuning pressure; they are not a wall-clock result. - -An evaluation must state the matrix, rank, message schedule, damping or min-sum choice, OSD order, dtype, batch size, device, seed, and artifact. A qLDPC result without those details is difficult to reproduce and should not be presented as a general threshold. - -## 8. A small residual example - -Take - -$$ -H = \begin{bmatrix}1&1&0\\0&1&1\end{bmatrix},\qquad s = [1,0]. -$$ - -If the hard decision is `[1,0,0]`, it already satisfies the syndrome. If BP instead proposes `[0,1,0]`, then - -```text -H @ [0, 1, 0] = [1, 1] -residual = [1, 0] + [1, 1] = [0, 1] (mod 2) -``` - -Fix column 1 at its proposed value and use columns 0 and 2 as a basis. Column 2 contributes `[0,1]`, so the repaired candidate is `[0,1,1]`. Multiplication gives - -```text -H @ [0, 1, 1] = [1, 0] (mod 2). -``` - -The hard decision was not faithful; the OSD residual solve was. - -## Takeaway - -BP-OSD is not "matching with more messages." It is a different contract for a different matrix structure. BP supplies soft information, OSD supplies an exact GF(2) repair, and logical evaluation remains a coset question. That separation is what lets QECTOR handle non-graphlike checks without pretending that hyperedges are ordinary graph edges. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/06AmbiguityGnnNeural/index.html b/blog/06AmbiguityGnnNeural/index.html deleted file mode 100644 index 435b21dd..00000000 --- a/blog/06AmbiguityGnnNeural/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ambiguity Clustering and Learned Predecoders · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026qLDPC and AIBy Guillaume Lessard · 5 min read

Ambiguity Clustering and Learned Predecoders

Freeze confident qubits, solve ambiguous components, and add learned priors without moving the correctness proof.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: qLDPC, ambiguity clustering, GNN, neural predecoder, decoder verification

-

Abstract

-

Belief propagation can leave only a small part of a qLDPC problem uncertain, even when its global hard decision is not faithful. Ambiguity clustering exploits that: freeze confident qubits, compute the residual syndrome, and solve disconnected ambiguous components exactly when they are small. QECTOR also exposes learned predecoder surfaces that supply priors or dynamic weights. The architectural boundary matters: learned components may influence the selected correction, but the final syndrome-faithfulness gate stays algebraic and independent of training quality.

-

1. Confidence is not correctness

-

After BP, each qubit receives a posterior log-likelihood ratio gamma_q. A large magnitude means the model is confident about the bit. It does not prove the bit correct. A hard decision can still fail the syndrome equation

-He^≠s(mod2).H\hat e \ne s \pmod 2. -

The useful question is therefore not "did BP converge globally?" but "where is BP uncertain, and can that uncertainty be isolated?"

-

Choose a reliability threshold tau and partition the qubits:

-Qrel={q:∣γq∣≥τ},Q_{rel} = \{q : |\gamma_q| \ge \tau\}, -Qamb={q:∣γq∣<τ}.Q_{amb} = \{q : |\gamma_q| < \tau\}. -

Freeze the reliable set to its hard decision e_rel and compute the residual

-sres=s+Hrelerel(mod2).s_{res} = s + H_{rel}e_{rel} \pmod 2. -

If s_res is zero, the frozen assignment is already faithful. Otherwise the remaining work concentrates on the ambiguous support.

-

2. Component-wise solving

-

Build the Tanner-induced subgraph on Q_amb. When the component-separation condition holds, it decomposes into connected components C_k with disjoint column support. QECTOR's documented strategy is:

-
    -
  1. Solve a component exactly by enumeration when its size is at most the configured K_max, documented as 12 by default.
  2. -
  3. Use a restricted OSD-0 solve for larger components.
  4. -
  5. Escalate if a component cannot satisfy its residual syndrome.
  6. -
  7. XOR the component corrections with the frozen reliable assignment.
  8. -
-

The exact path searches the local space, not the full 2^n space. It is attractive when BP confidence leaves small disconnected islands. It is not a promise that every qLDPC instance decomposes into small components.

-

3. Faithfulness theorem

-

Let each component solver return e_k satisfying

-HCkek=sres,k(mod2).H_{C_k}e_k = s_{res,k} \pmod 2. -

Construct

-c=erel+⨁kek.c = e_{rel} + \bigoplus_k e_k. -

Because the component supports are disjoint and their residual equations sum to s_res,

-Hc=Hrelerel+Hambeamb=Hrelerel+sres=Hrelerel+(s+Hrelerel)=s(mod2).\begin{aligned} -Hc - &= H_{rel}e_{rel} + H_{amb}e_{amb} \\ - &= H_{rel}e_{rel} + s_{res} \\ - &= H_{rel}e_{rel} + (s + H_{rel}e_{rel}) \\ - &= s \pmod 2. -\end{aligned} -

The threshold tau changes which representative is frozen and which work is enumerated. It does not change the algebraic conclusion, as long as every component residual is solved or escalated.

-

4. Logical scoring remains a separate layer

-

Faithfulness implies c + e lies in ker(H). It does not identify whether that residual is a stabilizer or a logical operator. For a stabilizer code, the logical criterion remains

-c+e∈im⁡(HT)c + e \in \operatorname{im}(H^T) -

for success. An exact local component solve can still pick a globally nontrivial logical coset when the code's logical structure crosses a component boundary. That is why the manual calls the method faithful and exact within clusters, but makes no universal logical-accuracy claim for any learned or thresholded configuration.

-

5. Learned predecoders

-

The manual describes two research-grade surfaces, available in the package as NeuralPredecoder and GNNPredecoder:

-
    -
  • NeuralPredecoder: a small leaky-ReLU MLP trained with SGD.
  • -
  • GNNPredecoder: a message-passing network with a softplus edge readout that predicts dynamic per-edge weights.
  • -
-
from qector_decoder_v3 import NeuralPredecoder, GNNPredecoder
-

The learned output can influence BP priors, reliability ordering, or matching weights. A positive softplus readout is useful when the downstream matching path expects non-negative edge costs. But training data, architecture, calibration, and distribution shift all affect the result.

-

The safe statement is therefore:

-
-

Learned surfaces are training-dependent research paths. Their accuracy is not claimed by the v1.0.0 manual without a surviving artifact. Their returned correction still passes the same Hc = s gate.

-
-

This distinction serves both researchers and product teams. A model can be a useful prior without becoming the authority on correctness.

-

6. A practical failure mode

-

Suppose BP marks most qubits reliable but freezes one wrong bit. That bit contributes a nonzero term to H_rel e_rel, so the residual syndrome records the mistake. A component solver that ignores the residual may return a plausible-looking vector with the wrong boundary. A solver that receives s_res can repair it, and the final matrix product exposes any implementation bug immediately.

-

The residual is not optional bookkeeping. It is the interface between a probabilistic front end and a deterministic algebraic back end.

-

7. Choosing a threshold

-

Raising tau makes more qubits ambiguous. That can improve the chance that the frozen set is reliable, but it also grows component sizes and enumeration cost. Lowering tau freezes more qubits and may leave a harder residual. The manual prescribes no universal threshold.

-

A responsible experiment should record:

-
code family and matrix
-training or calibration artifact
-noise model and physical error rate
-tau and K_max
-component-size distribution
-faithfulness failures and escalations
-logical-observable results
-seed, environment, and raw artifact hash
-

A threshold tuned on one code family should not be described as a general decoder law.

-

8. Where this fits in routing

-

Ambiguity clustering is a middle path between a full BP-OSD solve and an unverified learned guess:

-
BP reliabilities
-      |
-      v
-freeze reliable bits -> residual -> solve ambiguous components
-      |
-      v
-verify H @ correction == syndrome
-      |
-      v
-score logical observables or escalate
-

The routing layer may use a learned predecoder to choose weights or priors, but structural eligibility and syndrome verification stay deterministic. That separation lets a learned configuration be compared against an unlearned baseline without changing the correctness test.

-

Takeaway

-

Ambiguity clustering localizes uncertainty; it does not redefine correctness. Learned priors can make a decoder more informed, and exact local solves can reduce unnecessary global work, but both stay subordinate to the residual equation and the logical-coset metric. That is how to add AI to QEC without moving the proof goalposts.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/06_ambiguity_gnn_neural.md b/blog/06_ambiguity_gnn_neural.md deleted file mode 100644 index 9d8c715a..00000000 --- a/blog/06_ambiguity_gnn_neural.md +++ /dev/null @@ -1,159 +0,0 @@ -# Ambiguity Clustering and Learned Predecoders: Adding AI Without Moving the Proof - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: qLDPC, ambiguity clustering, GNN, neural predecoder, decoder verification - -## Abstract - -Belief propagation can leave only a small part of a qLDPC problem uncertain, even when its global hard decision is not faithful. Ambiguity clustering exploits that: freeze confident qubits, compute the residual syndrome, and solve disconnected ambiguous components exactly when they are small. QECTOR also exposes learned predecoder surfaces that supply priors or dynamic weights. The architectural boundary matters: learned components may influence the selected correction, but the final syndrome-faithfulness gate stays algebraic and independent of training quality. - -## 1. Confidence is not correctness - -After BP, each qubit receives a posterior log-likelihood ratio `gamma_q`. A large magnitude means the model is confident about the bit. It does not prove the bit correct. A hard decision can still fail the syndrome equation - -$$ -H\hat e \ne s \pmod 2. -$$ - -The useful question is therefore not "did BP converge globally?" but "where is BP uncertain, and can that uncertainty be isolated?" - -Choose a reliability threshold `tau` and partition the qubits: - -$$ -Q_{rel} = \{q : |\gamma_q| \ge \tau\}, -$$ - -$$ -Q_{amb} = \{q : |\gamma_q| < \tau\}. -$$ - -Freeze the reliable set to its hard decision `e_rel` and compute the residual - -$$ -s_{res} = s + H_{rel}e_{rel} \pmod 2. -$$ - -If `s_res` is zero, the frozen assignment is already faithful. Otherwise the remaining work concentrates on the ambiguous support. - -## 2. Component-wise solving - -Build the Tanner-induced subgraph on `Q_amb`. When the component-separation condition holds, it decomposes into connected components `C_k` with disjoint column support. QECTOR's documented strategy is: - -1. Solve a component exactly by enumeration when its size is at most the configured `K_max`, documented as 12 by default. -2. Use a restricted OSD-0 solve for larger components. -3. Escalate if a component cannot satisfy its residual syndrome. -4. XOR the component corrections with the frozen reliable assignment. - -The exact path searches the local space, not the full `2^n` space. It is attractive when BP confidence leaves small disconnected islands. It is not a promise that every qLDPC instance decomposes into small components. - -## 3. Faithfulness theorem - -Let each component solver return `e_k` satisfying - -$$ -H_{C_k}e_k = s_{res,k} \pmod 2. -$$ - -Construct - -$$ -c = e_{rel} + \bigoplus_k e_k. -$$ - -Because the component supports are disjoint and their residual equations sum to `s_res`, - -$$ -\begin{aligned} -Hc - &= H_{rel}e_{rel} + H_{amb}e_{amb} \\ - &= H_{rel}e_{rel} + s_{res} \\ - &= H_{rel}e_{rel} + (s + H_{rel}e_{rel}) \\ - &= s \pmod 2. -\end{aligned} -$$ - -The threshold `tau` changes which representative is frozen and which work is enumerated. It does not change the algebraic conclusion, as long as every component residual is solved or escalated. - -## 4. Logical scoring remains a separate layer - -Faithfulness implies `c + e` lies in `ker(H)`. It does not identify whether that residual is a stabilizer or a logical operator. For a stabilizer code, the logical criterion remains - -$$ -c + e \in \operatorname{im}(H^T) -$$ - -for success. An exact local component solve can still pick a globally nontrivial logical coset when the code's logical structure crosses a component boundary. That is why the manual calls the method faithful and exact within clusters, but makes no universal logical-accuracy claim for any learned or thresholded configuration. - -## 5. Learned predecoders - -The manual describes two research-grade surfaces, available in the package as `NeuralPredecoder` and `GNNPredecoder`: - -- `NeuralPredecoder`: a small leaky-ReLU MLP trained with SGD. -- `GNNPredecoder`: a message-passing network with a softplus edge readout that predicts dynamic per-edge weights. - -```python -from qector_decoder_v3 import NeuralPredecoder, GNNPredecoder -``` - -The learned output can influence BP priors, reliability ordering, or matching weights. A positive softplus readout is useful when the downstream matching path expects non-negative edge costs. But training data, architecture, calibration, and distribution shift all affect the result. - -The safe statement is therefore: - -> Learned surfaces are training-dependent research paths. Their accuracy is not claimed by the v1.0.0 manual without a surviving artifact. Their returned correction still passes the same `Hc = s` gate. - -This distinction serves both researchers and product teams. A model can be a useful prior without becoming the authority on correctness. - -## 6. A practical failure mode - -Suppose BP marks most qubits reliable but freezes one wrong bit. That bit contributes a nonzero term to `H_rel e_rel`, so the residual syndrome records the mistake. A component solver that ignores the residual may return a plausible-looking vector with the wrong boundary. A solver that receives `s_res` can repair it, and the final matrix product exposes any implementation bug immediately. - -The residual is not optional bookkeeping. It is the interface between a probabilistic front end and a deterministic algebraic back end. - -## 7. Choosing a threshold - -Raising `tau` makes more qubits ambiguous. That can improve the chance that the frozen set is reliable, but it also grows component sizes and enumeration cost. Lowering `tau` freezes more qubits and may leave a harder residual. The manual prescribes no universal threshold. - -A responsible experiment should record: - -```text -code family and matrix -training or calibration artifact -noise model and physical error rate -tau and K_max -component-size distribution -faithfulness failures and escalations -logical-observable results -seed, environment, and raw artifact hash -``` - -A threshold tuned on one code family should not be described as a general decoder law. - -## 8. Where this fits in routing - -Ambiguity clustering is a middle path between a full BP-OSD solve and an unverified learned guess: - -```text -BP reliabilities - | - v -freeze reliable bits -> residual -> solve ambiguous components - | - v -verify H @ correction == syndrome - | - v -score logical observables or escalate -``` - -The routing layer may use a learned predecoder to choose weights or priors, but structural eligibility and syndrome verification stay deterministic. That separation lets a learned configuration be compared against an unlearned baseline without changing the correctness test. - -## Takeaway - -Ambiguity clustering localizes uncertainty; it does not redefine correctness. Learned priors can make a decoder more informed, and exact local solves can reduce unnecessary global work, but both stay subordinate to the residual equation and the logical-coset metric. That is how to add AI to QEC without moving the proof goalposts. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/07SpaceTimeDecoder/index.html b/blog/07SpaceTimeDecoder/index.html deleted file mode 100644 index c2827e0a..00000000 --- a/blog/07SpaceTimeDecoder/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Space-Time Decoding with Noisy Measurements · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026Multi-RoundBy Guillaume Lessard · 5 min read

Space-Time Decoding with Noisy Measurements

Detector differencing, temporal and spatial weights, measurement glitches, and streaming scope.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: space-time decoding, detector error model, measurement noise, streaming QEC

-

Abstract

-

With noisy syndrome extraction, one round of measurements is not the same object as a clean syndrome. Data faults and measurement faults must be represented together so the decoder can decide whether a detection event is spatial or temporal. QECTOR's SpaceTimeDecoder lifts the problem into a (2+1)-dimensional detector lattice; StreamingDecoder and SlidingWindowDecoder provide separate multi-round primitives. This post derives detector differencing, anisotropic edge weights, the lifted faithfulness equation, a measurement-glitch example, and the manual's explicit boundary on Python streaming claims.

-

1. Raw syndromes are histories

-

Let s_(c,t) be the observed syndrome bit for check c at round t. It mixes data-error effects with measurement noise. Instead of decoding each round as an isolated two-dimensional problem, form detector differences:

-dc,t=sc,t+sc,t−1(mod2),d_{c,t} = s_{c,t} + s_{c,t-1} \pmod 2, -

with the initial layer handled by the chosen boundary convention.

-

The difference records changes rather than absolute values. A persistent data fault creates events at the temporal boundaries of its interval. A measurement flip that appears and then disappears creates a pair of events at the same detector in adjacent layers. The decoder can then prefer a time-like explanation when the measurement prior makes it more likely.

-

The detector error model (DEM) is the object that enumerates these mechanisms. QECTOR exposes it through a small verified API:

-
from qector_decoder_v3 import dem
-
-model = dem.from_stim(circuit)        # detector error model
-decoder = model.make_decoder()        # routed backend
-if model.is_graphlike:
-    graph = model.collapse_to_graph() # MWPM-ready form
-

2. The lifted parity-check problem

-

The lifted detector matrix H_ST contains both data-fault columns and measurement-fault columns. Rows represent detectors at particular time layers. A space-like column changes detector locations according to the base code; a time-like column connects the same detector across adjacent rounds.

-

The correction is now a space-time vector c_ST, and the correctness equation is

-HSTcST=d(mod2).H_{ST}c_{ST} = d \pmod 2. -

For graphlike lifted models, paths in the detector lattice have the same boundary property as paths in the two-dimensional graph. The SpaceTimeDecoder therefore solves one matching problem over all rounds, instead of making independent decisions that confuse measurement faults with data faults.

-

3. Anisotropic weights

-

Data and measurement mechanisms need not share a probability. Assign

-wspace=log⁡(1−pdatapdata),w_{space} = \log\left(\frac{1-p_{data}}{p_{data}}\right), -

and

-wtime=log⁡(1−pmeaspmeas).w_{time} = \log\left(\frac{1-p_{meas}}{p_{meas}}\right). -

The decoder compares path costs under these priors. If measurement faults are more likely than data faults, a time-like path may be cheaper. If the measurement channel is cleaner, spatial paths are preferred. The weights belong to the detector model, not to a tuning knob.

-

For example, p_data = 0.01 gives w_space around 4.595, while p_meas = 0.03 gives w_time around 3.476. The example shows the direction of the preference. It is not a claim about logical-error performance.

-

4. A glitch that must not become a data correction

-

Assume clean rounds 1 and 2. At round 3, check 2 reports a spurious flip. At round 4 the measurement returns to its previous value. Differencing produces two detector events:

-
appearance at (check 2, round 3)
-disappearance at (check 2, round 4)
-

The natural explanation is a pair of time-like edges. The projected spatial correction is empty because no data qubit changed. This is the regression behaviour described in the manual: a lone measurement glitch that reverts on the next round must not corrupt the spatial correction.

-

5. The lifted faithfulness theorem

-

Let d be the detector-event vector. If the decoder returns a space-time correction with

-HSTcST=d,H_{ST}c_{ST} = d, -

then every detector event is reproduced by the correction. Projecting away the measurement columns yields a spatial correction whose final-round syndrome differs from the raw final measurement only by the final-round measurement-error boundary term.

-

That projection statement is a property of the lifted chain complex. It is not a claim that measurement noise has been eliminated from the physical device. The logical test stays separate: once the final spatial correction is formed, its residual must be scored in the appropriate logical-observable or stabilizer quotient.

-

6. Full space-time versus streaming primitives

-

These names describe different scopes:

- - - - - - - - - - - - - - - - - - - - - - - - - -
SurfaceDocumented role
SpaceTimeDecoderFull lifted detector-lattice decoding across T rounds
StreamingDecoderRust streaming primitive with accumulated history
SlidingWindowDecoderRust window with decay weighting
Python streaming layerPer-round/windowed workflow for batching and telemetry; not full 3D matching by itself
-

For a decayed window, the manual gives a geometric truncation bound. If 0 <= lambda < 1,

-∥SW−Sinfty∥1≤λW1−λ∥s∥infty.\|S_W-S_{infty}\|_1 \leq \frac{\lambda^W}{1-\lambda}\|s\|_{infty}. -

The expression describes the history approximation. It does not by itself establish a numerical logical-fidelity loss or a hardware-control guarantee.

-

7. Choosing between offline and online paths

-

Use the full lifted decoder when the experiment needs a circuit-level or multi-round decision that consumes the complete detector history. Use a streaming primitive when the workflow needs bounded state, incremental commits, or telemetry, and can accept the stated windowing semantics.

-

In either case, record:

-
number of rounds and boundary convention
-data and measurement error priors
-detector construction and DEM settings
-decoder family and weight mode
-window length and decay factor, if applicable
-observable scoring, seed, environment, and artifact hash
-

Do not describe a per-round Python window as full circuit-level space-time matching. The manual explicitly reserves that claim for the lifted SpaceTimeDecoder path.

-

8. Why this matters to hardware teams

-

The detector lattice is an interface between measurement electronics and decoding software. It lets a decoder consume repeated stabilizer outcomes without forcing the hardware layer to declare every event a data fault. It also makes priors visible: calibration data can inform time-like and space-like weights, while the algebraic gate verifies the emitted detector correction.

-

This separation supports heterogeneous systems. The physical layer produces rounds, the DEM describes mechanisms, the space-time decoder handles correlated history, and the validation harness scores observables under a named noise model.

-

Takeaway

-

Noisy measurements do not invalidate syndrome decoding; they change the matrix. XOR differencing turns a history into detector events, anisotropic weights express the relative fault priors, and the lifted equation preserves the same syndrome-faithfulness idea in one higher dimension. Streaming is useful, but its scope must be stated precisely rather than marketed as full circuit-level matching.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/07_space_time_decoder.md b/blog/07_space_time_decoder.md deleted file mode 100644 index 4bb466a4..00000000 --- a/blog/07_space_time_decoder.md +++ /dev/null @@ -1,137 +0,0 @@ -# Space-Time Decoding: Letting the Decoder See Measurement Errors - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: space-time decoding, detector error model, measurement noise, streaming QEC - -## Abstract - -With noisy syndrome extraction, one round of measurements is not the same object as a clean syndrome. Data faults and measurement faults must be represented together so the decoder can decide whether a detection event is spatial or temporal. QECTOR's `SpaceTimeDecoder` lifts the problem into a `(2+1)`-dimensional detector lattice; `StreamingDecoder` and `SlidingWindowDecoder` provide separate multi-round primitives. This post derives detector differencing, anisotropic edge weights, the lifted faithfulness equation, a measurement-glitch example, and the manual's explicit boundary on Python streaming claims. - -## 1. Raw syndromes are histories - -Let `s_(c,t)` be the observed syndrome bit for check `c` at round `t`. It mixes data-error effects with measurement noise. Instead of decoding each round as an isolated two-dimensional problem, form detector differences: - -$$ -d_{c,t} = s_{c,t} + s_{c,t-1} \pmod 2, -$$ - -with the initial layer handled by the chosen boundary convention. - -The difference records changes rather than absolute values. A persistent data fault creates events at the temporal boundaries of its interval. A measurement flip that appears and then disappears creates a pair of events at the same detector in adjacent layers. The decoder can then prefer a time-like explanation when the measurement prior makes it more likely. - -The detector error model (DEM) is the object that enumerates these mechanisms. QECTOR exposes it through a small verified API: - -```python -from qector_decoder_v3 import dem - -model = dem.from_stim(circuit) # detector error model -decoder = model.make_decoder() # routed backend -if model.is_graphlike: - graph = model.collapse_to_graph() # MWPM-ready form -``` - -## 2. The lifted parity-check problem - -The lifted detector matrix `H_ST` contains both data-fault columns and measurement-fault columns. Rows represent detectors at particular time layers. A space-like column changes detector locations according to the base code; a time-like column connects the same detector across adjacent rounds. - -The correction is now a space-time vector `c_ST`, and the correctness equation is - -$$ -H_{ST}c_{ST} = d \pmod 2. -$$ - -For graphlike lifted models, paths in the detector lattice have the same boundary property as paths in the two-dimensional graph. The `SpaceTimeDecoder` therefore solves one matching problem over all rounds, instead of making independent decisions that confuse measurement faults with data faults. - -## 3. Anisotropic weights - -Data and measurement mechanisms need not share a probability. Assign - -$$ -w_{space} = \log\left(\frac{1-p_{data}}{p_{data}}\right), -$$ - -and - -$$ -w_{time} = \log\left(\frac{1-p_{meas}}{p_{meas}}\right). -$$ - -The decoder compares path costs under these priors. If measurement faults are more likely than data faults, a time-like path may be cheaper. If the measurement channel is cleaner, spatial paths are preferred. The weights belong to the detector model, not to a tuning knob. - -For example, `p_data = 0.01` gives `w_space` around `4.595`, while `p_meas = 0.03` gives `w_time` around `3.476`. The example shows the direction of the preference. It is not a claim about logical-error performance. - -## 4. A glitch that must not become a data correction - -Assume clean rounds 1 and 2. At round 3, check 2 reports a spurious flip. At round 4 the measurement returns to its previous value. Differencing produces two detector events: - -```text -appearance at (check 2, round 3) -disappearance at (check 2, round 4) -``` - -The natural explanation is a pair of time-like edges. The projected spatial correction is empty because no data qubit changed. This is the regression behaviour described in the manual: a lone measurement glitch that reverts on the next round must not corrupt the spatial correction. - -## 5. The lifted faithfulness theorem - -Let `d` be the detector-event vector. If the decoder returns a space-time correction with - -$$ -H_{ST}c_{ST} = d, -$$ - -then every detector event is reproduced by the correction. Projecting away the measurement columns yields a spatial correction whose final-round syndrome differs from the raw final measurement only by the final-round measurement-error boundary term. - -That projection statement is a property of the lifted chain complex. It is not a claim that measurement noise has been eliminated from the physical device. The logical test stays separate: once the final spatial correction is formed, its residual must be scored in the appropriate logical-observable or stabilizer quotient. - -## 6. Full space-time versus streaming primitives - -These names describe different scopes: - -| Surface | Documented role | -|---|---| -| `SpaceTimeDecoder` | Full lifted detector-lattice decoding across `T` rounds | -| `StreamingDecoder` | Rust streaming primitive with accumulated history | -| `SlidingWindowDecoder` | Rust window with decay weighting | -| Python streaming layer | Per-round/windowed workflow for batching and telemetry; not full 3D matching by itself | - -For a decayed window, the manual gives a geometric truncation bound. If `0 <= lambda < 1`, - -$$ -\|S_W-S_{infty}\|_1 \leq \frac{\lambda^W}{1-\lambda}\|s\|_{infty}. -$$ - -The expression describes the history approximation. It does not by itself establish a numerical logical-fidelity loss or a hardware-control guarantee. - -## 7. Choosing between offline and online paths - -Use the full lifted decoder when the experiment needs a circuit-level or multi-round decision that consumes the complete detector history. Use a streaming primitive when the workflow needs bounded state, incremental commits, or telemetry, and can accept the stated windowing semantics. - -In either case, record: - -```text -number of rounds and boundary convention -data and measurement error priors -detector construction and DEM settings -decoder family and weight mode -window length and decay factor, if applicable -observable scoring, seed, environment, and artifact hash -``` - -Do not describe a per-round Python window as full circuit-level space-time matching. The manual explicitly reserves that claim for the lifted `SpaceTimeDecoder` path. - -## 8. Why this matters to hardware teams - -The detector lattice is an interface between measurement electronics and decoding software. It lets a decoder consume repeated stabilizer outcomes without forcing the hardware layer to declare every event a data fault. It also makes priors visible: calibration data can inform time-like and space-like weights, while the algebraic gate verifies the emitted detector correction. - -This separation supports heterogeneous systems. The physical layer produces rounds, the DEM describes mechanisms, the space-time decoder handles correlated history, and the validation harness scores observables under a named noise model. - -## Takeaway - -Noisy measurements do not invalidate syndrome decoding; they change the matrix. XOR differencing turns a history into detector events, anisotropic weights express the relative fault priors, and the lifted equation preserves the same syndrome-faithfulness idea in one higher dimension. Streaming is useful, but its scope must be stated precisely rather than marketed as full circuit-level matching. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/08AutoDecoderCascade/index.html b/blog/08AutoDecoderCascade/index.html deleted file mode 100644 index 2c00b57c..00000000 --- a/blog/08AutoDecoderCascade/index.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Routing, Cascades, and Two-Stage CSS Decoding · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026OrchestrationBy Guillaume Lessard · 5 min read

Routing, Cascades, and Two-Stage CSS Decoding

Structural backend eligibility, fallback verification, hybrid acceptance, and CSS sector feedforward.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: decoder routing, cascade decoding, CSS codes, orchestration, QEC systems

-

Abstract

-

A quantum error-correction stack rarely has one workload. It may receive a small code, a large batch, a graphlike surface-code syndrome, a qLDPC hypergraph, or two correlated CSS sectors. QECTOR's orchestration layer chooses an eligible backend, verifies the result, and escalates when the chosen path is unsuitable. This post explains the structural routing guard, the documented fallback sequence, the hybrid cascade acceptance criterion, two-stage CSS feedforward, lookup tables, and the limits of an AutoDecoder policy. The class names used below are those of the shipped package: AutoDecoder, NativeAutoDecoder, HybridCascadeDecoder, and TwoStageDecoder.

-

1. Routing is a validity decision

-

The first routing question is not speed. It is whether a decoder family is valid for the matrix.

-
if any qubit touches more than two checks:
-    matching and Union-Find are ineligible
-    route to BP-OSD
-else:
-    graphlike decoders may be considered
-

This check is made from the actual check_to_qubits structure, not from a label supplied by a caller. A graphlike algorithm applied to a hypergraph is not a slower version of the correct algorithm; it is a different problem.

-

2. Policy inputs

-

The documented recommendation policy can consider:

-
    -
  • code family and topology;
  • -
  • distance and qubit/check counts;
  • -
  • batch size;
  • -
  • priority such as accuracy, speed, or balanced operation;
  • -
  • graphlike eligibility.
  • -
-

For graphlike inputs, an accuracy priority can select exact Blossom for small or moderate instances and Sparse Blossom for larger ones. A speed priority can select Fast Union-Find or a batch path. For non-graphlike inputs, BP-OSD is forced regardless of the supplied family label.

-

The policy is a recommendation. The backend contract and post-decode syndrome verification are the safety mechanisms.

-

3. The fallback controller

-

The Python AutoDecoder controller tries progressively safer execution paths and verifies the syndrome after each tier. The documented sequence runs through native routing, CUDA, OpenCL, Rayon batch, CPU batch, single-thread execution, Blossom, and lookup-table paths, followed by BP-OSD as the arbitrary-GF(2) fallback. A zero correction is documented only as a last-resort return after all verification paths fail; it is not a successful decode claim.

-

Two failure classes stay distinct:

-
    -
  • a backend may be unavailable because of hardware or licensing;
  • -
  • a backend may return a result that is incomplete or fails Hc = s.
  • -
-

GPU failures disable the GPU path for subsequent attempts in the controller, while CPU paths may be retried for transient failures. Every route still inherits the contract of the selected backend.

-

4. The hybrid cascade

-

HybridCascadeDecoder uses a cheap faithful pre-filter and an expensive fallback. Let c_UF be the Fast Union-Find result and W_budget a declared weight budget. The acceptance criterion is

-HcUF=s(mod2)and∣cUF∣≤Wbudget.Hc_{UF} = s \pmod 2 -\quad\text{and}\quad -|c_{UF}| \le W_{budget}. -

If both conditions pass, the correction is accepted. Otherwise the controller escalates to Blossom for a graphlike workload, or to BP-OSD for a non-graphlike workload or deadline path.

-

The parity check is not redundant even though UF is documented as faithful on supported graphs. It turns the cascade into a self-checking boundary and catches integration errors. The weight budget is a policy choice; it must be recorded with the workload, not treated as a universal constant.

-

The cascade preserves syndrome faithfulness when the pre-filter is faithful and the fallback is faithful. It does not by itself prove that accepted UF corrections match exact MWPM in logical-coset quality on every noise model.

-

5. Two-stage CSS decoding

-

Independent X and Z decoders assume that sector errors are independent. Depolarizing noise contains Y errors, which couple the sectors. TwoStageDecoder documents a feedforward construction:

-cX←Decode⁡X(sX),c_X \leftarrow \operatorname{Decode}_X(s_X), -sZ′=sZ+HZ,XcX(mod2),s'_Z = s_Z + H_{Z,X}c_X \pmod 2, -cZ←Decode⁡Z(sZ′),c_Z \leftarrow \operatorname{Decode}_Z(s'_Z), -

and c = c_X + c_Z.

-

If both sector decoders are faithful on their actual inputs, stage two cancels the induced cross-coupling:

-HZ(cX+cZ)=HZ,XcX+sZ′=sZ(mod2).H_Z(c_X+c_Z) = H_{Z,X}c_X + s'_Z = s_Z \pmod 2. -

Together with H_X c_X = s_X, the joint correction is faithful. The theorem establishes the algebraic composition, not a universal threshold improvement over independent decoding.

-

6. Lookup tables and small codes

-

For sufficiently small codes, LookupTableDecoder can enumerate stored syndrome-to-correction entries. The manual scopes it to small codes, with exhaustive entries for n_qubits <= 20 and a Union-Find fallback. The lookup is exact for entries that are actually stored; it is not a general solution for arbitrary code sizes.

-

The table must still be generated and validated against the parity-check map. A fast array access is not evidence unless the stored correction satisfies the syndrome equation for its key.

-

7. Read routing decisions as contracts

-

A useful diagnostic record looks like this:

-
input shape: checks, qubits, syndrome, batch
-structural class: graphlike or hypergraph
-priority: accuracy, speed, or balanced
-selected backend and fallback order
-weights and noise model
-license/hardware availability
-verification result: H @ c == s
-logical score, if a sampled error/observable is available
-

This record makes a routing decision explainable. It also prevents an accidental benchmark comparison from mixing a graphlike path with a hypergraph path, or an unweighted path with a DEM-weighted path.

-

8. Licensing is separate from hardware availability

-

The manual documents Community, Pro, and Enterprise distance caps of 7, 19, and 63, with GPU batch paths gated by Enterprise. Token verification is offline, performed in the Rust core, using Ed25519. is_available() reports hardware; it does not grant a license tier. These are separate decisions and should stay separate in diagnostics and documentation.

-

License input is explicit: keys arrive through set_license_key() (read back with get_license_info()), through the QECTOR_LICENSE_KEY or QECTOR_LICENSE_FILE environment variables, or through ~/.qector/license.key. QECTOR_ENFORCE=1 and QECTOR_SILENT=1 control strictness and banner output.

-

9. The right claim about orchestration

-

An orchestrator can provide a common API, structural eligibility checks, fallback behaviour, and verification. It cannot make every backend exact, every workload comparable, or every hardware path production-ready. The manual explicitly classifies network surfaces as provisional and requires deployment review for authentication, rate limits, TLS, audit logging, and resource quotas.

-

The live ecosystem also ships the Workbench (v1.0.7): 19 kinds (17 concrete configurations plus AutoDecoder and the Auto Router), 85 MCP tools, and 10 code families. Those network surfaces remain provisional under the same deployment review.

-

Takeaway

-

Good routing is not a table of speed slogans. It is a sequence of eligibility checks, policy choices, backend contracts, and verification gates. AutoDecoder chooses a path, Cascade limits the cost of escalation, and TwoStage handles CSS cross-talk. The final authority remains the actual matrix and the equation Hc = s.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/08_autodecoder_cascade.md b/blog/08_autodecoder_cascade.md deleted file mode 100644 index 2447be39..00000000 --- a/blog/08_autodecoder_cascade.md +++ /dev/null @@ -1,135 +0,0 @@ -# Routing QEC Workloads: AutoDecoder, Cascades, and Two-Stage CSS Decoding - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: decoder routing, cascade decoding, CSS codes, orchestration, QEC systems - -## Abstract - -A quantum error-correction stack rarely has one workload. It may receive a small code, a large batch, a graphlike surface-code syndrome, a qLDPC hypergraph, or two correlated CSS sectors. QECTOR's orchestration layer chooses an eligible backend, verifies the result, and escalates when the chosen path is unsuitable. This post explains the structural routing guard, the documented fallback sequence, the hybrid cascade acceptance criterion, two-stage CSS feedforward, lookup tables, and the limits of an `AutoDecoder` policy. The class names used below are those of the shipped package: `AutoDecoder`, `NativeAutoDecoder`, `HybridCascadeDecoder`, and `TwoStageDecoder`. - -## 1. Routing is a validity decision - -The first routing question is not speed. It is whether a decoder family is valid for the matrix. - -```text -if any qubit touches more than two checks: - matching and Union-Find are ineligible - route to BP-OSD -else: - graphlike decoders may be considered -``` - -This check is made from the actual `check_to_qubits` structure, not from a label supplied by a caller. A graphlike algorithm applied to a hypergraph is not a slower version of the correct algorithm; it is a different problem. - -## 2. Policy inputs - -The documented recommendation policy can consider: - -- code family and topology; -- distance and qubit/check counts; -- batch size; -- priority such as accuracy, speed, or balanced operation; -- graphlike eligibility. - -For graphlike inputs, an accuracy priority can select exact Blossom for small or moderate instances and Sparse Blossom for larger ones. A speed priority can select Fast Union-Find or a batch path. For non-graphlike inputs, BP-OSD is forced regardless of the supplied family label. - -The policy is a recommendation. The backend contract and post-decode syndrome verification are the safety mechanisms. - -## 3. The fallback controller - -The Python `AutoDecoder` controller tries progressively safer execution paths and verifies the syndrome after each tier. The documented sequence runs through native routing, CUDA, OpenCL, Rayon batch, CPU batch, single-thread execution, Blossom, and lookup-table paths, followed by BP-OSD as the arbitrary-GF(2) fallback. A zero correction is documented only as a last-resort return after all verification paths fail; it is not a successful decode claim. - -Two failure classes stay distinct: - -- a backend may be unavailable because of hardware or licensing; -- a backend may return a result that is incomplete or fails `Hc = s`. - -GPU failures disable the GPU path for subsequent attempts in the controller, while CPU paths may be retried for transient failures. Every route still inherits the contract of the selected backend. - -## 4. The hybrid cascade - -`HybridCascadeDecoder` uses a cheap faithful pre-filter and an expensive fallback. Let `c_UF` be the Fast Union-Find result and `W_budget` a declared weight budget. The acceptance criterion is - -$$ -Hc_{UF} = s \pmod 2 -\quad\text{and}\quad -|c_{UF}| \le W_{budget}. -$$ - -If both conditions pass, the correction is accepted. Otherwise the controller escalates to Blossom for a graphlike workload, or to BP-OSD for a non-graphlike workload or deadline path. - -The parity check is not redundant even though UF is documented as faithful on supported graphs. It turns the cascade into a self-checking boundary and catches integration errors. The weight budget is a policy choice; it must be recorded with the workload, not treated as a universal constant. - -The cascade preserves syndrome faithfulness when the pre-filter is faithful and the fallback is faithful. It does not by itself prove that accepted UF corrections match exact MWPM in logical-coset quality on every noise model. - -## 5. Two-stage CSS decoding - -Independent X and Z decoders assume that sector errors are independent. Depolarizing noise contains Y errors, which couple the sectors. `TwoStageDecoder` documents a feedforward construction: - -$$ -c_X \leftarrow \operatorname{Decode}_X(s_X), -$$ - -$$ -s'_Z = s_Z + H_{Z,X}c_X \pmod 2, -$$ - -$$ -c_Z \leftarrow \operatorname{Decode}_Z(s'_Z), -$$ - -and `c = c_X + c_Z`. - -If both sector decoders are faithful on their actual inputs, stage two cancels the induced cross-coupling: - -$$ -H_Z(c_X+c_Z) = H_{Z,X}c_X + s'_Z = s_Z \pmod 2. -$$ - -Together with `H_X c_X = s_X`, the joint correction is faithful. The theorem establishes the algebraic composition, not a universal threshold improvement over independent decoding. - -## 6. Lookup tables and small codes - -For sufficiently small codes, `LookupTableDecoder` can enumerate stored syndrome-to-correction entries. The manual scopes it to small codes, with exhaustive entries for `n_qubits <= 20` and a Union-Find fallback. The lookup is exact for entries that are actually stored; it is not a general solution for arbitrary code sizes. - -The table must still be generated and validated against the parity-check map. A fast array access is not evidence unless the stored correction satisfies the syndrome equation for its key. - -## 7. Read routing decisions as contracts - -A useful diagnostic record looks like this: - -```text -input shape: checks, qubits, syndrome, batch -structural class: graphlike or hypergraph -priority: accuracy, speed, or balanced -selected backend and fallback order -weights and noise model -license/hardware availability -verification result: H @ c == s -logical score, if a sampled error/observable is available -``` - -This record makes a routing decision explainable. It also prevents an accidental benchmark comparison from mixing a graphlike path with a hypergraph path, or an unweighted path with a DEM-weighted path. - -## 8. Licensing is separate from hardware availability - -The manual documents Community, Pro, and Enterprise distance caps of 7, 19, and 63, with GPU batch paths gated by Enterprise. Token verification is offline, performed in the Rust core, using Ed25519. `is_available()` reports hardware; it does not grant a license tier. These are separate decisions and should stay separate in diagnostics and documentation. - -License input is explicit: keys arrive through `set_license_key()` (read back with `get_license_info()`), through the `QECTOR_LICENSE_KEY` or `QECTOR_LICENSE_FILE` environment variables, or through `~/.qector/license.key`. `QECTOR_ENFORCE=1` and `QECTOR_SILENT=1` control strictness and banner output. - -## 9. The right claim about orchestration - -An orchestrator can provide a common API, structural eligibility checks, fallback behaviour, and verification. It cannot make every backend exact, every workload comparable, or every hardware path production-ready. The manual explicitly classifies network surfaces as provisional and requires deployment review for authentication, rate limits, TLS, audit logging, and resource quotas. - -The live ecosystem also ships the Workbench (v1.0.7): 19 kinds (17 concrete configurations plus AutoDecoder and the Auto Router), 85 MCP tools, and 10 code families. Those network surfaces remain provisional under the same deployment review. - -## Takeaway - -Good routing is not a table of speed slogans. It is a sequence of eligibility checks, policy choices, backend contracts, and verification gates. AutoDecoder chooses a path, Cascade limits the cost of escalation, and TwoStage handles CSS cross-talk. The final authority remains the actual matrix and the equation `Hc = s`. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/09GpuAcceleration/index.html b/blog/09GpuAcceleration/index.html deleted file mode 100644 index bcdb6413..00000000 --- a/blog/09GpuAcceleration/index.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GPU Batch Decoding and Tested Bit Identity · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026SystemsBy Guillaume Lessard · 5 min read

GPU Batch Decoding and Tested Bit Identity

Per-shot GPU state isolation, deterministic Union-Find, scoped CPU/GPU identity, and deployment gates.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: CUDA, OpenCL, batch decoding, GPU determinism, Rust, QEC validation

-

Abstract

-

The interesting GPU question in a decoder is not only how many shots can be launched. It is whether parallel execution preserves the reference result and its correctness contract. QECTOR's CUDA and OpenCL batch paths port the graphlike Union-Find core with isolated per-shot scratch state. This post explains the memory layout, deterministic tie-breaking, the scoped CPU/GPU bit-identity theorem, licensing and runtime gates, and the hardware limitations that must travel with any deployment claim.

-

1. Why batch state must be isolated

-

For a batch of independent syndromes, each shot runs its own cluster growth and peeling process. A GPU work-item receives one syndrome and owns a private slice of scratch memory. No work-item reads another shot's parent array, parity state, frontier, or correction buffer.

-

That design avoids two problems at once:

-
    -
  • data races that could invalidate the correction;
  • -
  • nondeterministic union order that could produce a different, even if still faithful, correction on each run.
  • -
-

Bit identity is stronger than logical equivalence. It is useful when a GPU result must be compared against a CPU reference, debugged, or audited.

-

2. The documented workspace formula

-

Let

-
N = n_checks + 1   # includes the virtual boundary node
-E = n_edges
-

The manual documents two per-thread scratch strides for the graphlike batch kernel:

-
u32 stride = 6N + 1 + 4E
-u8  stride = 5N + E
-

The exact buffers are an implementation contract, not a universal VRAM budget. A batch of B shots needs those per-shot regions plus syndrome, correction, and any weighted-support buffers. The workspace sizes are checked before launch and can trigger a fallback when resources are insufficient.

-

3. Deterministic Union-Find rules

-

The CPU reference and unweighted batch kernels use deterministic decisions:

-
    -
  1. Union-by-rank handles the normal disjoint-set merge.
  2. -
  3. A deterministic root tie-break, such as the minimum root identifier, resolves equal-rank merges.
  4. -
  5. Edge traversal follows global edge identifiers.
  6. -
  7. Peeling uses a deterministic vertex ordering for its leaf stack.
  8. -
-

These choices matter because Union-Find does not need one unique spanning forest for syndrome faithfulness. Different forests can produce different valid corrections. If the engineering goal is bit identity, the forest construction itself must be deterministic.

-

4. The bit-identity theorem

-

For a graphlike code and a tested configuration, let c_CPU(s) be the unweighted CPU Union-Find correction and c_GPU(s) the unweighted batch-kernel correction.

-

Theorem, scoped

-

The tested unweighted GPU path produces

-cGPU(s)=cCPU(s)c_{GPU}(s) = c_{CPU}(s) -

bit for bit.

-

Proof idea

-

The initial singleton clusters are identical. Deterministic rank and root rules make every merge identical. Ordered edge traversal makes each growth set identical. The resulting spanning forest is therefore identical, and ordered leaf-to-root peeling emits the same correction bits. Induction over growth rounds completes the equivalence.

-

The scope is essential: the manual anchors the theorem to tested graphlike configurations and the CPU/GPU identity tests. It is not a universal statement about every GPU, driver, weighted mode, code family, or future kernel.

-

5. Weighted paths are a separate claim

-

The batch kernels accept DEM edge weights for weighted growth. The unweighted path carries the strongest bit-identity statement. The weighted path mirrors CPU weighted growth and is validated for equivalence on tested configurations, but it should not be silently described as the same bit-identity theorem without the configuration and test evidence.

-

The same distinction applies to CUDABpOsdDecoder. It is a batched qLDPC path; the manual recommends the CPU single-shot path where a one-shot GPU launch would not amortize.

-

6. Hardware and licensing gates

-

is_available() answers whether the local runtime can see the relevant hardware. It does not answer whether the caller is licensed to construct the decoder. The v1.0.0 tier table documents GPU-enabled paths under the Enterprise tier, while distance caps are enforced in the Rust core.

-

The published v1.0.0 wheels are CPU-only: 15 wheels on PyPI (CPython 3.9 through 3.13; Windows x86_64, manylinux x86_64, macOS arm64) with no CUDA binary inside (verified: each wheel carries a single native module of about 4 MB). CUDA and OpenCL are build-time feature gates, not published wheels; OpenCL remains a documented source-build path. Whether the local runtime can actually use a GPU is answered at runtime by cuda_is_available(), which the CPU fallback and the AutoDecoder controller consult before selecting a path.

-

The manual also records a known GPU-context limitation: the native CUDA path and CuPy can use different CUDA contexts, and an intermittent access violation was observed under load on one tested configuration. The documented workaround is to run those workloads in separate processes, or hide the device for a monolithic suite.

-

7. How to validate a GPU batch path

-

A minimal validation record should include:

-
code family and graphlike proof
-checks, qubits, detectors, and edges
-weighted or unweighted mode
-batch shape and syndrome dtype
-CPU reference class and GPU class
-GPU model, driver, runtime, OS, and package versions
-license tier and feature flags
-seed and generated syndromes
-H @ c == s result for every shot
-CPU/GPU byte comparison result
-raw output and SHA-256 hash
-

The reproduction workflow in the manual enables the CUDA feature, runs the focused CPU/GPU identity test, and treats a skipped hardware-gated test as no GPU evidence.

-

8. What not to publish from a local run

-

A local throughput number is not portable evidence. It depends on kernel version, compiler flags, GPU, driver, transfer path, batch size, warmup, and whether construction and memory movement were included. If a number is needed, publish the raw artifact with the full metadata, and report hot and cold paths separately.

-

The v1.0.0 manual deliberately withdraws earlier latency, throughput, memory, and VRAM figures whose artifacts did not survive a core fingerprint change. A blog post should preserve that caution rather than resurrecting the number in a new chart.

-

Takeaway

-

GPU decoding starts with ownership and determinism. Private per-shot state, deterministic Union-Find rules, and a CPU reference make bit identity testable. The claim then remains properly scoped: unweighted graphlike identity on tested configurations, weighted equivalence where tested, and no universal speed promise. That is a stronger engineering story than a headline rate without an artifact.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/09_gpu_acceleration.md b/blog/09_gpu_acceleration.md deleted file mode 100644 index f4b3e930..00000000 --- a/blog/09_gpu_acceleration.md +++ /dev/null @@ -1,119 +0,0 @@ -# GPU Batch Decoding: Deterministic State Isolation Before Throughput - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: CUDA, OpenCL, batch decoding, GPU determinism, Rust, QEC validation - -## Abstract - -The interesting GPU question in a decoder is not only how many shots can be launched. It is whether parallel execution preserves the reference result and its correctness contract. QECTOR's CUDA and OpenCL batch paths port the graphlike Union-Find core with isolated per-shot scratch state. This post explains the memory layout, deterministic tie-breaking, the scoped CPU/GPU bit-identity theorem, licensing and runtime gates, and the hardware limitations that must travel with any deployment claim. - -## 1. Why batch state must be isolated - -For a batch of independent syndromes, each shot runs its own cluster growth and peeling process. A GPU work-item receives one syndrome and owns a private slice of scratch memory. No work-item reads another shot's parent array, parity state, frontier, or correction buffer. - -That design avoids two problems at once: - -- data races that could invalidate the correction; -- nondeterministic union order that could produce a different, even if still faithful, correction on each run. - -Bit identity is stronger than logical equivalence. It is useful when a GPU result must be compared against a CPU reference, debugged, or audited. - -## 2. The documented workspace formula - -Let - -```text -N = n_checks + 1 # includes the virtual boundary node -E = n_edges -``` - -The manual documents two per-thread scratch strides for the graphlike batch kernel: - -```text -u32 stride = 6N + 1 + 4E -u8 stride = 5N + E -``` - -The exact buffers are an implementation contract, not a universal VRAM budget. A batch of `B` shots needs those per-shot regions plus syndrome, correction, and any weighted-support buffers. The workspace sizes are checked before launch and can trigger a fallback when resources are insufficient. - -## 3. Deterministic Union-Find rules - -The CPU reference and unweighted batch kernels use deterministic decisions: - -1. Union-by-rank handles the normal disjoint-set merge. -2. A deterministic root tie-break, such as the minimum root identifier, resolves equal-rank merges. -3. Edge traversal follows global edge identifiers. -4. Peeling uses a deterministic vertex ordering for its leaf stack. - -These choices matter because Union-Find does not need one unique spanning forest for syndrome faithfulness. Different forests can produce different valid corrections. If the engineering goal is bit identity, the forest construction itself must be deterministic. - -## 4. The bit-identity theorem - -For a graphlike code and a tested configuration, let `c_CPU(s)` be the unweighted CPU Union-Find correction and `c_GPU(s)` the unweighted batch-kernel correction. - -### Theorem, scoped - -The tested unweighted GPU path produces - -$$ -c_{GPU}(s) = c_{CPU}(s) -$$ - -bit for bit. - -### Proof idea - -The initial singleton clusters are identical. Deterministic rank and root rules make every merge identical. Ordered edge traversal makes each growth set identical. The resulting spanning forest is therefore identical, and ordered leaf-to-root peeling emits the same correction bits. Induction over growth rounds completes the equivalence. - -The scope is essential: the manual anchors the theorem to tested graphlike configurations and the CPU/GPU identity tests. It is not a universal statement about every GPU, driver, weighted mode, code family, or future kernel. - -## 5. Weighted paths are a separate claim - -The batch kernels accept DEM edge weights for weighted growth. The unweighted path carries the strongest bit-identity statement. The weighted path mirrors CPU weighted growth and is validated for equivalence on tested configurations, but it should not be silently described as the same bit-identity theorem without the configuration and test evidence. - -The same distinction applies to `CUDABpOsdDecoder`. It is a batched qLDPC path; the manual recommends the CPU single-shot path where a one-shot GPU launch would not amortize. - -## 6. Hardware and licensing gates - -`is_available()` answers whether the local runtime can see the relevant hardware. It does not answer whether the caller is licensed to construct the decoder. The v1.0.0 tier table documents GPU-enabled paths under the Enterprise tier, while distance caps are enforced in the Rust core. - -The published v1.0.0 wheels are CPU-only: 15 wheels on PyPI (CPython 3.9 through 3.13; Windows x86_64, manylinux x86_64, macOS arm64) with no CUDA binary inside (verified: each wheel carries a single native module of about 4 MB). CUDA and OpenCL are build-time feature gates, not published wheels; OpenCL remains a documented source-build path. Whether the local runtime can actually use a GPU is answered at runtime by `cuda_is_available()`, which the CPU fallback and the `AutoDecoder` controller consult before selecting a path. - -The manual also records a known GPU-context limitation: the native CUDA path and CuPy can use different CUDA contexts, and an intermittent access violation was observed under load on one tested configuration. The documented workaround is to run those workloads in separate processes, or hide the device for a monolithic suite. - -## 7. How to validate a GPU batch path - -A minimal validation record should include: - -```text -code family and graphlike proof -checks, qubits, detectors, and edges -weighted or unweighted mode -batch shape and syndrome dtype -CPU reference class and GPU class -GPU model, driver, runtime, OS, and package versions -license tier and feature flags -seed and generated syndromes -H @ c == s result for every shot -CPU/GPU byte comparison result -raw output and SHA-256 hash -``` - -The reproduction workflow in the manual enables the CUDA feature, runs the focused CPU/GPU identity test, and treats a skipped hardware-gated test as no GPU evidence. - -## 8. What not to publish from a local run - -A local throughput number is not portable evidence. It depends on kernel version, compiler flags, GPU, driver, transfer path, batch size, warmup, and whether construction and memory movement were included. If a number is needed, publish the raw artifact with the full metadata, and report hot and cold paths separately. - -The v1.0.0 manual deliberately withdraws earlier latency, throughput, memory, and VRAM figures whose artifacts did not survive a core fingerprint change. A blog post should preserve that caution rather than resurrecting the number in a new chart. - -## Takeaway - -GPU decoding starts with ownership and determinism. Private per-shot state, deterministic Union-Find rules, and a CPU reference make bit identity testable. The claim then remains properly scoped: unweighted graphlike identity on tested configurations, weighted equivalence where tested, and no universal speed promise. That is a stronger engineering story than a headline rate without an artifact. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/10BenchmarksArchitecture/index.html b/blog/10BenchmarksArchitecture/index.html deleted file mode 100644 index 66564d8d..00000000 --- a/blog/10BenchmarksArchitecture/index.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Evidence-First QEC Architecture and Benchmarks · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026EvidenceBy Guillaume Lessard · 7 min read

Evidence-First QEC Architecture and Benchmarks

The v1.0.0 backend map, logical scoring, Wilson intervals, metadata, release gates, and claim boundaries.

Author: Guillaume Lessard / qector.store
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046
-Tags: QEC benchmarking, reproducibility, Rust, PyO3, decoder architecture, evidence

-

Abstract

-

The final stage of a decoder project is not a benchmark chart. It is a claim that another engineer can inspect, reproduce, and scope. QECTOR Decoder v3 v1.0.0 organizes fifteen specialized backend families around one syndrome-faithfulness gate and documents how correctness, logical error rates, performance, memory, GPU identity, licensing, and deployment claims must be separated. This post maps the architecture and presents the benchmark metadata contract from the reference manual. It intentionally does not repeat withdrawn hardware figures.

-

1. One invariant, many backends

-

For a reachable syndrome s, every supported decoder returns a correction c satisfying

-Hc=s(mod2).Hc = s \pmod 2. -

If e is the sampled physical error, then c + e lies in ker(H). Logical success requires the stronger condition

-c+e∈im⁡(HT).c + e \in \operatorname{im}(H^T). -

That split is the organizing principle of the v1.0.0 architecture. A decoder can be syndrome-faithful but choose the wrong logical coset. A GPU result can be logically equivalent but not bit-identical to a CPU result. A fast local run can be correct but not evidence for a universal throughput claim.

-

2. Decoder families and domains

-

The manual's contract table can be summarized as follows:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FamilyDomainDocumented contract
Union-Find / Fast Union-FindGraphlikeFaithful cluster growth and peeling
BlossomGraphlikeExact weighted MWPM on audited small matching codes
Sparse BlossomGraphlikeFaithful, near-optimal region growth in tested scope
BP-OSDAny reachable GF(2) matrixFaithful LDPC/qLDPC residual solve
Lookup tableSmall codesExact for stored entries, with fallback
Hybrid cascadeGraphlike plus escalationFaithful acceptance predicate and fallback
Ambiguity clusteringqLDPCExact within small ambiguous components
Two-stage CSSCSS sectorsFaithful under faithful sector stages
Space-timeGraphlike lifted detector graphFaithful space-time correction
Streaming/windowedMulti-round workflowsWindowed simulation primitives, not hardware control
CUDA/OpenCL batchGraphlike batchesBit identity on tested configurations for the unweighted path
CUDA BP-OSD batchqLDPC batchesBatched path with single-shot CPU preference
Native auto routingAny eligible domainRoutes to a target backend and inherits its contract
-

The table deliberately contains claim boundaries. It is not a ranking.

-

3. Architecture layers

-

The frozen workspace has a Rust core, a Python layer, and a PyO3 boundary.

-

Rust core

-

The module map groups responsibilities into matching, Union-Find, BP-OSD, GPU, temporal, routing, learned, service, and utility areas. Internal module details are proprietary, so public documentation should describe their contracts and evidence anchors rather than inventing source-level implementation facts.

-

Python and PyO3

-

Arrays cross the FFI boundary as contiguous uint8 NumPy buffers. Repacking occurs only when an input is non-contiguous or has the wrong dtype. Decode calls release the Python GIL, allowing compiled work to run alongside other Python threads.

-

Interoperability is first-class. The package ships a PyMatching-compatible shim (from qector_decoder_v3.pymatching import Matching), Sinter entry points (qector_blossom, qector_belief, qector_unionfind, qector_bposd, qector_unionfind_unweighted), and a qiskit-qec plugin, so existing harnesses can swap in QECTOR backends without rewriting their scoring code.

-

Batch and memory model

-

Batch paths use Rayon data parallelism with worker-local scratch. The observable goal is bit determinism: output should not depend on worker count or prior calls. Hot paths reuse preallocated buffers and reset them in place. Python allocations, process RSS, native heap, and GPU memory are separate metrics and must never be merged into one number.

-

4. What a logical-error report must contain

-

The manual defines logical error rate in observable space: the predicted observable flips are compared with the sampled observable flips from the same circuit. A raw correction mismatch is not a logical error because stabilizer degeneracy can change the bit string without changing the logical state.

-

Every report should carry:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldRequired detail
Code familyRepetition, ring, surface, toric, heavy-hex, LDPC/qLDPC, or DEM-derived
SizeDistance, rounds, checks, qubits, detectors, and code parameters
NoisePhysical rate, channel/circuit source, code-capacity or circuit-level tag
DecoderClass, weights, belief mode, batch/GPU flags, and configuration
SamplingTrials, shots, warmup, and seed
MetricCorrectness, LER, latency, throughput, memory, identity, or scaling
EnvironmentOS, CPU, RAM, Python/Rust/package versions, GPU/runtime, commit
ArtifactRaw JSON/CSV path and SHA-256
-

The only published comparative LER figure is the v1.0.0 changelog's 120-test suite against PyMatching, reported with a stated 4.5x margin. The head-to-head numbers include repetition-code distance 3 at p=0.01, where QECTOR records 0.00392 against PyMatching's 0.00317. Any new comparison should hold the harness constant the same way.

-

5. Wilson intervals and comparability

-

For k logical errors in n shots, QECTOR reports a 95 percent Wilson interval rather than the simple Wald interval:

-p^+z2/(2n)±zp^(1−p^)/n+z2/(4n2)1+z2/n,\frac{\hat p + z^2/(2n) \pm z\sqrt{\hat p(1-\hat p)/n + z^2/(4n^2)}}{1+z^2/n}, -

with z = 1.959963985. The interval stays within [0,1] and behaves better for small counts and extreme rates.

-

Noise models must also be comparable. A code-capacity LER at a nominal p cannot be compared directly with a circuit-level LER at the same p. A competitive harness should hold the circuit, detector samples, DEM, observable scoring, and sampling protocol constant so the decoder is the only changed row.

-

6. Hot path and cold path

-

Decoder construction is the cold path: graph building, weight preprocessing, and allocation. Repeated decode() on an already-built decoder with syndromes in memory is the hot path. Reporting only hot-path latency is valid solely for a clearly labeled pre-built repeated-decode workload.

-

A latency report should include n, mean, median, standard deviation, minimum, maximum, p50, p90, p95, p99, and a 95 percent confidence interval on the mean. A single mean is not a complete public claim.

-

7. Evidence anchors

-

The manual maps claims to concrete evidence classes:

-
    -
  • syndrome faithfulness and cross-decoder tests;
  • -
  • property-based GF(2) and reachable-syndrome tests;
  • -
  • exhaustive small-code oracles for exact matching;
  • -
  • batch equivalence and GPU/CPU identity tests;
  • -
  • DEM parsing, collapse, weight, and observable tests;
  • -
  • LER noise-model parity tests;
  • -
  • qLDPC CSS and BP-OSD tests;
  • -
  • memory and native RSS tests;
  • -
  • public API and signature tests.
  • -
-

The frozen tree records an older test-count report as stale. No current pass/fail count should be copied from that historical table; the live suite and its artifacts are authoritative.

-

8. Release and deployment posture

-

The public delivery path is wheels only. No source distribution is published because the proprietary Rust core is not tracked as rebuildable source. The v1.0.0 release on PyPI (2026-08-06) ships 15 CPU-only wheels, CPython 3.9 through 3.13 across Windows x86_64, manylinux x86_64, and macOS arm64, requires Python 3.9 or later, and carries the PolyForm-Noncommercial-1.0.0 license. The CLI surface is qector decode, qector bench, and qector serve, plus qector-doctor and qector-bench-quick.

-

Release gates include Rust tests, Clippy with warnings denied, Python lint/format checks, the Python test suite, wheel import/decode smoke tests, and dependency audit policy.

-

The local CPU library is the preferred research path. CUDA/OpenCL are controlled local paths. REST, gRPC, MCP, and metrics surfaces are provisional and require authentication, authorization, TLS, rate limits, timeouts, audit logging, request limits, and resource quotas before a customer-facing deployment. The decoder makes no blocking network call during local decoding; license verification is offline.

-

9. A reproducible benchmark skeleton

-

The manual's reproduction path has this shape:

-
create a virtual environment
-install the wheel/build tooling and declared dependencies
-build/import the chosen feature set
-run the focused correctness tests
-run the workload with a fixed seed and explicit shots
-write raw JSON/CSV plus environment metadata
-hash the artifacts
-publish only the scoped result
-

The important output is not a pretty chart. It is the relationship between a sentence, a command, an artifact, and an evidence anchor.

-

10. What v1.0.0 does not claim

-

The reference manual deliberately excludes universal latency, throughput, memory, VRAM, and threshold numbers. Earlier benchmark artifacts were withdrawn when they did not survive a core fingerprint change. The safe alternative is to regenerate measurements on the target workload and publish the complete metadata.

-

That is not a weaker engineering position. It lets a hardware team reproduce a claim on its own system, lets a researcher distinguish mathematical scope from empirical scope, and prevents an old chart from becoming a misleading product promise.

-

Takeaway

-

QEC engineering becomes credible when correctness, logical scoring, performance, memory, identity, licensing, and deployment are treated as separate evidence classes. QECTOR's v1.0.0 architecture provides the common syndrome-faithfulness contract and the evidence map; the benchmark harness supplies the numbers for a declared workload. The DOI is the reference point, and the artifact is the proof.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/10_benchmarks_architecture.md b/blog/10_benchmarks_architecture.md deleted file mode 100644 index 89932731..00000000 --- a/blog/10_benchmarks_architecture.md +++ /dev/null @@ -1,159 +0,0 @@ -# Evidence-First QEC Engineering: The v1.0.0 Architecture and Benchmark Contract - -Author: Guillaume Lessard / qector.store -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: QEC benchmarking, reproducibility, Rust, PyO3, decoder architecture, evidence - -## Abstract - -The final stage of a decoder project is not a benchmark chart. It is a claim that another engineer can inspect, reproduce, and scope. QECTOR Decoder v3 v1.0.0 organizes fifteen specialized backend families around one syndrome-faithfulness gate and documents how correctness, logical error rates, performance, memory, GPU identity, licensing, and deployment claims must be separated. This post maps the architecture and presents the benchmark metadata contract from the reference manual. It intentionally does not repeat withdrawn hardware figures. - -## 1. One invariant, many backends - -For a reachable syndrome `s`, every supported decoder returns a correction `c` satisfying - -$$ -Hc = s \pmod 2. -$$ - -If `e` is the sampled physical error, then `c + e` lies in `ker(H)`. Logical success requires the stronger condition - -$$ -c + e \in \operatorname{im}(H^T). -$$ - -That split is the organizing principle of the v1.0.0 architecture. A decoder can be syndrome-faithful but choose the wrong logical coset. A GPU result can be logically equivalent but not bit-identical to a CPU result. A fast local run can be correct but not evidence for a universal throughput claim. - -## 2. Decoder families and domains - -The manual's contract table can be summarized as follows: - -| Family | Domain | Documented contract | -|---|---|---| -| Union-Find / Fast Union-Find | Graphlike | Faithful cluster growth and peeling | -| Blossom | Graphlike | Exact weighted MWPM on audited small matching codes | -| Sparse Blossom | Graphlike | Faithful, near-optimal region growth in tested scope | -| BP-OSD | Any reachable GF(2) matrix | Faithful LDPC/qLDPC residual solve | -| Lookup table | Small codes | Exact for stored entries, with fallback | -| Hybrid cascade | Graphlike plus escalation | Faithful acceptance predicate and fallback | -| Ambiguity clustering | qLDPC | Exact within small ambiguous components | -| Two-stage CSS | CSS sectors | Faithful under faithful sector stages | -| Space-time | Graphlike lifted detector graph | Faithful space-time correction | -| Streaming/windowed | Multi-round workflows | Windowed simulation primitives, not hardware control | -| CUDA/OpenCL batch | Graphlike batches | Bit identity on tested configurations for the unweighted path | -| CUDA BP-OSD batch | qLDPC batches | Batched path with single-shot CPU preference | -| Native auto routing | Any eligible domain | Routes to a target backend and inherits its contract | - -The table deliberately contains claim boundaries. It is not a ranking. - -## 3. Architecture layers - -The frozen workspace has a Rust core, a Python layer, and a PyO3 boundary. - -### Rust core - -The module map groups responsibilities into matching, Union-Find, BP-OSD, GPU, temporal, routing, learned, service, and utility areas. Internal module details are proprietary, so public documentation should describe their contracts and evidence anchors rather than inventing source-level implementation facts. - -### Python and PyO3 - -Arrays cross the FFI boundary as contiguous `uint8` NumPy buffers. Repacking occurs only when an input is non-contiguous or has the wrong dtype. Decode calls release the Python GIL, allowing compiled work to run alongside other Python threads. - -Interoperability is first-class. The package ships a PyMatching-compatible shim (`from qector_decoder_v3.pymatching import Matching`), Sinter entry points (`qector_blossom`, `qector_belief`, `qector_unionfind`, `qector_bposd`, `qector_unionfind_unweighted`), and a `qiskit-qec` plugin, so existing harnesses can swap in QECTOR backends without rewriting their scoring code. - -### Batch and memory model - -Batch paths use Rayon data parallelism with worker-local scratch. The observable goal is bit determinism: output should not depend on worker count or prior calls. Hot paths reuse preallocated buffers and reset them in place. Python allocations, process RSS, native heap, and GPU memory are separate metrics and must never be merged into one number. - -## 4. What a logical-error report must contain - -The manual defines logical error rate in observable space: the predicted observable flips are compared with the sampled observable flips from the same circuit. A raw correction mismatch is not a logical error because stabilizer degeneracy can change the bit string without changing the logical state. - -Every report should carry: - -| Field | Required detail | -|---|---| -| Code family | Repetition, ring, surface, toric, heavy-hex, LDPC/qLDPC, or DEM-derived | -| Size | Distance, rounds, checks, qubits, detectors, and code parameters | -| Noise | Physical rate, channel/circuit source, code-capacity or circuit-level tag | -| Decoder | Class, weights, belief mode, batch/GPU flags, and configuration | -| Sampling | Trials, shots, warmup, and seed | -| Metric | Correctness, LER, latency, throughput, memory, identity, or scaling | -| Environment | OS, CPU, RAM, Python/Rust/package versions, GPU/runtime, commit | -| Artifact | Raw JSON/CSV path and SHA-256 | - -The only published comparative LER figure is the v1.0.0 changelog's 120-test suite against PyMatching, reported with a stated 4.5x margin. The head-to-head numbers include repetition-code distance 3 at p=0.01, where QECTOR records 0.00392 against PyMatching's 0.00317. Any new comparison should hold the harness constant the same way. - -## 5. Wilson intervals and comparability - -For `k` logical errors in `n` shots, QECTOR reports a 95 percent Wilson interval rather than the simple Wald interval: - -$$ -\frac{\hat p + z^2/(2n) \pm z\sqrt{\hat p(1-\hat p)/n + z^2/(4n^2)}}{1+z^2/n}, -$$ - -with `z = 1.959963985`. The interval stays within `[0,1]` and behaves better for small counts and extreme rates. - -Noise models must also be comparable. A code-capacity LER at a nominal `p` cannot be compared directly with a circuit-level LER at the same `p`. A competitive harness should hold the circuit, detector samples, DEM, observable scoring, and sampling protocol constant so the decoder is the only changed row. - -## 6. Hot path and cold path - -Decoder construction is the cold path: graph building, weight preprocessing, and allocation. Repeated `decode()` on an already-built decoder with syndromes in memory is the hot path. Reporting only hot-path latency is valid solely for a clearly labeled pre-built repeated-decode workload. - -A latency report should include `n`, mean, median, standard deviation, minimum, maximum, p50, p90, p95, p99, and a 95 percent confidence interval on the mean. A single mean is not a complete public claim. - -## 7. Evidence anchors - -The manual maps claims to concrete evidence classes: - -- syndrome faithfulness and cross-decoder tests; -- property-based GF(2) and reachable-syndrome tests; -- exhaustive small-code oracles for exact matching; -- batch equivalence and GPU/CPU identity tests; -- DEM parsing, collapse, weight, and observable tests; -- LER noise-model parity tests; -- qLDPC CSS and BP-OSD tests; -- memory and native RSS tests; -- public API and signature tests. - -The frozen tree records an older test-count report as stale. No current pass/fail count should be copied from that historical table; the live suite and its artifacts are authoritative. - -## 8. Release and deployment posture - -The public delivery path is wheels only. No source distribution is published because the proprietary Rust core is not tracked as rebuildable source. The v1.0.0 release on PyPI (2026-08-06) ships 15 CPU-only wheels, CPython 3.9 through 3.13 across Windows x86_64, manylinux x86_64, and macOS arm64, requires Python 3.9 or later, and carries the PolyForm-Noncommercial-1.0.0 license. The CLI surface is `qector decode`, `qector bench`, and `qector serve`, plus `qector-doctor` and `qector-bench-quick`. - -Release gates include Rust tests, Clippy with warnings denied, Python lint/format checks, the Python test suite, wheel import/decode smoke tests, and dependency audit policy. - -The local CPU library is the preferred research path. CUDA/OpenCL are controlled local paths. REST, gRPC, MCP, and metrics surfaces are provisional and require authentication, authorization, TLS, rate limits, timeouts, audit logging, request limits, and resource quotas before a customer-facing deployment. The decoder makes no blocking network call during local decoding; license verification is offline. - -## 9. A reproducible benchmark skeleton - -The manual's reproduction path has this shape: - -```text -create a virtual environment -install the wheel/build tooling and declared dependencies -build/import the chosen feature set -run the focused correctness tests -run the workload with a fixed seed and explicit shots -write raw JSON/CSV plus environment metadata -hash the artifacts -publish only the scoped result -``` - -The important output is not a pretty chart. It is the relationship between a sentence, a command, an artifact, and an evidence anchor. - -## 10. What v1.0.0 does not claim - -The reference manual deliberately excludes universal latency, throughput, memory, VRAM, and threshold numbers. Earlier benchmark artifacts were withdrawn when they did not survive a core fingerprint change. The safe alternative is to regenerate measurements on the target workload and publish the complete metadata. - -That is not a weaker engineering position. It lets a hardware team reproduce a claim on its own system, lets a researcher distinguish mathematical scope from empirical scope, and prevents an old chart from becoming a misleading product promise. - -## Takeaway - -QEC engineering becomes credible when correctness, logical scoring, performance, memory, identity, licensing, and deployment are treated as separate evidence classes. QECTOR's v1.0.0 architecture provides the common syndrome-faithfulness contract and the evidence map; the benchmark harness supplies the numbers for a declared workload. The DOI is the reference point, and the artifact is the proof. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/11SteaneWorkedDecode/index.html b/blog/11SteaneWorkedDecode/index.html deleted file mode 100644 index 57ac4bea..00000000 --- a/blog/11SteaneWorkedDecode/index.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A Hand-Worked Steane Decode · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026FoundationsBy Guillaume Lessard · 4 min read

A Hand-Worked Steane Decode

Compute a Steane syndrome by hand and see why stabilizer cosets matter more than raw correction equality.

Author: Guillaume Lessard
-Series: QECTOR Decoder v3 companion notes, Post 11
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: Steane code, CSS codes, stabilizer codes, worked example, QEC education

-

Abstract

-

The Steane [[7,1,3]] code is small enough to verify by hand and rich enough to expose the gap between a syndrome-valid correction and a logically correct one. This worked example writes out one sector's parity-check matrix, computes a syndrome for a single-qubit error, exhibits stabilizer coset freedom with explicit numbers, and maps every step onto QECTOR's decoder contract.

-

1. The check matrix

-

One sector of the Steane code uses three checks over seven qubits, taken from the reference manual:

-
S0 = {3, 4, 5, 6}
-S1 = {1, 2, 5, 6}
-S2 = {0, 2, 4, 6}
-

With columns ordered q0 through q6, the sector matrix is

-H=[000111101100111010101].H = -\begin{bmatrix} -0&0&0&1&1&1&1\\ -0&1&1&0&0&1&1\\ -1&0&1&0&1&0&1 -\end{bmatrix}. -

Each row lists which qubits participate in one check. Read row 0: the check fires when the parity of qubits 3, 4, 5, and 6 is odd. All arithmetic below is over F2.

-

The Steane construction reuses this classical structure in both the X and Z sectors. Each sector has rank 3, so the CSS dimension count is

-k=7−rank⁡(HX)−rank⁡(HZ)=7−3−3=1.k = 7 - \operatorname{rank}(H_X) - \operatorname{rank}(H_Z) = 7-3-3=1. -

One logical qubit, as expected.

-

2. Create a syndrome by hand

-

Put a single error on qubit 5:

-
e = [0, 0, 0, 0, 0, 1, 0]
-

Multiplying by H selects column 5:

-s=He=[1,1,0].s = He = [1, 1, 0]. -

Check it against the matrix: column 5 reads [1, 1, 0] from the three rows. Checks S0 and S1 fire because both contain qubit 5; check S2 does not.

-

That syndrome is the complete measured information a sector decoder receives. It does not identify the physical error, because stabilizer codes are degenerate: several distinct errors can produce the same syndrome.

-

3. Verify the obvious correction

-

The true error is itself a valid correction in this case:

-
c = [0, 0, 0, 0, 0, 1, 0]
-H @ c = [1, 1, 0]  (mod 2)
-

The residual is exactly zero:

-c+e=0.c + e = 0. -

Zero lies in the stabilizer row space, so the logical state is untouched. This case is deliberately trivial: it establishes the baseline before degeneracy complicates the picture.

-

4. Add a stabilizer: same syndrome, different bits

-

Take g to be row 0 of H:

-
g = [0, 0, 0, 1, 1, 1, 1]
-c' = c + g = [0, 0, 0, 1, 1, 0, 1]
-

Stabilizers have zero syndrome by construction, so Hg^T = 0 and

-Hc′=Hc+HgT=s+0=s.Hc' = Hc + Hg^T = s + 0 = s. -

Verify directly: row 0 of H dotted with c' gives 1+1+0+1 = 3 = 1 (mod 2); row 1 gives 0+0+0+1 = 1; row 2 gives 0+0+1+1 = 2 = 0 (mod 2). So Hc' = [1, 1, 0] = s, confirmed.

-

Yet c' differs from c in four positions. A test comparing bit strings would report failure, even though

-c′+e=g∈im⁡(HT)c' + e = g \in \operatorname{im}(H^T) -

places the residual squarely in the stabilizer span. The logical action is identical.

-

This is the smallest useful demonstration of degeneracy. The decoder's job is to choose the right logical coset, not to reproduce the microscopic error.

-

5. Kernel and row-space dimensions

-

Rank-nullity for one sector gives

-dim⁡ker⁡(H)=7−3=4,\dim\ker(H) = 7 - 3 = 4, -

while the row space has dimension 3. The quotient therefore has dimension 1:

-dim⁡(ker⁡(H)/im⁡(HT))=1.\dim\left(\ker(H)/\operatorname{im}(H^T)\right) = 1. -

Combining the X and Z sectors yields four logical cosets, conventionally labelled I, Xbar, Zbar, and Ybar. A syndrome-faithful correction lands in one of them; only the logical observable reveals whether that landing was harmless.

-

6. What a decoder test should assert

-

For a known error e and a returned correction c, assert two things:

-
1. H @ c == H @ e            # syndrome faithfulness
-2. c + e in stabilizer span  # logical success
-

The first applies to every backend. The second needs the code's stabilizer and logical-operator representation. A test that checks only c == e rejects valid degenerate corrections and is wrong by design.

-

7. Relation to the public API

-

The manual's direct-decode example uses a repetition code, but the contract is identical for a Steane sector. The v1.0.0 API entry point is

-
from qector_decoder_v3 import BlossomDecoder
-
-decoder = BlossomDecoder(checks, n_qubits=7)
-correction = decoder.decode(syndrome)
-

Pass a check structure, a reachable uint8 syndrome, and receive a correction vector of the declared qubit length. Two responsibilities stay with the caller: validating the matrix convention, and scoring the logical coset when the true error or observable data is available.

-

Takeaway

-

The Steane code makes the full QEC argument visible in seven columns:

-
physical error -> syndrome -> faithful correction -> kernel residual -> logical coset
-

Matrix multiplication proves the decoder returned to the code space. The row-space test decides whether it returned to the correct logical state. Those are different tests, and both matter.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/11_steane_worked_decode.md b/blog/11_steane_worked_decode.md deleted file mode 100644 index 6965ec11..00000000 --- a/blog/11_steane_worked_decode.md +++ /dev/null @@ -1,159 +0,0 @@ -# A Hand-Worked Steane Decode: Syndrome, Stabilizers, and Logical Cosets - -Author: Guillaume Lessard -Series: QECTOR Decoder v3 companion notes, Post 11 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: Steane code, CSS codes, stabilizer codes, worked example, QEC education - -## Abstract - -The Steane `[[7,1,3]]` code is small enough to verify by hand and rich enough to expose the gap between a syndrome-valid correction and a logically correct one. This worked example writes out one sector's parity-check matrix, computes a syndrome for a single-qubit error, exhibits stabilizer coset freedom with explicit numbers, and maps every step onto QECTOR's decoder contract. - -## 1. The check matrix - -One sector of the Steane code uses three checks over seven qubits, taken from the reference manual: - -```text -S0 = {3, 4, 5, 6} -S1 = {1, 2, 5, 6} -S2 = {0, 2, 4, 6} -``` - -With columns ordered `q0` through `q6`, the sector matrix is - -$$ -H = -\begin{bmatrix} -0&0&0&1&1&1&1\\ -0&1&1&0&0&1&1\\ -1&0&1&0&1&0&1 -\end{bmatrix}. -$$ - -Each row lists which qubits participate in one check. Read row 0: the check fires when the parity of qubits 3, 4, 5, and 6 is odd. All arithmetic below is over `F2`. - -The Steane construction reuses this classical structure in both the X and Z sectors. Each sector has rank 3, so the CSS dimension count is - -$$ -k = 7 - \operatorname{rank}(H_X) - \operatorname{rank}(H_Z) = 7-3-3=1. -$$ - -One logical qubit, as expected. - -## 2. Create a syndrome by hand - -Put a single error on qubit 5: - -```text -e = [0, 0, 0, 0, 0, 1, 0] -``` - -Multiplying by `H` selects column 5: - -$$ -s = He = [1, 1, 0]. -$$ - -Check it against the matrix: column 5 reads `[1, 1, 0]` from the three rows. Checks S0 and S1 fire because both contain qubit 5; check S2 does not. - -That syndrome is the complete measured information a sector decoder receives. It does not identify the physical error, because stabilizer codes are degenerate: several distinct errors can produce the same syndrome. - -## 3. Verify the obvious correction - -The true error is itself a valid correction in this case: - -```text -c = [0, 0, 0, 0, 0, 1, 0] -H @ c = [1, 1, 0] (mod 2) -``` - -The residual is exactly zero: - -$$ -c + e = 0. -$$ - -Zero lies in the stabilizer row space, so the logical state is untouched. This case is deliberately trivial: it establishes the baseline before degeneracy complicates the picture. - -## 4. Add a stabilizer: same syndrome, different bits - -Take `g` to be row 0 of `H`: - -```text -g = [0, 0, 0, 1, 1, 1, 1] -c' = c + g = [0, 0, 0, 1, 1, 0, 1] -``` - -Stabilizers have zero syndrome by construction, so `Hg^T = 0` and - -$$ -Hc' = Hc + Hg^T = s + 0 = s. -$$ - -Verify directly: row 0 of `H` dotted with `c'` gives `1+1+0+1 = 3 = 1 (mod 2)`; row 1 gives `0+0+0+1 = 1`; row 2 gives `0+0+1+1 = 2 = 0 (mod 2)`. So `Hc' = [1, 1, 0] = s`, confirmed. - -Yet `c'` differs from `c` in four positions. A test comparing bit strings would report failure, even though - -$$ -c' + e = g \in \operatorname{im}(H^T) -$$ - -places the residual squarely in the stabilizer span. The logical action is identical. - -This is the smallest useful demonstration of degeneracy. The decoder's job is to choose the right logical coset, not to reproduce the microscopic error. - -## 5. Kernel and row-space dimensions - -Rank-nullity for one sector gives - -$$ -\dim\ker(H) = 7 - 3 = 4, -$$ - -while the row space has dimension 3. The quotient therefore has dimension 1: - -$$ -\dim\left(\ker(H)/\operatorname{im}(H^T)\right) = 1. -$$ - -Combining the X and Z sectors yields four logical cosets, conventionally labelled `I`, `Xbar`, `Zbar`, and `Ybar`. A syndrome-faithful correction lands in one of them; only the logical observable reveals whether that landing was harmless. - -## 6. What a decoder test should assert - -For a known error `e` and a returned correction `c`, assert two things: - -```text -1. H @ c == H @ e # syndrome faithfulness -2. c + e in stabilizer span # logical success -``` - -The first applies to every backend. The second needs the code's stabilizer and logical-operator representation. A test that checks only `c == e` rejects valid degenerate corrections and is wrong by design. - -## 7. Relation to the public API - -The manual's direct-decode example uses a repetition code, but the contract is identical for a Steane sector. The v1.0.0 API entry point is - -```python -from qector_decoder_v3 import BlossomDecoder - -decoder = BlossomDecoder(checks, n_qubits=7) -correction = decoder.decode(syndrome) -``` - -Pass a check structure, a reachable `uint8` syndrome, and receive a correction vector of the declared qubit length. Two responsibilities stay with the caller: validating the matrix convention, and scoring the logical coset when the true error or observable data is available. - -## Takeaway - -The Steane code makes the full QEC argument visible in seven columns: - -```text -physical error -> syndrome -> faithful correction -> kernel residual -> logical coset -``` - -Matrix multiplication proves the decoder returned to the code space. The row-space test decides whether it returned to the correct logical state. Those are different tests, and both matter. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/12RotatedSurfaceD3/index.html b/blog/12RotatedSurfaceD3/index.html deleted file mode 100644 index a3740f7d..00000000 --- a/blog/12RotatedSurfaceD3/index.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rotated Surface Code d=3 · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026FoundationsBy Guillaume Lessard · 4 min read

Rotated Surface Code d=3

Nine data qubits, boundaries, graphlike eligibility, logical strings, and a complete structural audit.

Author: Guillaume Lessard
-Series: QECTOR Decoder v3 companion notes, Post 12
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: rotated surface code, graphlike codes, detector graphs, boundaries, QEC

-

Abstract

-

Distance-three surface codes are small enough for a complete structural audit and large enough to show boundaries, logical strings, and the graphlike condition. The QECTOR reference manual describes one sector of the rotated surface code at d=3: nine data qubits, four checks, one logical qubit per combined CSS code. This post explains what that description means, why matching applies, and how to avoid confusing a graphlike rotated construction with an explicitly non-graphlike legacy generator.

-

1. The geometry

-

Arrange nine data qubits on a 3 x 3 grid. In one sector, the manual describes four checks:

-
    -
  • two weight-4 plaquette checks on the even sublattice;
  • -
  • one weight-2 check on the top boundary;
  • -
  • one weight-2 check on the bottom boundary.
  • -
-

The X and Z sectors act on the same nine data qubits, giving eight checks in the combined CSS description.

-

The exact index convention belongs to the code constructor. Do not infer an index ordering from a picture; the check_to_qubits structure or the code helper is the authoritative object passed to a decoder.

-

2. Why the sector is graphlike

-

Every qubit participates in at most two checks per sector. In the detector representation, a qubit is therefore an edge joining two detector nodes, or an edge joining one detector to a virtual boundary. That is the structural condition required by the matching and Union-Find decoder families.

-

This condition is independent of the word "surface" in a class name. A legacy toric-style weight-4 generator can be explicitly non-graphlike, while codes.rotated_surface_code is the documented graphlike construction for this use. The decoder family must match the actual matrix, not the class name.

-

3. Dimension count

-

For one sector the manual gives n=9 data qubits and m=4 checks. The kernel has dimension 5 and the stabilizer row space has dimension 4:

-dim⁡ker⁡(H)=5,dim⁡im⁡(HT)=4.\dim\ker(H)=5,\qquad \dim\operatorname{im}(H^T)=4. -

The quotient has dimension 1: the single logical qubit of the code. A representative logical string runs horizontally across the top row in the manual's convention.

-

The quotient is why a zero-syndrome cycle can still be a logical operator. A decoder can satisfy every check and still land in a nontrivial homology class.

-

4. Boundaries are virtual nodes

-

On an open surface patch, a defect can be paired with a boundary instead of another defect. The boundary is represented as a virtual node that contributes no syndrome bit. In a path proof, a boundary path has one physical endpoint and one invisible virtual endpoint, so its detector boundary is a single defect.

-

This convention affects four things:

-
which syndromes are reachable
-which paths are legal
-how matching costs are computed
-how Union-Find decides an odd cluster is satisfied
-

It must be held constant across code generation, decoder construction, and logical-observable scoring.

-

5. One sector, one error chain

-

Suppose a single data error flips two checks. In the detector graph it creates two defects. The decoder connects them with a path whose boundary is exactly those two nodes. If the error touches a boundary, the syndrome can contain one defect, and the decoder connects it to the corresponding virtual boundary node.

-

For any returned graph path c, the core check is

-Hc=s(mod2).Hc=s \pmod 2. -

The matching objective or the Union-Find growth rule chooses the path. The boundary equation verifies it.

-

6. What distance three demonstrates

-

The small code is useful for more than a tutorial. Everything can be enumerated:

-
    -
  • every check and qubit listed explicitly;
  • -
  • reachable syndromes generated exhaustively;
  • -
  • lookup tables checked entry by entry;
  • -
  • Blossom compared against a brute-force oracle;
  • -
  • Union-Find peeling verified on every reachable input;
  • -
  • logical strings and stabilizer products listed explicitly.
  • -
-

Exactness claims should be anchored on these small audited workloads before anyone extrapolates to larger distances.

-

7. API caution

-

The v1.0.0 stable API lists generate_surface_code_checks(d) as a legacy toric-style weight-4 generator and explicitly warns that it is not graphlike. For a graphlike rotated surface code, use the documented codes.rotated_surface_code path.

-

This is a small naming detail with a large correctness consequence: a matching decoder is only valid on a genuinely graphlike matrix.

-

8. A structural audit checklist

-

Before routing a d=3 surface instance to matching or Union-Find, confirm:

-
number of data qubits: 9
-checks per sector: 4
-combined CSS checks: 8
-maximum qubit degree per sector: 2
-boundary convention: explicit and consistent
-logical observables: defined for scoring
-

Then generate a reachable syndrome from an error vector and verify H @ correction == syndrome modulo two. For logical tests, compare observables or the stabilizer quotient, not only the correction vector.

-

Takeaway

-

The rotated d=3 patch is a complete miniature of graphlike QEC: local checks become detector nodes, data qubits become edges, boundaries become virtual sinks, and logical strings live in the kernel outside the stabilizer span. Audit this structure first; only then choose the decoder.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/12_rotated_surface_d3.md b/blog/12_rotated_surface_d3.md deleted file mode 100644 index 5792e91e..00000000 --- a/blog/12_rotated_surface_d3.md +++ /dev/null @@ -1,111 +0,0 @@ -# Rotated Surface Code d=3: The Smallest Useful Detector Graph - -Author: Guillaume Lessard -Series: QECTOR Decoder v3 companion notes, Post 12 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: rotated surface code, graphlike codes, detector graphs, boundaries, QEC - -## Abstract - -Distance-three surface codes are small enough for a complete structural audit and large enough to show boundaries, logical strings, and the graphlike condition. The QECTOR reference manual describes one sector of the rotated surface code at `d=3`: nine data qubits, four checks, one logical qubit per combined CSS code. This post explains what that description means, why matching applies, and how to avoid confusing a graphlike rotated construction with an explicitly non-graphlike legacy generator. - -## 1. The geometry - -Arrange nine data qubits on a `3 x 3` grid. In one sector, the manual describes four checks: - -- two weight-4 plaquette checks on the even sublattice; -- one weight-2 check on the top boundary; -- one weight-2 check on the bottom boundary. - -The X and Z sectors act on the same nine data qubits, giving eight checks in the combined CSS description. - -The exact index convention belongs to the code constructor. Do not infer an index ordering from a picture; the `check_to_qubits` structure or the code helper is the authoritative object passed to a decoder. - -## 2. Why the sector is graphlike - -Every qubit participates in at most two checks per sector. In the detector representation, a qubit is therefore an edge joining two detector nodes, or an edge joining one detector to a virtual boundary. That is the structural condition required by the matching and Union-Find decoder families. - -This condition is independent of the word "surface" in a class name. A legacy toric-style weight-4 generator can be explicitly non-graphlike, while `codes.rotated_surface_code` is the documented graphlike construction for this use. The decoder family must match the actual matrix, not the class name. - -## 3. Dimension count - -For one sector the manual gives `n=9` data qubits and `m=4` checks. The kernel has dimension 5 and the stabilizer row space has dimension 4: - -$$ -\dim\ker(H)=5,\qquad \dim\operatorname{im}(H^T)=4. -$$ - -The quotient has dimension 1: the single logical qubit of the code. A representative logical string runs horizontally across the top row in the manual's convention. - -The quotient is why a zero-syndrome cycle can still be a logical operator. A decoder can satisfy every check and still land in a nontrivial homology class. - -## 4. Boundaries are virtual nodes - -On an open surface patch, a defect can be paired with a boundary instead of another defect. The boundary is represented as a virtual node that contributes no syndrome bit. In a path proof, a boundary path has one physical endpoint and one invisible virtual endpoint, so its detector boundary is a single defect. - -This convention affects four things: - -```text -which syndromes are reachable -which paths are legal -how matching costs are computed -how Union-Find decides an odd cluster is satisfied -``` - -It must be held constant across code generation, decoder construction, and logical-observable scoring. - -## 5. One sector, one error chain - -Suppose a single data error flips two checks. In the detector graph it creates two defects. The decoder connects them with a path whose boundary is exactly those two nodes. If the error touches a boundary, the syndrome can contain one defect, and the decoder connects it to the corresponding virtual boundary node. - -For any returned graph path `c`, the core check is - -$$ -Hc=s \pmod 2. -$$ - -The matching objective or the Union-Find growth rule chooses the path. The boundary equation verifies it. - -## 6. What distance three demonstrates - -The small code is useful for more than a tutorial. Everything can be enumerated: - -- every check and qubit listed explicitly; -- reachable syndromes generated exhaustively; -- lookup tables checked entry by entry; -- Blossom compared against a brute-force oracle; -- Union-Find peeling verified on every reachable input; -- logical strings and stabilizer products listed explicitly. - -Exactness claims should be anchored on these small audited workloads before anyone extrapolates to larger distances. - -## 7. API caution - -The v1.0.0 stable API lists `generate_surface_code_checks(d)` as a legacy toric-style weight-4 generator and explicitly warns that it is not graphlike. For a graphlike rotated surface code, use the documented `codes.rotated_surface_code` path. - -This is a small naming detail with a large correctness consequence: a matching decoder is only valid on a genuinely graphlike matrix. - -## 8. A structural audit checklist - -Before routing a `d=3` surface instance to matching or Union-Find, confirm: - -```text -number of data qubits: 9 -checks per sector: 4 -combined CSS checks: 8 -maximum qubit degree per sector: 2 -boundary convention: explicit and consistent -logical observables: defined for scoring -``` - -Then generate a reachable syndrome from an error vector and verify `H @ correction == syndrome` modulo two. For logical tests, compare observables or the stabilizer quotient, not only the correction vector. - -## Takeaway - -The rotated `d=3` patch is a complete miniature of graphlike QEC: local checks become detector nodes, data qubits become edges, boundaries become virtual sinks, and logical strings live in the kernel outside the stabilizer span. Audit this structure first; only then choose the decoder. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/13DemPipeline/index.html b/blog/13DemPipeline/index.html deleted file mode 100644 index 8db5c26d..00000000 --- a/blog/13DemPipeline/index.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Detector Error Models from Faults to Graphs · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026Noise ModelsBy Guillaume Lessard · 4 min read

Detector Error Models from Faults to Graphs

Parse DEMs, classify hyperedges, collapse parallel mechanisms, set weights, and preserve observables.

Author: Guillaume Lessard
-Series: QECTOR Decoder v3 companion notes, Post 13
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: detector error model, Stim, graph collapse, observables, QEC tooling

-

Abstract

-

A decoder cannot choose sensible paths from a circuit without a machine-readable description of that circuit's fault mechanisms. A detector error model (DEM) provides the description: rows are detectors, columns are mechanisms, and each mechanism carries a prior probability and an observable effect. This post follows QECTOR's DEM pipeline from parsing and graphlike classification through parallel-edge collapse, likelihood weights, prior recalibration, and decoder construction.

-

1. The DEM as a matrix

-

Represent a DEM by a binary matrix H_DEM:

-
    -
  • one row per detector;
  • -
  • one column per fault mechanism;
  • -
  • H[d,m] = 1 when mechanism m flips detector d.
  • -
-

The syndrome is a vector of fired detectors. A correction is a selection of mechanism columns whose XOR reproduces that vector.

-

The parser described by the manual handles error, detector, logical_observable, shift_detectors, and repeat blocks. It can parse a Stim DEM object or DEM text without requiring Stim to be installed at parse time.

-

2. Graphlike classification

-

The column weight is the structural test:

-
weight <= 2  -> graph edge or boundary edge
-weight > 2   -> hyperedge; matching is not valid
-

This classification must happen before constructing a matching decoder. Decomposing a hyperedge into pairwise edges silently changes the fault model and can change the logical result. QECTOR routes non-graphlike models to BP-OSD.

-

3. Likelihood weights

-

Each mechanism with probability p receives

-w=log⁡(1−pp).w = \log\left(\frac{1-p}{p}\right). -

For a graphlike model, a shortest path under these weights is the most likely chain under the independent-mechanism model the DEM encodes. A matching decoder then optimizes over pairings of detector defects.

-

Weights are not optional decoration. If one mechanism has probability 1e-4 and another has probability 1e-2, their weights are approximately 9.21 and 4.60. Treating them as equal erases information the circuit model already supplied.

-

4. Collapsing parallel mechanisms

-

Circuit decomposition can create multiple independent mechanisms connecting the same detector pair. QECTOR collapses them for graphlike decoding with the independent-XOR rule:

-p=p1(1−p2)+p2(1−p1).p = p_1(1-p_2) + p_2(1-p_1). -

For p1=0.01 and p2=0.02:

-p=0.01(0.98)+0.02(0.99)=0.0296.p = 0.01(0.98)+0.02(0.99)=0.0296. -

The collapsed edge receives log((1-p)/p). The manual also documents which observable set survives: the set belonging to the most likely member of the parallel group. The rule is covered by dedicated DEM-collapse fixtures.

-

5. Observables are not detector rows

-

Detectors tell the decoder which parity constraints fired. Logical observables tell the scoring harness whether the predicted logical outcome differs from the sampled outcome. Conflating them is a common source of wrong LER numbers.

-

The DEM therefore carries both:

-
detector incidence: used to build H and decode
-observable incidence: used to score logical outcomes
-

This separation is the practical reason QECTOR rejects correction != error as a logical-error metric.

-

6. Prior recalibration

-

If observed detector events are available, the manual describes simple prior estimators:

-
    -
  • -

    for a weight-1 mechanism, use the detector firing rate;

    -
  • -
  • -

    for a weight-2 mechanism, estimate the correlated XOR probability P_xor = 2p(1-p) and invert

    -p=1−1−2Pxor2;p = \frac{1-\sqrt{1-2P_{xor}}}{2}; -
  • -
  • -

    for a hyperedge, use the maximum firing rate among its detectors as the documented conservative estimate.

    -
  • -
-

Recalibration changes the weights and therefore the selected representative. It does not remove the need to validate Hc=s, nor to score logical observables under a declared experiment.

-

7. A safe construction workflow

-
from qector_decoder_v3 import dem
-
-model = dem.from_stim(
-    circuit.detector_error_model(decompose_errors=True)
-)
-
-if model.is_graphlike:
-    model = model.collapse_to_graph()
-    decoder = model.make_decoder("blossom")
-else:
-    decoder = model.make_decoder("bposd")
-

The method names (from_stim, is_graphlike, collapse_to_graph, make_decoder) are confirmed in the v1.0.0 API; check the installed package for the full option set. The structural guard is the important part: never force a matching decoder onto a hypergraph model.

-

8. DEM audit fields

-

For a reproducible DEM-derived result, record:

-
source circuit or DEM text
-Stim version, if used
-decompose_errors setting
-raw mechanism count
-graphlike status
-collapsed mechanism count
-probability and weight convention
-observable mapping
-code distance and rounds
-decoder class and seed
-raw results and SHA-256
-

A DEM object without its construction settings is not enough to reproduce a circuit-level comparison.

-

Takeaway

-

The DEM is the bridge from a noisy circuit to a decoding problem. Parse mechanisms into columns, classify graphlike structure before choosing a solver, combine parallel probabilities correctly, keep observables for logical scoring, and record every transformation. The output is only as trustworthy as that pipeline.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/13_dem_pipeline.md b/blog/13_dem_pipeline.md deleted file mode 100644 index a9afa7da..00000000 --- a/blog/13_dem_pipeline.md +++ /dev/null @@ -1,137 +0,0 @@ -# Detector Error Models: From Fault Mechanisms to a Decoder Graph - -Author: Guillaume Lessard -Series: QECTOR Decoder v3 companion notes, Post 13 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: detector error model, Stim, graph collapse, observables, QEC tooling - -## Abstract - -A decoder cannot choose sensible paths from a circuit without a machine-readable description of that circuit's fault mechanisms. A detector error model (DEM) provides the description: rows are detectors, columns are mechanisms, and each mechanism carries a prior probability and an observable effect. This post follows QECTOR's DEM pipeline from parsing and graphlike classification through parallel-edge collapse, likelihood weights, prior recalibration, and decoder construction. - -## 1. The DEM as a matrix - -Represent a DEM by a binary matrix `H_DEM`: - -- one row per detector; -- one column per fault mechanism; -- `H[d,m] = 1` when mechanism `m` flips detector `d`. - -The syndrome is a vector of fired detectors. A correction is a selection of mechanism columns whose XOR reproduces that vector. - -The parser described by the manual handles `error`, `detector`, `logical_observable`, `shift_detectors`, and `repeat` blocks. It can parse a Stim DEM object or DEM text without requiring Stim to be installed at parse time. - -## 2. Graphlike classification - -The column weight is the structural test: - -```text -weight <= 2 -> graph edge or boundary edge -weight > 2 -> hyperedge; matching is not valid -``` - -This classification must happen before constructing a matching decoder. Decomposing a hyperedge into pairwise edges silently changes the fault model and can change the logical result. QECTOR routes non-graphlike models to BP-OSD. - -## 3. Likelihood weights - -Each mechanism with probability `p` receives - -$$ -w = \log\left(\frac{1-p}{p}\right). -$$ - -For a graphlike model, a shortest path under these weights is the most likely chain under the independent-mechanism model the DEM encodes. A matching decoder then optimizes over pairings of detector defects. - -Weights are not optional decoration. If one mechanism has probability `1e-4` and another has probability `1e-2`, their weights are approximately `9.21` and `4.60`. Treating them as equal erases information the circuit model already supplied. - -## 4. Collapsing parallel mechanisms - -Circuit decomposition can create multiple independent mechanisms connecting the same detector pair. QECTOR collapses them for graphlike decoding with the independent-XOR rule: - -$$ -p = p_1(1-p_2) + p_2(1-p_1). -$$ - -For `p1=0.01` and `p2=0.02`: - -$$ -p = 0.01(0.98)+0.02(0.99)=0.0296. -$$ - -The collapsed edge receives `log((1-p)/p)`. The manual also documents which observable set survives: the set belonging to the most likely member of the parallel group. The rule is covered by dedicated DEM-collapse fixtures. - -## 5. Observables are not detector rows - -Detectors tell the decoder which parity constraints fired. Logical observables tell the scoring harness whether the predicted logical outcome differs from the sampled outcome. Conflating them is a common source of wrong LER numbers. - -The DEM therefore carries both: - -```text -detector incidence: used to build H and decode -observable incidence: used to score logical outcomes -``` - -This separation is the practical reason QECTOR rejects `correction != error` as a logical-error metric. - -## 6. Prior recalibration - -If observed detector events are available, the manual describes simple prior estimators: - -- for a weight-1 mechanism, use the detector firing rate; -- for a weight-2 mechanism, estimate the correlated XOR probability `P_xor = 2p(1-p)` and invert - - $$ - p = \frac{1-\sqrt{1-2P_{xor}}}{2}; - $$ - -- for a hyperedge, use the maximum firing rate among its detectors as the documented conservative estimate. - -Recalibration changes the weights and therefore the selected representative. It does not remove the need to validate `Hc=s`, nor to score logical observables under a declared experiment. - -## 7. A safe construction workflow - -```python -from qector_decoder_v3 import dem - -model = dem.from_stim( - circuit.detector_error_model(decompose_errors=True) -) - -if model.is_graphlike: - model = model.collapse_to_graph() - decoder = model.make_decoder("blossom") -else: - decoder = model.make_decoder("bposd") -``` - -The method names (`from_stim`, `is_graphlike`, `collapse_to_graph`, `make_decoder`) are confirmed in the v1.0.0 API; check the installed package for the full option set. The structural guard is the important part: never force a matching decoder onto a hypergraph model. - -## 8. DEM audit fields - -For a reproducible DEM-derived result, record: - -```text -source circuit or DEM text -Stim version, if used -decompose_errors setting -raw mechanism count -graphlike status -collapsed mechanism count -probability and weight convention -observable mapping -code distance and rounds -decoder class and seed -raw results and SHA-256 -``` - -A DEM object without its construction settings is not enough to reproduce a circuit-level comparison. - -## Takeaway - -The DEM is the bridge from a noisy circuit to a decoding problem. Parse mechanisms into columns, classify graphlike structure before choosing a solver, combine parallel probabilities correctly, keep observables for logical scoring, and record every transformation. The output is only as trustworthy as that pipeline. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/14WeightedDecoding/index.html b/blog/14WeightedDecoding/index.html deleted file mode 100644 index 689682b1..00000000 --- a/blog/14WeightedDecoding/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Weighted Decoding and Likelihood Priors · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026Noise ModelsBy Guillaume Lessard · 4 min read

Weighted Decoding and Likelihood Priors

Why log((1-p)/p) belongs in the graph and how matching, Union-Find, and space-time paths use weights.

Author: Guillaume Lessard
-Series: QECTOR Decoder v3 companion notes, Post 14
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: weighted decoding, likelihood ratios, DEM, MWPM, Union-Find

-

Abstract

-

An unweighted graph treats every fault mechanism as equally plausible. That may be acceptable for a uniform code-capacity toy model, but circuit-level decoding normally supplies distinct data and measurement probabilities. QECTOR's matching decoders accept log-likelihood weights, and its weighted Union-Find path uses the same probability information for adaptive growth. This post derives the weight, shows what changes under nonuniform noise, and explains why weighted-correctness claims must be separated from performance claims.

-

1. From probability to cost

-

For a binary mechanism with error probability p, the odds of an error versus no error are p/(1-p). The negative log odds are

-w(p)=−log⁡(p1−p)=log⁡(1−pp).w(p) = -\log\left(\frac{p}{1-p}\right) = \log\left(\frac{1-p}{p}\right). -

Independent mechanisms add log probabilities, so a path cost is the sum of its edge weights. Minimizing that cost is equivalent to selecting the most likely chain under the model assumptions.

-

The formula is monotone: rare mechanisms have larger costs, common mechanisms smaller costs. A decoder that ignores the variation cannot distinguish the two.

-

2. A two-edge comparison

-

Consider two available mechanisms:

-
p_a = 0.0001  -> w_a ~= 9.21
-p_b = 0.01    -> w_b ~= 4.60
-

A path containing one b edge is cheaper than a path containing one a edge, even when both paths have the same number of edges. Under an unweighted model they would tie. The weighted model therefore uses information the calibration or the DEM already provided.

-

This example does not say which correction is logically better. It says which representative the declared independent-noise likelihood prefers.

-

3. Uniform noise is a special case

-

If every mechanism has the same probability p, every edge receives the same weight. A path with fewer edges then also has lower total weight, so weighted and unweighted matching agree on the ordering. That is why a uniform code-capacity experiment can make an unweighted decoder look adequate.

-

The agreement does not transfer automatically to circuit-level noise, biased noise, or a model with different temporal and spatial rates.

-

4. Matching and Union-Find use weights differently

-

Blossom and Sparse Blossom turn weights into shortest-path distances and matching costs. Weighted Union-Find advances clusters by adaptive time steps that saturate frontier edges according to their lengths. The implementations share the probability-to-weight convention, but not the same optimization contract.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DecoderUse of weightsClaim boundary
BlossomExact weighted MWPM on audited small codesExactness is scoped
Sparse BlossomEvent times and candidate growthTested faithful/near-optimal scope
Union-FindAdaptive weighted cluster growthFaithful graphlike path
BP-OSDPriors and posterior reliabilitiesFaithful residual solve
-

Weights improve the model fit. They do not make an approximate decoder exact.

-

5. Space-time anisotropy

-

In a lifted detector lattice, data and measurement mechanisms commonly use different probabilities:

-wspace=log⁡(1−pdatapdata),wtime=log⁡(1−pmeaspmeas).w_{space}=\log\left(\frac{1-p_{data}}{p_{data}}\right),\qquad -w_{time}=\log\left(\frac{1-p_{meas}}{p_{meas}}\right). -

This creates an anisotropic graph: a measurement glitch may be cheaper to explain with a time-like path than with a spatial data chain. If the prior changes, the preferred path can change while the path-boundary proof remains unchanged.

-

6. Per-shot reweighting

-

The manual documents in-place edge-weight replacement in O(E) and a batched path that accepts one weight vector per shot. This supports workflows in which BP posteriors or calibrated mechanism rates alter the graph for each syndrome.

-

The validation target is equivalence between the reweighted and freshly constructed paths on the tested configurations. It is not a universal statement that all weight updates preserve the same correction or logical result.

-

7. Weight validation

-

Before running a weighted decoder, check:

-
0 < p < 1 for every mechanism
-probability ordering matches the calibration source
-boundary mechanisms have explicit treatment
-parallel DEM mechanisms collapsed consistently
-spatial and temporal weights use the intended channels
-weight dtype and precision recorded
-

The decoder should reject invalid weights at construction rather than silently treating them as uniform.

-

8. Claim boundaries

-

A weight formula is a mathematical contract. A logical-error curve is an empirical result. To publish the latter, include the circuit or DEM, code, noise model, shots, seed, decoder mode, environment, raw artifact, and confidence interval. Do not compare a weighted circuit-level result with an unweighted code-capacity result just because both use the same nominal p.

-

Takeaway

-

Likelihood weights are how a decoder listens to the noise model. Uniform weights are a useful special case, not a universal default. Put the prior into the DEM and the decoder, keep the structural graph/hypergraph guard, and report the resulting logical behaviour only with comparable artifacts.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/14_weighted_decoding.md b/blog/14_weighted_decoding.md deleted file mode 100644 index 1aa2bb85..00000000 --- a/blog/14_weighted_decoding.md +++ /dev/null @@ -1,100 +0,0 @@ -# Weighted Decoding: Why the Prior Belongs in the Graph - -Author: Guillaume Lessard -Series: QECTOR Decoder v3 companion notes, Post 14 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: weighted decoding, likelihood ratios, DEM, MWPM, Union-Find - -## Abstract - -An unweighted graph treats every fault mechanism as equally plausible. That may be acceptable for a uniform code-capacity toy model, but circuit-level decoding normally supplies distinct data and measurement probabilities. QECTOR's matching decoders accept log-likelihood weights, and its weighted Union-Find path uses the same probability information for adaptive growth. This post derives the weight, shows what changes under nonuniform noise, and explains why weighted-correctness claims must be separated from performance claims. - -## 1. From probability to cost - -For a binary mechanism with error probability `p`, the odds of an error versus no error are `p/(1-p)`. The negative log odds are - -$$ -w(p) = -\log\left(\frac{p}{1-p}\right) = \log\left(\frac{1-p}{p}\right). -$$ - -Independent mechanisms add log probabilities, so a path cost is the sum of its edge weights. Minimizing that cost is equivalent to selecting the most likely chain under the model assumptions. - -The formula is monotone: rare mechanisms have larger costs, common mechanisms smaller costs. A decoder that ignores the variation cannot distinguish the two. - -## 2. A two-edge comparison - -Consider two available mechanisms: - -```text -p_a = 0.0001 -> w_a ~= 9.21 -p_b = 0.01 -> w_b ~= 4.60 -``` - -A path containing one `b` edge is cheaper than a path containing one `a` edge, even when both paths have the same number of edges. Under an unweighted model they would tie. The weighted model therefore uses information the calibration or the DEM already provided. - -This example does not say which correction is logically better. It says which representative the declared independent-noise likelihood prefers. - -## 3. Uniform noise is a special case - -If every mechanism has the same probability `p`, every edge receives the same weight. A path with fewer edges then also has lower total weight, so weighted and unweighted matching agree on the ordering. That is why a uniform code-capacity experiment can make an unweighted decoder look adequate. - -The agreement does not transfer automatically to circuit-level noise, biased noise, or a model with different temporal and spatial rates. - -## 4. Matching and Union-Find use weights differently - -Blossom and Sparse Blossom turn weights into shortest-path distances and matching costs. Weighted Union-Find advances clusters by adaptive time steps that saturate frontier edges according to their lengths. The implementations share the probability-to-weight convention, but not the same optimization contract. - -| Decoder | Use of weights | Claim boundary | -|---|---|---| -| Blossom | Exact weighted MWPM on audited small codes | Exactness is scoped | -| Sparse Blossom | Event times and candidate growth | Tested faithful/near-optimal scope | -| Union-Find | Adaptive weighted cluster growth | Faithful graphlike path | -| BP-OSD | Priors and posterior reliabilities | Faithful residual solve | - -Weights improve the model fit. They do not make an approximate decoder exact. - -## 5. Space-time anisotropy - -In a lifted detector lattice, data and measurement mechanisms commonly use different probabilities: - -$$ -w_{space}=\log\left(\frac{1-p_{data}}{p_{data}}\right),\qquad -w_{time}=\log\left(\frac{1-p_{meas}}{p_{meas}}\right). -$$ - -This creates an anisotropic graph: a measurement glitch may be cheaper to explain with a time-like path than with a spatial data chain. If the prior changes, the preferred path can change while the path-boundary proof remains unchanged. - -## 6. Per-shot reweighting - -The manual documents in-place edge-weight replacement in `O(E)` and a batched path that accepts one weight vector per shot. This supports workflows in which BP posteriors or calibrated mechanism rates alter the graph for each syndrome. - -The validation target is equivalence between the reweighted and freshly constructed paths on the tested configurations. It is not a universal statement that all weight updates preserve the same correction or logical result. - -## 7. Weight validation - -Before running a weighted decoder, check: - -```text -0 < p < 1 for every mechanism -probability ordering matches the calibration source -boundary mechanisms have explicit treatment -parallel DEM mechanisms collapsed consistently -spatial and temporal weights use the intended channels -weight dtype and precision recorded -``` - -The decoder should reject invalid weights at construction rather than silently treating them as uniform. - -## 8. Claim boundaries - -A weight formula is a mathematical contract. A logical-error curve is an empirical result. To publish the latter, include the circuit or DEM, code, noise model, shots, seed, decoder mode, environment, raw artifact, and confidence interval. Do not compare a weighted circuit-level result with an unweighted code-capacity result just because both use the same nominal `p`. - -## Takeaway - -Likelihood weights are how a decoder listens to the noise model. Uniform weights are a useful special case, not a universal default. Put the prior into the DEM and the decoder, keep the structural graph/hypergraph guard, and report the resulting logical behaviour only with comparable artifacts. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/15LogicalErrorRates/index.html b/blog/15LogicalErrorRates/index.html deleted file mode 100644 index 553f0bb3..00000000 --- a/blog/15LogicalErrorRates/index.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Logical Error Rates Without the Wrong Metric · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026EvidenceBy Guillaume Lessard · 4 min read

Logical Error Rates Without the Wrong Metric

Score observables, compute Wilson intervals, keep noise models comparable, and report reproducible LERs.

Author: Guillaume Lessard
-Series: QECTOR Decoder v3 companion notes, Post 15
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: logical error rate, Wilson interval, observables, reproducible QEC

-

Abstract

-

Logical-error-rate plots are easy to produce and easy to misinterpret. In a degenerate stabilizer code, a correction can differ from the sampled physical error by a stabilizer and still be logically correct. QECTOR's methodology therefore scores observable flips from the same circuit, uses Wilson confidence intervals, and refuses comparisons across incompatible noise models. This post gives the metric, a hand calculation, and a report checklist.

-

1. Do not score raw correction equality

-

Let e be the sampled error and c the decoder correction. Syndrome faithfulness gives

-H(c+e)=0.H(c+e)=0. -

The residual sits in the kernel. It is logically harmless only when it also sits in the stabilizer row space. A different correction vector is not automatically a logical error.

-

For a circuit with logical observables, compare the sampled observable flips with the predicted observable flips after applying the correction. A shot counts as a logical error when those observable values differ.

-

This definition respects degeneracy and matches the manual's LER methodology.

-

2. The Wilson interval

-

Suppose k of n shots are logical errors and p_hat = k/n. The 95 percent Wilson interval is

-(p^+z2/(2n)−zp^(1−p^)/n+z2/(4n2)1+z2/n,p^+z2/(2n)+zp^(1−p^)/n+z2/(4n2)1+z2/n),\left( -\frac{\hat p + z^2/(2n) - z\sqrt{\hat p(1-\hat p)/n + z^2/(4n^2)}}{1+z^2/n}, -\frac{\hat p + z^2/(2n) + z\sqrt{\hat p(1-\hat p)/n + z^2/(4n^2)}}{1+z^2/n} -\right), -

where z = 1.959963985.

-

The interval stays inside [0,1] and behaves better than the Wald approximation when errors are rare or counts are small.

-

3. Hand calculation: 10 errors in 1000 shots

-

This is a worked example from the reference manual, not a product measurement. Take k=10 and n=1000, so p_hat=0.01. The manual evaluates the Wilson interval as approximately

-
lower ~= 0.00544
-upper ~= 0.01831
-

The point estimate is one percent, but the interval shows the uncertainty carried by only 1000 trials. Publishing 0.01 alone hides that uncertainty.

-

4. Comparability is part of the metric

-

The same nominal physical error value can describe different experiments. QECTOR tags results as code_capacity or circuit_level and refuses to compare across those model classes. A fair decoder comparison holds constant:

-
circuit generator or DEM
-decompose_errors and collapse settings
-distance and rounds
-physical noise source and value
-detector samples
-observable scoring
-shots and seed
-package versions and environment
-

Then the decoder row is the changing factor. Mixing a code-capacity QECTOR run with a circuit-level reference is not a meaningful leaderboard.

-

5. An example of a published comparison

-

The v1.0.0 package changelog ships a 120-test LER suite against PyMatching on a repetition code at d=3 and p=0.01. It reports ler_qector=0.00392 and ler_pymatching=0.00317, described as agreeing within a declared 4.5x margin.

-

These are measurements on one fixed workload, not universal claims. Their value is the discipline behind them: both decoders ran the same workload with the same noise value, so the comparison isolates the decoder rather than the setup.

-

6. The report schema

-

Every public LER report should include:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldExample content
CircuitGenerator command or checked-in .stim file
DEMSettings, counts, graphlike status
CodeFamily, distance, rounds, checks, qubits
NoiseChannel, rate, model tag
DecoderExact class, weights, BP/OSD flags
SamplingShots, warmup, seed, error count
StatisticsLER and Wilson interval
EnvironmentOS, CPU, RAM, Python/Rust/packages
ArtifactRaw JSON/CSV path and SHA-256
-

If one of these fields is missing, the result may still be a useful smoke test, but it is not a complete portable evidence artifact.

-

7. Correctness before statistics

-

The LER harness should reject or record unfaithful shots before logical scoring. The sequence is:

-
    -
  1. Generate or load the same detector samples for every decoder.
  2. -
  3. Decode each syndrome.
  4. -
  5. Check H @ correction == syndrome on reachable inputs.
  6. -
  7. Compute observable flips.
  8. -
  9. Count logical mismatches.
  10. -
  11. Compute the LER and its interval.
  12. -
-

This stops an invalid correction from hiding inside an apparently low logical-error rate.

-

8. Threshold language

-

A crossing in a plot is a workload result, not a property of a decoder in the abstract. Safe wording names the code, noise model, distance range, shots, seed, decoder configuration, and surviving artifact. The reference manual excludes threshold claims that lack that evidence.

-

Likewise, do not infer that exact MWPM is always logically best on a non-graphlike code, or that a GPU result is faster simply because it ran on a GPU. The methodology is part of the claim.

-

Takeaway

-

An honest LER pipeline has three layers: syndrome validity, logical-observable scoring, and statistical uncertainty. Wilson intervals quantify the sampling uncertainty; comparable noise models protect the comparison; raw artifacts let another engineer check the sentence. That is enough to make a plot evidence rather than decoration.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/15_logical_error_rates.md b/blog/15_logical_error_rates.md deleted file mode 100644 index 30ef3822..00000000 --- a/blog/15_logical_error_rates.md +++ /dev/null @@ -1,120 +0,0 @@ -# Logical Error Rates Without the Wrong Metric - -Author: Guillaume Lessard -Series: QECTOR Decoder v3 companion notes, Post 15 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: logical error rate, Wilson interval, observables, reproducible QEC - -## Abstract - -Logical-error-rate plots are easy to produce and easy to misinterpret. In a degenerate stabilizer code, a correction can differ from the sampled physical error by a stabilizer and still be logically correct. QECTOR's methodology therefore scores observable flips from the same circuit, uses Wilson confidence intervals, and refuses comparisons across incompatible noise models. This post gives the metric, a hand calculation, and a report checklist. - -## 1. Do not score raw correction equality - -Let `e` be the sampled error and `c` the decoder correction. Syndrome faithfulness gives - -$$ -H(c+e)=0. -$$ - -The residual sits in the kernel. It is logically harmless only when it also sits in the stabilizer row space. A different correction vector is not automatically a logical error. - -For a circuit with logical observables, compare the sampled observable flips with the predicted observable flips after applying the correction. A shot counts as a logical error when those observable values differ. - -This definition respects degeneracy and matches the manual's LER methodology. - -## 2. The Wilson interval - -Suppose `k` of `n` shots are logical errors and `p_hat = k/n`. The 95 percent Wilson interval is - -$$ -\left( -\frac{\hat p + z^2/(2n) - z\sqrt{\hat p(1-\hat p)/n + z^2/(4n^2)}}{1+z^2/n}, -\frac{\hat p + z^2/(2n) + z\sqrt{\hat p(1-\hat p)/n + z^2/(4n^2)}}{1+z^2/n} -\right), -$$ - -where `z = 1.959963985`. - -The interval stays inside `[0,1]` and behaves better than the Wald approximation when errors are rare or counts are small. - -## 3. Hand calculation: 10 errors in 1000 shots - -This is a worked example from the reference manual, not a product measurement. Take `k=10` and `n=1000`, so `p_hat=0.01`. The manual evaluates the Wilson interval as approximately - -```text -lower ~= 0.00544 -upper ~= 0.01831 -``` - -The point estimate is one percent, but the interval shows the uncertainty carried by only 1000 trials. Publishing `0.01` alone hides that uncertainty. - -## 4. Comparability is part of the metric - -The same nominal physical error value can describe different experiments. QECTOR tags results as `code_capacity` or `circuit_level` and refuses to compare across those model classes. A fair decoder comparison holds constant: - -```text -circuit generator or DEM -decompose_errors and collapse settings -distance and rounds -physical noise source and value -detector samples -observable scoring -shots and seed -package versions and environment -``` - -Then the decoder row is the changing factor. Mixing a code-capacity QECTOR run with a circuit-level reference is not a meaningful leaderboard. - -## 5. An example of a published comparison - -The v1.0.0 package changelog ships a 120-test LER suite against PyMatching on a repetition code at `d=3` and `p=0.01`. It reports `ler_qector=0.00392` and `ler_pymatching=0.00317`, described as agreeing within a declared 4.5x margin. - -These are measurements on one fixed workload, not universal claims. Their value is the discipline behind them: both decoders ran the same workload with the same noise value, so the comparison isolates the decoder rather than the setup. - -## 6. The report schema - -Every public LER report should include: - -| Field | Example content | -|---|---| -| Circuit | Generator command or checked-in `.stim` file | -| DEM | Settings, counts, graphlike status | -| Code | Family, distance, rounds, checks, qubits | -| Noise | Channel, rate, model tag | -| Decoder | Exact class, weights, BP/OSD flags | -| Sampling | Shots, warmup, seed, error count | -| Statistics | LER and Wilson interval | -| Environment | OS, CPU, RAM, Python/Rust/packages | -| Artifact | Raw JSON/CSV path and SHA-256 | - -If one of these fields is missing, the result may still be a useful smoke test, but it is not a complete portable evidence artifact. - -## 7. Correctness before statistics - -The LER harness should reject or record unfaithful shots before logical scoring. The sequence is: - -1. Generate or load the same detector samples for every decoder. -2. Decode each syndrome. -3. Check `H @ correction == syndrome` on reachable inputs. -4. Compute observable flips. -5. Count logical mismatches. -6. Compute the LER and its interval. - -This stops an invalid correction from hiding inside an apparently low logical-error rate. - -## 8. Threshold language - -A crossing in a plot is a workload result, not a property of a decoder in the abstract. Safe wording names the code, noise model, distance range, shots, seed, decoder configuration, and surviving artifact. The reference manual excludes threshold claims that lack that evidence. - -Likewise, do not infer that exact MWPM is always logically best on a non-graphlike code, or that a GPU result is faster simply because it ran on a GPU. The methodology is part of the claim. - -## Takeaway - -An honest LER pipeline has three layers: syndrome validity, logical-observable scoring, and statistical uncertainty. Wilson intervals quantify the sampling uncertainty; comparable noise models protect the comparison; raw artifacts let another engineer check the sentence. That is enough to make a plot evidence rather than decoration. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/16DecoderSelection/index.html b/blog/16DecoderSelection/index.html deleted file mode 100644 index 4ead82e0..00000000 --- a/blog/16DecoderSelection/index.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Choosing a Decoder From the Matrix · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026OrchestrationBy Guillaume Lessard · 5 min read

Choosing a Decoder From the Matrix

A practical decision guide for graphlike, qLDPC, space-time, streaming, CSS, and batch workloads.

Author: Guillaume Lessard / qector.store
-Series: QECTOR Decoder v3 companion notes, Post 16
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: decoder selection, QEC architecture, graphlike codes, qLDPC, routing

-

Abstract

-

Decoder selection gets easier when it starts with structural facts. Is the induced matrix graphlike? Are weights available? Is the workload single-shot, streaming, or batched? Does the job prioritize accuracy, speed, or a balance of both? This guide turns those questions into a practical decision path and spells out what each choice guarantees and what it does not.

-

1. Start with the check structure

-

Inspect check_to_qubits or the DEM-derived matrix. Count how many checks each qubit or mechanism touches, then take the maximum.

-
max degree <= 2  -> graphlike candidate set
-max degree > 2   -> non-graphlike; BP-OSD path
-

Do this before reading the code-family label. A rotated surface code and a hypergraph-product qLDPC code are both stabilizer codes, yet they need different decoder families. The matrix decides, not the name.

-

2. The decision guide

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Workload factFirst candidateWhy
Small code with stored entriesLookup tableExhaustive stored mapping
Graphlike, accuracy priorityBlossomWeighted MWPM reference path
Graphlike, larger sparse instanceSparse BlossomEvent-driven tight-edge growth
Graphlike, speed priorityUnion-FindCluster growth and peeling
Graphlike with escalation policyHybrid cascadeFaithful pre-filter plus fallback
Non-graphlike qLDPC or hyperedgesBP-OSDArbitrary GF(2) matrix path
Small ambiguous qLDPC componentsAmbiguity clusteringExact local enumeration where bounded
Multiple noisy roundsSpace-time decoderLifts data and measurement faults
Repeated online windowStreaming primitivesBounded-history workflow
Large graphlike batchCPU/GPU batchIndependent per-shot execution
Correlated CSS sectorsTwo-stage decoderFeeds X-induced syndrome into Z
-

This table lists domains and contracts, not a universal performance ranking.

-

3. Accuracy, speed, and balanced priorities

-

For graphlike inputs, a routing policy can set a priority:

-
    -
  • accuracy: exact Blossom for small and moderate problems, Sparse Blossom for larger ones;
  • -
  • speed: Union-Find, or a batch path when the workload is large enough;
  • -
  • balanced: interpolate from code size and batch shape.
  • -
-

The exact thresholds are configuration, not physics. Record them alongside any published result. For a non-graphlike problem, the structure forces the BP-OSD path, whatever the speed or accuracy preference.

-

4. A practical routing sequence

-
1. Parse checks or DEM.
-2. Verify the reachable-syndrome convention and boundaries.
-3. Classify graphlike versus hypergraph.
-4. Select weights from the DEM when available.
-5. Choose single-shot, batch, space-time, or streaming mode.
-6. Select the decoder priority.
-7. Decode and verify H @ c == s.
-8. Score logical observables or escalate.
-

Step 7 belongs in the sequence even when the decoder's own tests already establish faithfulness. It guards the integration boundary: matrix ordering, dtype, boundary convention, and syndrome shape can all be wrong outside the decoder.

-

5. What each choice means

-

Blossom

-

Use it as the weighted MWPM reference for graphlike problems and for audited exactness comparisons on small codes. It does not accept a hypergraph under a new label.

-

Sparse Blossom

-

Use it when event-driven region growth is the right tool. The v1.0.0 claim is faithful and near-optimal within tested scope, with escalation when the sparse candidate solve is incomplete or unfaithful.

-

Union-Find

-

Use it for supported graphlike codes when near-linear cluster growth and peeling are the contract you want. It is not minimum-weight matching, and its logical behaviour must be evaluated on its own.

-

BP-OSD

-

Use it for arbitrary reachable GF(2) matrices, especially LDPC/qLDPC and hyperedge structures. BP ranks candidates; OSD then solves the residual exactly over a basis.

-

Space-time

-

Use it when measurement faults across rounds are part of the problem. A single-round decoder cannot tell whether a transient detector event was spatial or temporal without an appropriate history model.

-

6. A decision example

-

Suppose a team has:

-
rotated surface patch
-graphlike check structure
-calibrated data and measurement probabilities
-many independent shots
-offline logical-error estimation
-

The path is:

-
DEM -> graph collapse and weights -> space-time if rounds are noisy
-    -> CPU/GPU batch for the sampling workload
-    -> observable scoring and Wilson interval
-

For a single online round with a tight latency budget, the same physical code might use a Union-Find or cascade path. The router is allowed to choose differently because the workload changed, and the claim and timing basis change with it.

-

7. Do not confuse API stability with algorithmic scope

-

Version 1.0.0 freezes a stable surface for the whole 1.x line. Stable symbols include UnionFindDecoder, BlossomDecoder, SparseBlossomDecoder, NativeAutoDecoder, the four generate_*_code_checks helpers, set_license_key, get_license_info, the Sinter and qiskit-qec entry points, and DecodeResult.

-

Provisional surfaces stay supported and tested, but their exact shape may change with a changelog note. This group includes BP-OSD tuning kwargs, GPU batch constructors, and network surfaces.

-

A stable constructor does not make every backend valid for every matrix. API stability answers one question: "can I rely on this symbol across the 1.x line?" Domain eligibility answers another: "is this algorithm valid for my problem?"

-

8. Selection checklist

-

Before committing to a decoder, write one sentence for each:

-
My matrix is graphlike because ...
-My noise model is ... and my weights are ...
-My workload is single-shot, batch, space-time, or streaming because ...
-My priority is ...
-My logical metric is ...
-My correctness evidence is ...
-My fallback is ...
-

If those sentences cannot be written, the decoder choice is not ready for a benchmark or a deployment review.

-

Takeaway

-

Choose the decoder from the matrix, the noise model, the time horizon, and the workload shape. The code name is a hint; the structural guard and the evidence contract are the decision. QECTOR's orchestration layer makes that decision explicit, but it does not replace engineering judgment.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/16_decoder_selection.md b/blog/16_decoder_selection.md deleted file mode 100644 index b5063921..00000000 --- a/blog/16_decoder_selection.md +++ /dev/null @@ -1,142 +0,0 @@ -# Choosing a QEC Decoder From the Matrix, Not the Marketing Name - -Author: Guillaume Lessard / qector.store -Series: QECTOR Decoder v3 companion notes, Post 16 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: decoder selection, QEC architecture, graphlike codes, qLDPC, routing - -## Abstract - -Decoder selection gets easier when it starts with structural facts. Is the induced matrix graphlike? Are weights available? Is the workload single-shot, streaming, or batched? Does the job prioritize accuracy, speed, or a balance of both? This guide turns those questions into a practical decision path and spells out what each choice guarantees and what it does not. - -## 1. Start with the check structure - -Inspect `check_to_qubits` or the DEM-derived matrix. Count how many checks each qubit or mechanism touches, then take the maximum. - -```text -max degree <= 2 -> graphlike candidate set -max degree > 2 -> non-graphlike; BP-OSD path -``` - -Do this before reading the code-family label. A rotated surface code and a hypergraph-product qLDPC code are both stabilizer codes, yet they need different decoder families. The matrix decides, not the name. - -## 2. The decision guide - -| Workload fact | First candidate | Why | -|---|---|---| -| Small code with stored entries | Lookup table | Exhaustive stored mapping | -| Graphlike, accuracy priority | Blossom | Weighted MWPM reference path | -| Graphlike, larger sparse instance | Sparse Blossom | Event-driven tight-edge growth | -| Graphlike, speed priority | Union-Find | Cluster growth and peeling | -| Graphlike with escalation policy | Hybrid cascade | Faithful pre-filter plus fallback | -| Non-graphlike qLDPC or hyperedges | BP-OSD | Arbitrary GF(2) matrix path | -| Small ambiguous qLDPC components | Ambiguity clustering | Exact local enumeration where bounded | -| Multiple noisy rounds | Space-time decoder | Lifts data and measurement faults | -| Repeated online window | Streaming primitives | Bounded-history workflow | -| Large graphlike batch | CPU/GPU batch | Independent per-shot execution | -| Correlated CSS sectors | Two-stage decoder | Feeds X-induced syndrome into Z | - -This table lists domains and contracts, not a universal performance ranking. - -## 3. Accuracy, speed, and balanced priorities - -For graphlike inputs, a routing policy can set a priority: - -- `accuracy`: exact Blossom for small and moderate problems, Sparse Blossom for larger ones; -- `speed`: Union-Find, or a batch path when the workload is large enough; -- `balanced`: interpolate from code size and batch shape. - -The exact thresholds are configuration, not physics. Record them alongside any published result. For a non-graphlike problem, the structure forces the BP-OSD path, whatever the speed or accuracy preference. - -## 4. A practical routing sequence - -```text -1. Parse checks or DEM. -2. Verify the reachable-syndrome convention and boundaries. -3. Classify graphlike versus hypergraph. -4. Select weights from the DEM when available. -5. Choose single-shot, batch, space-time, or streaming mode. -6. Select the decoder priority. -7. Decode and verify H @ c == s. -8. Score logical observables or escalate. -``` - -Step 7 belongs in the sequence even when the decoder's own tests already establish faithfulness. It guards the integration boundary: matrix ordering, dtype, boundary convention, and syndrome shape can all be wrong outside the decoder. - -## 5. What each choice means - -### Blossom - -Use it as the weighted MWPM reference for graphlike problems and for audited exactness comparisons on small codes. It does not accept a hypergraph under a new label. - -### Sparse Blossom - -Use it when event-driven region growth is the right tool. The v1.0.0 claim is faithful and near-optimal within tested scope, with escalation when the sparse candidate solve is incomplete or unfaithful. - -### Union-Find - -Use it for supported graphlike codes when near-linear cluster growth and peeling are the contract you want. It is not minimum-weight matching, and its logical behaviour must be evaluated on its own. - -### BP-OSD - -Use it for arbitrary reachable GF(2) matrices, especially LDPC/qLDPC and hyperedge structures. BP ranks candidates; OSD then solves the residual exactly over a basis. - -### Space-time - -Use it when measurement faults across rounds are part of the problem. A single-round decoder cannot tell whether a transient detector event was spatial or temporal without an appropriate history model. - -## 6. A decision example - -Suppose a team has: - -```text -rotated surface patch -graphlike check structure -calibrated data and measurement probabilities -many independent shots -offline logical-error estimation -``` - -The path is: - -```text -DEM -> graph collapse and weights -> space-time if rounds are noisy - -> CPU/GPU batch for the sampling workload - -> observable scoring and Wilson interval -``` - -For a single online round with a tight latency budget, the same physical code might use a Union-Find or cascade path. The router is allowed to choose differently because the workload changed, and the claim and timing basis change with it. - -## 7. Do not confuse API stability with algorithmic scope - -Version 1.0.0 freezes a stable surface for the whole 1.x line. Stable symbols include `UnionFindDecoder`, `BlossomDecoder`, `SparseBlossomDecoder`, `NativeAutoDecoder`, the four `generate_*_code_checks` helpers, `set_license_key`, `get_license_info`, the Sinter and qiskit-qec entry points, and `DecodeResult`. - -Provisional surfaces stay supported and tested, but their exact shape may change with a changelog note. This group includes BP-OSD tuning kwargs, GPU batch constructors, and network surfaces. - -A stable constructor does not make every backend valid for every matrix. API stability answers one question: "can I rely on this symbol across the 1.x line?" Domain eligibility answers another: "is this algorithm valid for my problem?" - -## 8. Selection checklist - -Before committing to a decoder, write one sentence for each: - -```text -My matrix is graphlike because ... -My noise model is ... and my weights are ... -My workload is single-shot, batch, space-time, or streaming because ... -My priority is ... -My logical metric is ... -My correctness evidence is ... -My fallback is ... -``` - -If those sentences cannot be written, the decoder choice is not ready for a benchmark or a deployment review. - -## Takeaway - -Choose the decoder from the matrix, the noise model, the time horizon, and the workload shape. The code name is a hint; the structural guard and the evidence contract are the decision. QECTOR's orchestration layer makes that decision explicit, but it does not replace engineering judgment. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/17ReproducibleBenchmarks/index.html b/blog/17ReproducibleBenchmarks/index.html deleted file mode 100644 index 424ddb8a..00000000 --- a/blog/17ReproducibleBenchmarks/index.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Reproducible QEC Benchmarks · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026EvidenceBy Guillaume Lessard · 4 min read

Reproducible QEC Benchmarks

Separate correctness from performance and make every benchmark claim traceable to an artifact and hash.

Author: Guillaume Lessard / qector.store
-Series: QECTOR Decoder v3 companion notes, Post 17
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: reproducible research, QEC benchmarks, artifacts, latency, logical error rate

-

Abstract

-

A quantum-decoder benchmark mixes a mathematical problem, a stochastic workload, compiled code, and real hardware. A number without that context is not portable evidence. The QECTOR v1.0.0 manual defines the metadata, statistical, memory, and claim rules that turn a local run into a reviewable artifact. This post turns those rules into a practical checklist for research teams, systems engineers, and product reviews.

-

1. Start with a scoped sentence

-

Write the claim before writing the benchmark script. A safe claim looks like:

-
-

On this checked-in artifact, for this code, noise model, seed, batch shape, and environment, decoder A produced this measured result.

-
-

An unsafe claim looks like:

-
-

Decoder A is universally faster or always more accurate.

-
-

The manual excludes the second style. It also records that earlier benchmark artifacts were withdrawn after a core fingerprint change, so provenance belongs in every claim.

-

2. Separate correctness from performance

-

Answer the correctness questions before the timing questions:

-
Did every reachable syndrome produce H @ c == s?
-Did the batch path equal the per-shot path where that is claimed?
-Were observables scored rather than raw correction vectors?
-

Only after those gates pass should the run report latency, throughput, memory, or logical-error statistics.

-

3. Cold path and hot path

-

Decoder construction covers graph creation, weight preprocessing, allocations, and setup. That is the cold path. Repeated decode() calls on a pre-built decoder with in-memory syndromes are the hot path.

-

Both are useful, but they answer different questions:

- - - - - - - - - - - - - - - - - - - - - - - - - -
MeasurementIncludesAppropriate for
Cold pathBuild and setupPer-job startup or service provisioning
Hot pathRepeated decode onlySteady-state repeated workloads
End to endInput, transfers, decode, outputApplication-level capacity
-

Never present a hot-path number as end-to-end performance without labeling the omitted work.

-

4. Required benchmark metadata

-

The manual's artifact table requires:

-
code family and distance/size
-rounds, checks, qubits, detectors
-physical error rate and noise source
-code-capacity or circuit-level tag
-decoder class and all mode flags
-shots, trials, warmup, and seed
-metric definition
-OS, CPU, RAM, Python, Rust, package, GPU, runtime
-git commit or release tag
-raw JSON/CSV path and SHA-256
-

If a number depends on a GPU or driver, record the exact device and runtime. If memory is measured, say whether it is Python allocation, process RSS, native heap, or VRAM.

-

5. Statistical reporting

-

For latency, report the distribution: n, mean, median, standard deviation, minimum, maximum, p50, p90, p95, p99, and a confidence interval on the mean.

-

For logical error rates, report errors, shots, the LER, and a Wilson interval. With zero observed errors, do not claim a zero logical-error probability; report the interval and the sampling context.

-

For decoder comparisons, use the same sampled detector data, DEM settings, observable map, and noise model. A different random sample supports an independent replication, but it is not a paired head-to-head comparison unless the pairing protocol is stated.

-

6. Reproducible command design

-

A good command leaves no hidden degree of freedom:

-
benchmark --code rotated_surface --distance 5
-          --noise circuit_level --p 0.001
-          --decoder blossom --weighted
-          --shots 100000 --seed 42
-          --out results/run.json
-

Store the command next to the output. The environment block and the commit hash are what let a reviewer tell a changed workload apart from a changed implementation.

-

7. Benchmark images need a disposition

-

The manual keeps structural figures and excludes charts tied to withdrawn or non-surviving hardware measurements. A locally generated chart is still useful, but its status must be explicit:

-
structural illustration
-local smoke measurement
-checked-in evidence artifact
-published comparative result
-

Only the last two should support public numerical claims, and only together with the accompanying artifact.

-

8. A release-review checklist

-

Before quoting a result:

-
    -
  1. Pin the release or commit.
  2. -
  3. Capture dependency versions and hardware.
  4. -
  5. Run the local correctness and import smoke tests.
  6. -
  7. Label hot, cold, and end-to-end timing.
  8. -
  9. Store raw JSON/CSV and hash it.
  10. -
  11. Attach a Wilson interval for LER.
  12. -
  13. State the safe and unsafe wording.
  14. -
  15. Remove customer data, proprietary circuits, and secrets from logs.
  16. -
-

Item 8 matters for service deployments: a benchmark artifact can accidentally disclose inputs that were never meant to be public.

-

Takeaway

-

Reproducibility is not a citation added after the graph. It is the link between the claim, the command, the environment, the raw artifact, and the hash. That discipline makes a local QEC result useful to another lab and keeps product language honest.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/17_reproducible_benchmarks.md b/blog/17_reproducible_benchmarks.md deleted file mode 100644 index 52dcb773..00000000 --- a/blog/17_reproducible_benchmarks.md +++ /dev/null @@ -1,127 +0,0 @@ -# Reproducible QEC Benchmarks: The Artifact Is Part of the Result - -Author: Guillaume Lessard / qector.store -Series: QECTOR Decoder v3 companion notes, Post 17 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: reproducible research, QEC benchmarks, artifacts, latency, logical error rate - -## Abstract - -A quantum-decoder benchmark mixes a mathematical problem, a stochastic workload, compiled code, and real hardware. A number without that context is not portable evidence. The QECTOR v1.0.0 manual defines the metadata, statistical, memory, and claim rules that turn a local run into a reviewable artifact. This post turns those rules into a practical checklist for research teams, systems engineers, and product reviews. - -## 1. Start with a scoped sentence - -Write the claim before writing the benchmark script. A safe claim looks like: - -> On this checked-in artifact, for this code, noise model, seed, batch shape, and environment, decoder A produced this measured result. - -An unsafe claim looks like: - -> Decoder A is universally faster or always more accurate. - -The manual excludes the second style. It also records that earlier benchmark artifacts were withdrawn after a core fingerprint change, so provenance belongs in every claim. - -## 2. Separate correctness from performance - -Answer the correctness questions before the timing questions: - -```text -Did every reachable syndrome produce H @ c == s? -Did the batch path equal the per-shot path where that is claimed? -Were observables scored rather than raw correction vectors? -``` - -Only after those gates pass should the run report latency, throughput, memory, or logical-error statistics. - -## 3. Cold path and hot path - -Decoder construction covers graph creation, weight preprocessing, allocations, and setup. That is the cold path. Repeated `decode()` calls on a pre-built decoder with in-memory syndromes are the hot path. - -Both are useful, but they answer different questions: - -| Measurement | Includes | Appropriate for | -|---|---|---| -| Cold path | Build and setup | Per-job startup or service provisioning | -| Hot path | Repeated decode only | Steady-state repeated workloads | -| End to end | Input, transfers, decode, output | Application-level capacity | - -Never present a hot-path number as end-to-end performance without labeling the omitted work. - -## 4. Required benchmark metadata - -The manual's artifact table requires: - -```text -code family and distance/size -rounds, checks, qubits, detectors -physical error rate and noise source -code-capacity or circuit-level tag -decoder class and all mode flags -shots, trials, warmup, and seed -metric definition -OS, CPU, RAM, Python, Rust, package, GPU, runtime -git commit or release tag -raw JSON/CSV path and SHA-256 -``` - -If a number depends on a GPU or driver, record the exact device and runtime. If memory is measured, say whether it is Python allocation, process RSS, native heap, or VRAM. - -## 5. Statistical reporting - -For latency, report the distribution: `n`, mean, median, standard deviation, minimum, maximum, p50, p90, p95, p99, and a confidence interval on the mean. - -For logical error rates, report errors, shots, the LER, and a Wilson interval. With zero observed errors, do not claim a zero logical-error probability; report the interval and the sampling context. - -For decoder comparisons, use the same sampled detector data, DEM settings, observable map, and noise model. A different random sample supports an independent replication, but it is not a paired head-to-head comparison unless the pairing protocol is stated. - -## 6. Reproducible command design - -A good command leaves no hidden degree of freedom: - -```text -benchmark --code rotated_surface --distance 5 - --noise circuit_level --p 0.001 - --decoder blossom --weighted - --shots 100000 --seed 42 - --out results/run.json -``` - -Store the command next to the output. The environment block and the commit hash are what let a reviewer tell a changed workload apart from a changed implementation. - -## 7. Benchmark images need a disposition - -The manual keeps structural figures and excludes charts tied to withdrawn or non-surviving hardware measurements. A locally generated chart is still useful, but its status must be explicit: - -```text -structural illustration -local smoke measurement -checked-in evidence artifact -published comparative result -``` - -Only the last two should support public numerical claims, and only together with the accompanying artifact. - -## 8. A release-review checklist - -Before quoting a result: - -1. Pin the release or commit. -2. Capture dependency versions and hardware. -3. Run the local correctness and import smoke tests. -4. Label hot, cold, and end-to-end timing. -5. Store raw JSON/CSV and hash it. -6. Attach a Wilson interval for LER. -7. State the safe and unsafe wording. -8. Remove customer data, proprietary circuits, and secrets from logs. - -Item 8 matters for service deployments: a benchmark artifact can accidentally disclose inputs that were never meant to be public. - -## Takeaway - -Reproducibility is not a citation added after the graph. It is the link between the claim, the command, the environment, the raw artifact, and the hash. That discipline makes a local QEC result useful to another lab and keeps product language honest. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/18RustPyo3Architecture/index.html b/blog/18RustPyo3Architecture/index.html deleted file mode 100644 index 7e1dfeca..00000000 --- a/blog/18RustPyo3Architecture/index.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rust, PyO3, and QEC Memory Discipline · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026SystemsBy Guillaume Lessard · 4 min read

Rust, PyO3, and QEC Memory Discipline

FFI buffers, selective repacking, GIL release, Rayon worker state, and memory metrics at the Python boundary.

Author: Guillaume Lessard / qector.store
-Series: QECTOR Decoder v3 companion notes, Post 18
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: Rust, PyO3, Python, FFI, Rayon, memory model, QEC systems

-

Abstract

-

Quantum-error-correction software sits between numerical Python workflows and stateful, performance-sensitive decoder cores. QECTOR's v1.0.0 architecture uses Rust with PyO3 bindings, contiguous NumPy buffers, GIL release, Rayon batch workers, and reusable scratch state. This post explains the boundary as an engineering contract, shows what can be measured safely, and names the memory and threading properties that should be tested rather than assumed.

-

1. The boundary has a shape

-

The public decoder contract is simple:

-
input:  check structure + reachable uint8 syndrome
-output: uint8 correction with length n_qubits
-gate:   H @ correction == syndrome modulo 2
-

The FFI layer must preserve shape, dtype, contiguity, and ownership long enough for the Rust core to consume the data safely. A mathematically correct decoder can still fail at integration time if Python sends a transposed batch, a non-contiguous view, or a dtype the binding reads differently.

-

2. Contiguous buffers and selective repacking

-

The manual documents contiguous uint8 NumPy buffers across PyO3. The boundary repacks only when an input is non-contiguous or has the wrong dtype; it does not copy gratuitously.

-

That policy creates two test cases:

-
contiguous uint8 input -> direct boundary path
-non-contiguous/wrong dtype input -> explicit normalization path
-

Both paths must return the same correction and the same faithfulness result. The copy belongs to the cold or boundary path, never to the decoder's hot path.

-

3. Releasing the GIL

-

Decode calls release the Python GIL so compiled work can run alongside other Python threads. This suits independent batches or service workers, but it does not make every Rust data structure safe to share mutably. The documented design uses worker-local scratch and explicit ownership boundaries.

-

The right concurrency test is not "many threads ran." It is:

-
same input + different worker count -> same output
-batch decode == per-shot decode
-prior calls do not change later output
-

Those properties are observable and can be locked with tests.

-

4. Rayon and batch determinism

-

Batch paths use Rayon data parallelism. Each worker keeps its own scratch so the output does not depend on row-to-worker assignment. That matters for Union-Find style paths, where several valid forests could otherwise yield different correction vectors.

-

Determinism is a contract only when the implementation and the tests establish it. A parallel loop is not automatically deterministic.

-

5. Reusable memory

-

The hot paths allocate buffers sized to the graph, reset them in place, and grow only when the problem grows. The manual describes this as allocation-free hot-path construction for the relevant backends.

-

Report memory in separate categories:

- - - - - - - - - - - - - - - - - - - - - - - - - -
CategoryAppropriate tool or evidence
Python allocationstracemalloc
Process RSSpsutil, when installed
Native Rust heapBackend diagnostics
GPU memoryVendor/runtime diagnostics
-

Do not merge these numbers into one "memory usage" figure. They measure different allocators and lifetimes.

-

6. The module map

-

The reference manual groups the core into:

-
matching       exact and sparse MWPM
-union-find     graphlike single and batch paths
-BP-OSD         belief propagation, GF(2), ambiguity components
-GPU            CUDA/OpenCL batch kernels
-temporal       space-time and streaming primitives
-routing        auto, cascade, two-stage
-learned        GNN and neural predecoders
-services       MCP, gRPC, metrics, licensing
-utilities      bit packing, GF(2), shared infrastructure
-

The public architecture explains responsibilities without exposing proprietary internals. That is the right level for an integration guide.

-

7. A safe FFI smoke test

-

The manual's build-and-import path ends with a small import smoke. A decode smoke adds a direct parity check:

-
import numpy as np
-from qector_decoder_v3 import UnionFindDecoder
-
-checks = [[0, 1], [1, 2], [2, 3], [3, 4]]
-syndrome = np.array([0, 1, 0, 0], dtype=np.uint8)
-decoder = UnionFindDecoder(checks, n_qubits=5)
-correction = decoder.decode(syndrome)
-
-assert correction.dtype == np.uint8
-assert correction.shape == (5,)
-

Then verify H @ correction == syndrome with the package's structured result and validation helpers. The invariant should stay visible in tests, even when production code uses the richer helpers.

-

8. Packaging consequences

-

The release path publishes deterministic binary wheels only; no source distribution is shipped. A wheel smoke test therefore matters: install the built wheel, import it, decode a known reachable syndrome, and assert the parity equation.

-

The v1.0.0 wheels are CPU-only. No published wheel ships a CUDA binary. CUDA and OpenCL are build feature-gates: OpenCL is a documented source-build path, and CUDA support is compiled in through its own build configuration. Whether a GPU path is actually usable is a runtime question, probed with a runtime check such as cuda_is_available(). Packaging, feature flags, driver, and device presence all belong in the environment block of any benchmark.

-

Takeaway

-

The FFI boundary is part of the decoder. Contiguous buffers, selective copying, GIL release, worker-local scratch, deterministic batches, and separate memory metrics are testable contracts. Treat them as architecture, not incidental optimization, and the Python-facing system becomes much easier to audit.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/18_rust_pyo3_architecture.md b/blog/18_rust_pyo3_architecture.md deleted file mode 100644 index e8f0c830..00000000 --- a/blog/18_rust_pyo3_architecture.md +++ /dev/null @@ -1,123 +0,0 @@ -# Rust, PyO3, and QEC Memory Discipline at the FFI Boundary - -Author: Guillaume Lessard / qector.store -Series: QECTOR Decoder v3 companion notes, Post 18 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: Rust, PyO3, Python, FFI, Rayon, memory model, QEC systems - -## Abstract - -Quantum-error-correction software sits between numerical Python workflows and stateful, performance-sensitive decoder cores. QECTOR's v1.0.0 architecture uses Rust with PyO3 bindings, contiguous NumPy buffers, GIL release, Rayon batch workers, and reusable scratch state. This post explains the boundary as an engineering contract, shows what can be measured safely, and names the memory and threading properties that should be tested rather than assumed. - -## 1. The boundary has a shape - -The public decoder contract is simple: - -```text -input: check structure + reachable uint8 syndrome -output: uint8 correction with length n_qubits -gate: H @ correction == syndrome modulo 2 -``` - -The FFI layer must preserve shape, dtype, contiguity, and ownership long enough for the Rust core to consume the data safely. A mathematically correct decoder can still fail at integration time if Python sends a transposed batch, a non-contiguous view, or a dtype the binding reads differently. - -## 2. Contiguous buffers and selective repacking - -The manual documents contiguous `uint8` NumPy buffers across PyO3. The boundary repacks only when an input is non-contiguous or has the wrong dtype; it does not copy gratuitously. - -That policy creates two test cases: - -```text -contiguous uint8 input -> direct boundary path -non-contiguous/wrong dtype input -> explicit normalization path -``` - -Both paths must return the same correction and the same faithfulness result. The copy belongs to the cold or boundary path, never to the decoder's hot path. - -## 3. Releasing the GIL - -Decode calls release the Python GIL so compiled work can run alongside other Python threads. This suits independent batches or service workers, but it does not make every Rust data structure safe to share mutably. The documented design uses worker-local scratch and explicit ownership boundaries. - -The right concurrency test is not "many threads ran." It is: - -```text -same input + different worker count -> same output -batch decode == per-shot decode -prior calls do not change later output -``` - -Those properties are observable and can be locked with tests. - -## 4. Rayon and batch determinism - -Batch paths use Rayon data parallelism. Each worker keeps its own scratch so the output does not depend on row-to-worker assignment. That matters for Union-Find style paths, where several valid forests could otherwise yield different correction vectors. - -Determinism is a contract only when the implementation and the tests establish it. A parallel loop is not automatically deterministic. - -## 5. Reusable memory - -The hot paths allocate buffers sized to the graph, reset them in place, and grow only when the problem grows. The manual describes this as allocation-free hot-path construction for the relevant backends. - -Report memory in separate categories: - -| Category | Appropriate tool or evidence | -|---|---| -| Python allocations | `tracemalloc` | -| Process RSS | `psutil`, when installed | -| Native Rust heap | Backend diagnostics | -| GPU memory | Vendor/runtime diagnostics | - -Do not merge these numbers into one "memory usage" figure. They measure different allocators and lifetimes. - -## 6. The module map - -The reference manual groups the core into: - -```text -matching exact and sparse MWPM -union-find graphlike single and batch paths -BP-OSD belief propagation, GF(2), ambiguity components -GPU CUDA/OpenCL batch kernels -temporal space-time and streaming primitives -routing auto, cascade, two-stage -learned GNN and neural predecoders -services MCP, gRPC, metrics, licensing -utilities bit packing, GF(2), shared infrastructure -``` - -The public architecture explains responsibilities without exposing proprietary internals. That is the right level for an integration guide. - -## 7. A safe FFI smoke test - -The manual's build-and-import path ends with a small import smoke. A decode smoke adds a direct parity check: - -```python -import numpy as np -from qector_decoder_v3 import UnionFindDecoder - -checks = [[0, 1], [1, 2], [2, 3], [3, 4]] -syndrome = np.array([0, 1, 0, 0], dtype=np.uint8) -decoder = UnionFindDecoder(checks, n_qubits=5) -correction = decoder.decode(syndrome) - -assert correction.dtype == np.uint8 -assert correction.shape == (5,) -``` - -Then verify `H @ correction == syndrome` with the package's structured result and validation helpers. The invariant should stay visible in tests, even when production code uses the richer helpers. - -## 8. Packaging consequences - -The release path publishes deterministic binary wheels only; no source distribution is shipped. A wheel smoke test therefore matters: install the built wheel, import it, decode a known reachable syndrome, and assert the parity equation. - -The v1.0.0 wheels are CPU-only. No published wheel ships a CUDA binary. CUDA and OpenCL are build feature-gates: OpenCL is a documented source-build path, and CUDA support is compiled in through its own build configuration. Whether a GPU path is actually usable is a runtime question, probed with a runtime check such as `cuda_is_available()`. Packaging, feature flags, driver, and device presence all belong in the environment block of any benchmark. - -## Takeaway - -The FFI boundary is part of the decoder. Contiguous buffers, selective copying, GIL release, worker-local scratch, deterministic batches, and separate memory metrics are testable contracts. Treat them as architecture, not incidental optimization, and the Python-facing system becomes much easier to audit. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/19ReleaseLicensing/index.html b/blog/19ReleaseLicensing/index.html deleted file mode 100644 index 39bf640e..00000000 --- a/blog/19ReleaseLicensing/index.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Shipping a QEC Decoder Responsibly · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026DeploymentBy Guillaume Lessard · 4 min read

Shipping a QEC Decoder Responsibly

API stability, wheels, offline licensing, release gates, and the difference between local and network deployment.

Author: Guillaume Lessard / qector.store
-Series: QECTOR Decoder v3 companion notes, Post 19
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: release engineering, API stability, licensing, deployment security, QEC software

-

Abstract

-

Research code becomes infrastructure when other people install it, automate it, and place it near sensitive circuits or hardware. The QECTOR v1.0.0 manual treats release engineering, licensing, API stability, and service hardening as part of the technical contract. This post summarizes those boundaries so an evaluator can tell a stable Python symbol from a provisional service surface, and a local research library from a network deployment.

-

1. API stability has layers

-

The manual separates public surfaces into stable, provisional, and internal detail.

-

Stable symbols for the whole 1.x line include:

-
UnionFindDecoder, BlossomDecoder, SparseBlossomDecoder
-NativeAutoDecoder
-the four generate_*_code_checks helpers
-set_license_key, get_license_info
-the Sinter and qiskit-qec entry points
-DecodeResult
-

Provisional or workload-sensitive surfaces include batch aliases, AutoDecoder ordering, streaming constructors, BP-OSD tuning kwargs, GPU batch constructors, and network surfaces. A provisional symbol is supported and tested, but its exact shape may change in a 1.x release with a changelog note.

-

The distinction lets downstream teams plan upgrades without treating every experimental option as frozen.

-

2. Wheels only

-

The 1.0.0 release (published 2026-08-06) ships deterministic binary wheels on PyPI and no source distribution: 15 wheels covering CPython 3.9 through 3.13 on Windows (win_amd64), Linux (manylinux x86_64), and macOS (arm64), with requires-python >= 3.9 and a PolyForm-Noncommercial-1.0.0 license. The proprietary Rust core is delivered into the build pipeline through a chunked, hash-anchored packaging mechanism, and the manifest is checked before building so stale or corrupted input fails explicitly.

-

The user-facing implication is simple:

-
pip install -> resolve a supported wheel
-wheel smoke -> import, decode, assert H @ c == s
-

Read the platform and feature flags from the release notes of the installed version. No CUDA wheel is published for 1.0.0: do not assume a GPU is present, and do not assume an OpenCL wheel exists when the manual says OpenCL requires a source build.

-

3. License tiers are enforced locally

-

The v1.0.0 manual documents these distance caps:

- - - - - - - - - - - - - - - - - - - - - - - - - -
TierMaximum distanceGPU batch
Community7No
Pro19No
Enterprise63Yes
-

Tokens are verified offline in the Rust core using Ed25519, with expiry and an offline revocation list. Decoding never makes a blocking network call.

-

Key resolution order:

-
QECTOR_LICENSE_KEY
-QECTOR_LICENSE_FILE
-~/.qector/license.key
-

An explicitly set but unreadable license-file path is invalid, not a silent downgrade. QECTOR_ENFORCE=1 turns tier violations into hard errors; the default mode logs a warning. QECTOR_SILENT=1 quiets the licensing output.

-

Hardware availability and licensing are separate facts. A device probe can report a GPU even when the requested tier is not active.

-

4. Pre-flight gates

-

The documented release gates include:

-
    -
  1. Rust tests with default and no-default features.
  2. -
  3. Clippy with warnings denied.
  4. -
  5. Python lint and format checks.
  6. -
  7. The Python validation suite.
  8. -
  9. Wheel import/decode smoke testing.
  10. -
  11. Dependency audit according to release policy.
  12. -
-

The wheel smoke test matters most for a proprietary core: it validates the artifact users install, not just the source tree that built it.

-

5. Local library versus service

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModeStatusGuidance
Local CPU librarySupported public pathPreferred for research and evaluation
CUDA/OpenCL batchOptional local pathControlled driver/runtime setup
Docker RESTDemo/local serviceDo not expose directly to the public internet
gRPC/MCP/metricsFeature-gatedDeployment review required
SaaS/hosted APIContact-only betaSeparate commercial agreement and hardening
OEM/embeddedContact-only partner pathValidate hardware and support scope
-

Transport wrappers reuse the same decoder contracts, but transport security is not inherited from the local library.

-

6. Service hardening checklist

-

Before a network-accessible deployment:

-
pin the release and Cargo.lock
-generate dependency inventories
-disable unused optional services and GPU features
-run import and local correctness smoke tests
-place the service behind TLS and a reverse proxy
-authenticate and authorize clients
-enforce request size, rate, timeout, and resource limits
-redact customer inputs and proprietary circuits from logs
-document owner, rollback, update, and incident paths
-

The manual notes built-in request and frame caps on some surfaces, but treats them as necessary rather than sufficient hardening.

-

7. Commercial boundaries

-

Network use, hosted APIs, OEM integration, internal commercial use, product integration, paid consulting, and commercial benchmarking require the written commercial scope described by the project. A public post can explain the boundary without embedding tokens, private keys, customer circuits, or internal fulfillment details.

-

8. Version promotion

-

A provisional symbol becomes stable only after a dated promotion entry, the same property, regression, and example test bar, an update to the stable API document, and a changelog note. The process generalizes: it turns "we have used this for a while" into an auditable compatibility decision.

-

Takeaway

-

Shipping a decoder responsibly means shipping the artifact, its compatibility promise, its license boundary, and its deployment assumptions. Wheels, tests, offline token verification, service hardening, and promotion rules are not administrative extras; they are what make a research decoder safe to integrate.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/19_release_licensing.md b/blog/19_release_licensing.md deleted file mode 100644 index 2abfde8e..00000000 --- a/blog/19_release_licensing.md +++ /dev/null @@ -1,128 +0,0 @@ -# Shipping a QEC Decoder Responsibly: API Stability, Wheels, and Deployment Gates - -Author: Guillaume Lessard / qector.store -Series: QECTOR Decoder v3 companion notes, Post 19 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: release engineering, API stability, licensing, deployment security, QEC software - -## Abstract - -Research code becomes infrastructure when other people install it, automate it, and place it near sensitive circuits or hardware. The QECTOR v1.0.0 manual treats release engineering, licensing, API stability, and service hardening as part of the technical contract. This post summarizes those boundaries so an evaluator can tell a stable Python symbol from a provisional service surface, and a local research library from a network deployment. - -## 1. API stability has layers - -The manual separates public surfaces into stable, provisional, and internal detail. - -Stable symbols for the whole 1.x line include: - -```text -UnionFindDecoder, BlossomDecoder, SparseBlossomDecoder -NativeAutoDecoder -the four generate_*_code_checks helpers -set_license_key, get_license_info -the Sinter and qiskit-qec entry points -DecodeResult -``` - -Provisional or workload-sensitive surfaces include batch aliases, AutoDecoder ordering, streaming constructors, BP-OSD tuning kwargs, GPU batch constructors, and network surfaces. A provisional symbol is supported and tested, but its exact shape may change in a 1.x release with a changelog note. - -The distinction lets downstream teams plan upgrades without treating every experimental option as frozen. - -## 2. Wheels only - -The 1.0.0 release (published 2026-08-06) ships deterministic binary wheels on PyPI and no source distribution: 15 wheels covering CPython 3.9 through 3.13 on Windows (win_amd64), Linux (manylinux x86_64), and macOS (arm64), with `requires-python >= 3.9` and a PolyForm-Noncommercial-1.0.0 license. The proprietary Rust core is delivered into the build pipeline through a chunked, hash-anchored packaging mechanism, and the manifest is checked before building so stale or corrupted input fails explicitly. - -The user-facing implication is simple: - -```text -pip install -> resolve a supported wheel -wheel smoke -> import, decode, assert H @ c == s -``` - -Read the platform and feature flags from the release notes of the installed version. No CUDA wheel is published for 1.0.0: do not assume a GPU is present, and do not assume an OpenCL wheel exists when the manual says OpenCL requires a source build. - -## 3. License tiers are enforced locally - -The v1.0.0 manual documents these distance caps: - -| Tier | Maximum distance | GPU batch | -|---|---:|---| -| Community | 7 | No | -| Pro | 19 | No | -| Enterprise | 63 | Yes | - -Tokens are verified offline in the Rust core using Ed25519, with expiry and an offline revocation list. Decoding never makes a blocking network call. - -Key resolution order: - -```text -QECTOR_LICENSE_KEY -QECTOR_LICENSE_FILE -~/.qector/license.key -``` - -An explicitly set but unreadable license-file path is invalid, not a silent downgrade. `QECTOR_ENFORCE=1` turns tier violations into hard errors; the default mode logs a warning. `QECTOR_SILENT=1` quiets the licensing output. - -Hardware availability and licensing are separate facts. A device probe can report a GPU even when the requested tier is not active. - -## 4. Pre-flight gates - -The documented release gates include: - -1. Rust tests with default and no-default features. -2. Clippy with warnings denied. -3. Python lint and format checks. -4. The Python validation suite. -5. Wheel import/decode smoke testing. -6. Dependency audit according to release policy. - -The wheel smoke test matters most for a proprietary core: it validates the artifact users install, not just the source tree that built it. - -## 5. Local library versus service - -| Mode | Status | Guidance | -|---|---|---| -| Local CPU library | Supported public path | Preferred for research and evaluation | -| CUDA/OpenCL batch | Optional local path | Controlled driver/runtime setup | -| Docker REST | Demo/local service | Do not expose directly to the public internet | -| gRPC/MCP/metrics | Feature-gated | Deployment review required | -| SaaS/hosted API | Contact-only beta | Separate commercial agreement and hardening | -| OEM/embedded | Contact-only partner path | Validate hardware and support scope | - -Transport wrappers reuse the same decoder contracts, but transport security is not inherited from the local library. - -## 6. Service hardening checklist - -Before a network-accessible deployment: - -```text -pin the release and Cargo.lock -generate dependency inventories -disable unused optional services and GPU features -run import and local correctness smoke tests -place the service behind TLS and a reverse proxy -authenticate and authorize clients -enforce request size, rate, timeout, and resource limits -redact customer inputs and proprietary circuits from logs -document owner, rollback, update, and incident paths -``` - -The manual notes built-in request and frame caps on some surfaces, but treats them as necessary rather than sufficient hardening. - -## 7. Commercial boundaries - -Network use, hosted APIs, OEM integration, internal commercial use, product integration, paid consulting, and commercial benchmarking require the written commercial scope described by the project. A public post can explain the boundary without embedding tokens, private keys, customer circuits, or internal fulfillment details. - -## 8. Version promotion - -A provisional symbol becomes stable only after a dated promotion entry, the same property, regression, and example test bar, an update to the stable API document, and a changelog note. The process generalizes: it turns "we have used this for a while" into an auditable compatibility decision. - -## Takeaway - -Shipping a decoder responsibly means shipping the artifact, its compatibility promise, its license boundary, and its deployment assumptions. Wheels, tests, offline token verification, service hardening, and promotion rules are not administrative extras; they are what make a research decoder safe to integrate. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/20EcosystemIntegration/index.html b/blog/20EcosystemIntegration/index.html deleted file mode 100644 index cc98da18..00000000 --- a/blog/20EcosystemIntegration/index.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Stim, Sinter, PyMatching, and Qiskit Integration · QECTOR Blog - - - - - - - - - - - - - -
Skip to main content
Back to All Articles
August 2026EcosystemBy Guillaume Lessard · 4 min read

Stim, Sinter, PyMatching, and Qiskit Integration

Connect QECTOR to common quantum software workflows while preserving detector, observable, and noise contracts.

Author: Guillaume Lessard / qector.store
-Series: QECTOR Decoder v3 companion notes, Post 20
-Source: QECTOR Decoder v3 Reference Manual v1.0.0
-Date: August 2026
-DOI: 10.5281/zenodo.21941046 -Tags: Stim, Sinter, PyMatching, Qiskit, quantum software integration, QEC APIs

-

Abstract

-

Decoder research is most useful when it fits the surrounding ecosystem. QECTOR v1.0.0 documents a PyMatching-compatible shim, Sinter decoder entry points, a Qiskit plugin, a DEM parser, and provisional service surfaces. This post describes the integration boundaries and shows how to keep the shared syndrome, observable, and noise-model contracts intact when swapping a decoder into an existing workflow.

-

1. The common pipeline

-

Most ecosystem integrations follow one shape:

-
circuit -> detector error model -> detector samples -> decoder -> observables
-

The decoder must not change the circuit or silently change the detector convention. It consumes the same DEM-derived problem and returns a correction whose detector boundary matches the sampled syndrome.

-

2. Stim and the DEM path

-

The DEM module accepts a Stim detector error model object or text and handles the standard statements. A typical flow:

-
from qector_decoder_v3 import dem
-
-dem_model = dem.from_stim(
-    circuit.detector_error_model(decompose_errors=True)
-)
-
-if dem_model.is_graphlike:
-    dem_model = dem_model.collapse_to_graph()
-decoder = dem_model.make_decoder("blossom")
-

For a non-graphlike model, choose BP-OSD instead of forcing a matching path. Record decompose_errors, the collapse settings, raw and collapsed mechanism counts, and the observable mapping with the result.

-

3. The PyMatching-compatible shim

-

The documented compatibility surface covers the subset pipelines actually use:

-
from qector_decoder_v3.pymatching import Matching
-
-m = Matching.from_check_matrix(check_matrix)
-m2 = Matching.from_detector_error_model(dem_model)
-

The shim also exposes add_edge and add_boundary_edge for graph construction. It exists for migration: one import changes while the caller keeps a familiar construction and decode shape. Compatibility does not mean every PyMatching option or every graph assumption is identical. Validate the returned correction against the caller's matrix and boundary convention.

-

4. Sinter entry points

-

QECTOR exposes five Sinter decoder factories: qector_blossom, qector_belief, qector_unionfind, qector_bposd, and qector_unionfind_unweighted. The value goes beyond convenience. Sinter gives the community a standard harness for using the same circuit, samples, and logical scoring across decoder rows.

-

For a fair comparison, hold constant:

-
same circuit
-same DEM settings
-same samples
-same observable scoring
-same shots and seed protocol
-different decoder row only
-

Do not let a Sinter row hide whether the decoder was weighted, batched, learned, or routed through a fallback. Those options belong in the report metadata.

-

5. Qiskit results

-

The optional Qiskit plugin (qector=qector_decoder_v3.qiskit_plugin) decodes syndrome counts from Qiskit results and also supports a raw-dictionary mode without Qiskit installed. That makes the adapter useful even where Qiskit exists only at the experiment boundary.

-

The adapter still needs a declared ordering for checks, qubits, and counts. A count dictionary with the right number of bits can encode the wrong syndrome if the ordering is undocumented.

-

6. Observables and logical scoring

-

The adapter must keep detector corrections and logical observables distinct. The correction is checked with Hc=s; the logical outcome is scored by the observable map. A stabilizer-equivalent correction can differ from the sampled physical error while giving the same logical outcome.

-

This is the most common integration mistake: exporting an edge list or correction vector and comparing it directly with a sampled error vector. The correct comparison happens in observable space.

-

7. Service surfaces

-

The engine documents REST, gRPC, MCP stdio, and Prometheus metrics surfaces. They dispatch to the same core decoder contracts and do not reimplement decoding. They are provisional, so a deployment review is required for authentication, authorization, TLS, rate limits, request size, timeouts, audit logs, and resource quotas.

-

An MCP client should treat decoder type, input shape, and frame size as explicit validated fields. A network wrapper is not automatically safe because the local library is safe.

-

8. Workbench and artifacts

-

The Workbench controller loads real .stim and .dem files, runs decode benchmarks through a cancellable job queue, and exports JSON/CSV/PDF artifacts with an environment snapshot and commit. The integration pattern is traceability: every number should point back to an input file, a decoder configuration, and an environment.

-

9. A migration checklist

-

When replacing an existing decoder:

-
    -
  1. Freeze the check and qubit ordering.
  2. -
  3. Export the original DEM and observable map.
  4. -
  5. Confirm graphlike eligibility before selecting matching.
  6. -
  7. Use the same detector samples for both decoders.
  8. -
  9. Validate Hc=s on every row.
  10. -
  11. Compare logical observables, not raw corrections.
  12. -
  13. Record weights, fallback routes, package versions, and seed.
  14. -
  15. Preserve raw artifacts and hashes.
  16. -
-

This workflow makes a one-line import change scientifically useful, not just syntactically successful.

-

Takeaway

-

Integration is a contract-translation problem. Stim supplies detectors and mechanisms, Sinter supplies a comparison harness, PyMatching compatibility lowers the migration cost, and Qiskit adapters connect experiment results. QECTOR's invariant stays the anchor: the returned correction must reproduce the syndrome, and the logical result must be scored in observable space.

-

Reference

-

Guillaume Lessard, QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine, v1.0.0, August 2026. DOI: 10.5281/zenodo.21941046.

- - - diff --git a/blog/20_ecosystem_integration.md b/blog/20_ecosystem_integration.md deleted file mode 100644 index 2ecba5e7..00000000 --- a/blog/20_ecosystem_integration.md +++ /dev/null @@ -1,115 +0,0 @@ -# Integrating QECTOR With Stim, Sinter, PyMatching, and Qiskit - -Author: Guillaume Lessard / qector.store -Series: QECTOR Decoder v3 companion notes, Post 20 -Source: QECTOR Decoder v3 Reference Manual v1.0.0 -Date: August 2026 -DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Tags: Stim, Sinter, PyMatching, Qiskit, quantum software integration, QEC APIs - -## Abstract - -Decoder research is most useful when it fits the surrounding ecosystem. QECTOR v1.0.0 documents a PyMatching-compatible shim, Sinter decoder entry points, a Qiskit plugin, a DEM parser, and provisional service surfaces. This post describes the integration boundaries and shows how to keep the shared syndrome, observable, and noise-model contracts intact when swapping a decoder into an existing workflow. - -## 1. The common pipeline - -Most ecosystem integrations follow one shape: - -```text -circuit -> detector error model -> detector samples -> decoder -> observables -``` - -The decoder must not change the circuit or silently change the detector convention. It consumes the same DEM-derived problem and returns a correction whose detector boundary matches the sampled syndrome. - -## 2. Stim and the DEM path - -The DEM module accepts a Stim detector error model object or text and handles the standard statements. A typical flow: - -```python -from qector_decoder_v3 import dem - -dem_model = dem.from_stim( - circuit.detector_error_model(decompose_errors=True) -) - -if dem_model.is_graphlike: - dem_model = dem_model.collapse_to_graph() -decoder = dem_model.make_decoder("blossom") -``` - -For a non-graphlike model, choose BP-OSD instead of forcing a matching path. Record `decompose_errors`, the collapse settings, raw and collapsed mechanism counts, and the observable mapping with the result. - -## 3. The PyMatching-compatible shim - -The documented compatibility surface covers the subset pipelines actually use: - -```python -from qector_decoder_v3.pymatching import Matching - -m = Matching.from_check_matrix(check_matrix) -m2 = Matching.from_detector_error_model(dem_model) -``` - -The shim also exposes `add_edge` and `add_boundary_edge` for graph construction. It exists for migration: one import changes while the caller keeps a familiar construction and decode shape. Compatibility does not mean every PyMatching option or every graph assumption is identical. Validate the returned correction against the caller's matrix and boundary convention. - -## 4. Sinter entry points - -QECTOR exposes five Sinter decoder factories: `qector_blossom`, `qector_belief`, `qector_unionfind`, `qector_bposd`, and `qector_unionfind_unweighted`. The value goes beyond convenience. Sinter gives the community a standard harness for using the same circuit, samples, and logical scoring across decoder rows. - -For a fair comparison, hold constant: - -```text -same circuit -same DEM settings -same samples -same observable scoring -same shots and seed protocol -different decoder row only -``` - -Do not let a Sinter row hide whether the decoder was weighted, batched, learned, or routed through a fallback. Those options belong in the report metadata. - -## 5. Qiskit results - -The optional Qiskit plugin (`qector=qector_decoder_v3.qiskit_plugin`) decodes syndrome counts from Qiskit results and also supports a raw-dictionary mode without Qiskit installed. That makes the adapter useful even where Qiskit exists only at the experiment boundary. - -The adapter still needs a declared ordering for checks, qubits, and counts. A count dictionary with the right number of bits can encode the wrong syndrome if the ordering is undocumented. - -## 6. Observables and logical scoring - -The adapter must keep detector corrections and logical observables distinct. The correction is checked with `Hc=s`; the logical outcome is scored by the observable map. A stabilizer-equivalent correction can differ from the sampled physical error while giving the same logical outcome. - -This is the most common integration mistake: exporting an edge list or correction vector and comparing it directly with a sampled error vector. The correct comparison happens in observable space. - -## 7. Service surfaces - -The engine documents REST, gRPC, MCP stdio, and Prometheus metrics surfaces. They dispatch to the same core decoder contracts and do not reimplement decoding. They are provisional, so a deployment review is required for authentication, authorization, TLS, rate limits, request size, timeouts, audit logs, and resource quotas. - -An MCP client should treat decoder type, input shape, and frame size as explicit validated fields. A network wrapper is not automatically safe because the local library is safe. - -## 8. Workbench and artifacts - -The Workbench controller loads real `.stim` and `.dem` files, runs decode benchmarks through a cancellable job queue, and exports JSON/CSV/PDF artifacts with an environment snapshot and commit. The integration pattern is traceability: every number should point back to an input file, a decoder configuration, and an environment. - -## 9. A migration checklist - -When replacing an existing decoder: - -1. Freeze the check and qubit ordering. -2. Export the original DEM and observable map. -3. Confirm graphlike eligibility before selecting matching. -4. Use the same detector samples for both decoders. -5. Validate `Hc=s` on every row. -6. Compare logical observables, not raw corrections. -7. Record weights, fallback routes, package versions, and seed. -8. Preserve raw artifacts and hashes. - -This workflow makes a one-line import change scientifically useful, not just syntactically successful. - -## Takeaway - -Integration is a contract-translation problem. Stim supplies detectors and mechanisms, Sinter supplies a comparison harness, PyMatching compatibility lowers the migration cost, and Qiskit adapters connect experiment results. QECTOR's invariant stays the anchor: the returned correction must reproduce the syndrome, and the logical result must be scored in observable space. - -## Reference - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, v1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/blog/index.html b/blog/index.html deleted file mode 100644 index cdc0a5c3..00000000 --- a/blog/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QEC Field Notes · QECTOR Blog - - - - - - - - - - -
Skip to main content

Engineering
Fault Tolerance

Field notes from parity checks to production interfaces: mathematics, decoder design, evidence, and systems practice for quantum error correction.

Showing 20 of 20 field notes. Claims are scoped to the v1.0.0 reference manual.

Article
Foundations

Syndrome Faithfulness: The Decoder Contract

The GF(2) invariant Hc=s, logical cosets, degeneracy, and graphlike eligibility explained from first principles.

August 2026
Article
Decoder Algorithms

Exact Blossom Decoding for Graphlike QEC

How weighted MWPM, Edmonds' primal-dual view, path boundaries, and sparse candidate escalation fit together.

August 2026
Article
Decoder Algorithms

Sparse Blossom and Event-Driven Growth

Region states, collision times, tight edges, radix heaps, and the tested scope of Sparse Blossom.

August 2026
Article
Decoder Algorithms

UF-01: Parity, Peeling, and Graphlike Decoding

Cluster parity, spanning-forest peeling, weighted growth, zero-allocation structure, and domain boundaries.

August 2026
Article
qLDPC and AI

BP-OSD for qLDPC Hypergraphs

Log-domain belief propagation, ordered statistics, residual GF(2) solving, and faithful non-graphlike decoding.

August 2026
Article
qLDPC and AI

Ambiguity Clustering and Learned Predecoders

Freeze confident qubits, solve ambiguous components, and add learned priors without moving the correctness proof.

August 2026
Article
Multi-Round

Space-Time Decoding with Noisy Measurements

Detector differencing, temporal and spatial weights, measurement glitches, and streaming scope.

August 2026
Article
Orchestration

Routing, Cascades, and Two-Stage CSS Decoding

Structural backend eligibility, fallback verification, hybrid acceptance, and CSS sector feedforward.

August 2026
Article
Systems

GPU Batch Decoding and Tested Bit Identity

Per-shot GPU state isolation, deterministic Union-Find, scoped CPU/GPU identity, and deployment gates.

August 2026
Article
Evidence

Evidence-First QEC Architecture and Benchmarks

The v1.0.0 backend map, logical scoring, Wilson intervals, metadata, release gates, and claim boundaries.

August 2026
Article
Foundations

A Hand-Worked Steane Decode

Compute a Steane syndrome by hand and see why stabilizer cosets matter more than raw correction equality.

August 2026
Article
Foundations

Rotated Surface Code d=3

Nine data qubits, boundaries, graphlike eligibility, logical strings, and a complete structural audit.

August 2026
Article
Noise Models

Detector Error Models from Faults to Graphs

Parse DEMs, classify hyperedges, collapse parallel mechanisms, set weights, and preserve observables.

August 2026
Article
Noise Models

Weighted Decoding and Likelihood Priors

Why log((1-p)/p) belongs in the graph and how matching, Union-Find, and space-time paths use weights.

August 2026
Article
Evidence

Logical Error Rates Without the Wrong Metric

Score observables, compute Wilson intervals, keep noise models comparable, and report reproducible LERs.

August 2026
Article
Orchestration

Choosing a Decoder From the Matrix

A practical decision guide for graphlike, qLDPC, space-time, streaming, CSS, and batch workloads.

August 2026
Article
Evidence

Reproducible QEC Benchmarks

Separate correctness from performance and make every benchmark claim traceable to an artifact and hash.

August 2026
Article
Systems

Rust, PyO3, and QEC Memory Discipline

FFI buffers, selective repacking, GIL release, Rayon worker state, and memory metrics at the Python boundary.

August 2026
Article
Deployment

Shipping a QEC Decoder Responsibly

API stability, wheels, offline licensing, release gates, and the difference between local and network deployment.

August 2026
Article
Ecosystem

Stim, Sinter, PyMatching, and Qiskit Integration

Connect QECTOR to common quantum software workflows while preserving detector, observable, and noise contracts.

August 2026
- - - diff --git a/changelog/index.html b/changelog/index.html deleted file mode 100644 index bbbbbec0..00000000 --- a/changelog/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Changelog · QECTOR - - - - - - - - - - -
Skip to main content
Latest: v1.0.1 Decoder (2026-11-06) · Claude Plugin v2.0.1 · Workbench v1.0.7

Changelog

Version history for QECTOR Decoder v3. Exact release dates on PyPI. All artifacts and validation on GitHub.

Get release alerts

No mailing list to join: subscribe with the tools you already use.

LATEST

v1.0.1 · 2026-11-06 (current)

Full notes in the GitHub release.

  • Code families corrected: rotated and unrotated surface, heavy-hex and colour codes now build at their labelled distance; Union-Find peeling and GPU kernel parity fixed
  • 18 binary wheels: CPython 3.9-3.14 on Windows x64, Linux x86_64 (manylinux_2_17) and macOS 11+ arm64
  • Every wheel is installed and decoded on its own OS (H·c = s checks) before publishing; per-platform receipts ship as platform-proof.json in the release
  • Signed build provenance (Sigstore) for every wheel, plus PyPI attestations; published through Trusted Publishing with no API token
  • Licensing: every paid token (Pro or Enterprise) unlocks GPU batch decoding; licence metadata is now a standard SPDX expression (PolyForm Noncommercial 1.0.0)
  • QECTOR_OFFLINE=1 keeps the native core fully offline; nine security advisories in optional network dependencies fixed (rustls, webpki, h2)
  • Sinter: pass custom_decoders=qector_sinter_decoders() to sinter.collect()

v1.0.0 · 2026-08-06 (first stable release)

Exact release dates on PyPI.

  • First stable (v1) release: semantic-versioning frozen; the public API is governed by documented stability tiers (Stable / Workload-sensitive / Experimental / Internal detail)
  • Ecosystem entry points: five Sinter decoders (qector_blossom, qector_belief, qector_unionfind, and more) and a qiskit-qec plugin
  • New decoder families: AmbiguityClusterDecoder, TwoStageDecoder, ColourCodeDecoder (opt-in method="cluster_bposd")
  • Relay-BP layered serial BP schedule (bp_method="relay"), CS-OSD(lambda, w) with configurable osd_lambda, and LLR message damping in BP-OSD
  • Weighted Union-Find on GPU: CUDABatchDecoder / OpenCLBatchDecoder accept edge_weights, plus precision="f64" double-precision growth
  • qector decode / qector bench / qector serve CLI and qector-doctor (environment diagnostic)
  • pymatching submodule shim (from qector_decoder_v3.pymatching import Matching); DemModel.make_decoder covers all native families
  • SparseBlossomDecoder hot path zero-allocation (thread-local SbScratch); six Rust panic-to-abort paths removed; license hardening (v2 tokens with tier + expiry)
  • Binary wheels (cp39-cp313, Windows amd64 / Linux x86_64 / macOS 11.0+ arm64); no sdist
  • Official QECTOR Decoder v3 reference manual v1.0.0 (DOI 10.5281/zenodo.21941046)
  • Free QECTOR Workbench (current): Comprehensive MCP tools, 19 named kinds (17 concrete decoder configurations plus AutoDecoder and Auto Router), 10 code families including qLDPC and colour codes, visual circuit builder, and a self/auto-debug layer verifying H·c = s on every decode
  • No universal benchmark figures are published on the site; qector bench ships with the package for measuring on your own hardware

Verified PyPI release dates · UTC

  • No v0.7.1 release appears in the public PyPI history; it is intentionally omitted.
  • Dates below are PyPI upload dates, not inferred development or local file dates.
  • v0.7.0 · 2026-08-02 · Published PyPI milestone
  • v0.6.9 · 2026-07-26 · Published PyPI milestone
  • v0.6.8 · 2026-07-22 · Published PyPI milestone
  • v0.6.6 · 2026-07-12 · Published PyPI milestone
  • v0.6.2 · 2026-07-07 · Published PyPI milestone
  • v0.6.1 · 2026-07-05 · Published PyPI milestone
  • v0.6.0 · 2026-07-05 · Published PyPI milestone
  • v0.5.9 · 2026-07-05 · Published PyPI milestone
  • v0.5.8 · 2026-07-02 · Published PyPI milestone
  • v0.5.7 · 2026-07-02 · Published PyPI milestone
  • v0.5.6 · 2026-06-29 · Published PyPI milestone
  • v0.5.5 · 2026-06-28 · Published PyPI milestone
  • v0.5.4 · 2026-06-27 · Published PyPI milestone
  • v0.5.3 · 2026-06-25 · Published PyPI milestone
  • v0.5.2 · 2026-06-25 · Published PyPI milestone
  • v0.5.1 · 2026-06-24 · Published PyPI milestone
  • v0.5.0 · 2026-06-24 · First recorded PyPI release
- - - diff --git a/claude-plugin/index.html b/claude-plugin/index.html deleted file mode 100644 index 3b270ff8..00000000 --- a/claude-plugin/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QECTOR Claude Plugin · Quantum Error Correction for Claude Code - - - - - - - - - - -
Skip to main content
ANTHROPIC CLAUDE CODE & DESKTOP PLUGIN · v2.0.1 · published 2026-11-06

QECTOR Claude Plugin

Empower Claude with local Quantum Error Correction engineering. Release v2.0.1 runs on qector-decoder-v3 1.0.1. The default qector-secure server is air-gapped, integrity-checked and validates every request and response against JSON Schema (12 tools). It ships with 28 domain skills, 5 specialized agents and 11 slash commands; 29 research tools and 3 admin tools are opt-in. Every dependency is pinned by SHA-256, and releases are signed.

Instant Marketplace Install
claude plugin marketplace add GuillaumeLessard/qector-claude-plugin
-claude plugin install qector@qector-tools

Independent plugin by iD01t Productions. Not affiliated with or endorsed by Anthropic.

Local-First Security

Local stdio transport by default. Parity matrices, syndromes, quantum circuits, and simulation artifacts are processed on the host machine; verify your host environment if confidentiality matters.

Strict Mathematics

Decodes are checked against H c = s (mod 2). Scored with logical cosets and Wilson 95% CIs.

App-Free Library

Built on the official qector-decoder-v3 1.0.x Rust/PyO3 wheel. No desktop GUI required.

Multi-Agent System

28 domain skills and 5 tailored agent personas designed for research, hardware design, verification, and engineering.

DOMAIN SKILLS ECOSYSTEM

28 Grounded QEC Skills

Each skill encodes verified domain rules and strict-math obligations to reduce hallucination risk and ground interactions in reproducible physics. The seven flagship skills below are a subset of the 28 skills shipped in the plugin.

qector-coreCore Ground Truth

Verified platform facts, 8 library MCP tools, 5 stable decoders, and strict API grounding to prevent hallucination.

Grounds tool names & signatures
Enforces strict math boundary
Local verification
qector-math-foundationsMathematical Axioms

Theorems 1-16 executable obligations over GF(2), syndrome equivalence H c = s (mod 2), Wilson 95% CIs, and coset scoring.

Theorem 1 fail-closed verification
Theorem 2 logical coset scoring
Wilson score intervals
qector-developerSDK & Engineering

Integration guidance for qector-decoder-v3 Python SDK, parity-check matrix generation, Sinter/Stim adapters, and CI/CD testing.

Python SDK best practices
Matrix construction helpers
Local test automation
qector-researcherQuantum Information Science

Threshold discovery workflows, noise modeling, Monte Carlo error simulations, and academic paper reproduction.

Code-capacity sweeps
Noise model parameterization
Reproducible artifact export
qector-hardware-engineerExperimental & Cryogenic

Hardware constraint modeling, heavy-hex/surface graph mapping, physical error rate profiling, and latency budgets.

Physical qubit layout mapping
Hardware latency analysis
Cryogenic error budgets
qector-educatorPedagogy & Concepts

Interactive tutorial creation, mathematical explanations of syndrome decoding, MWPM matching, and BP-OSD.

Step-by-step decoding explanations
Interactive code walkthroughs
Visual homology concepts
qector-sysadminOperations & Hygiene

Environment diagnostics, resource limits (MAX_CHECKS, MAX_QUBITS), safe file I/O, and deployment validation.

15-point runtime health check
DoS & memory limit guards
Platform compatibility audit

All 28 skills shipped in the plugin

qector-architectureqector-batch-decodingqector-bp-osdqector-codes-builderqector-coreqector-decoders-deep-diveqector-dem-pipelineqector-deploymentqector-developerqector-educatorqector-glossaryqector-hardware-engineerqector-ler-methodologyqector-licensingqector-math-foundationsqector-orchestrationqector-pymatching-compatqector-release-engineeringqector-reproducibilityqector-researcherqector-roadmapqector-servicesqector-sinterqector-space-timeqector-sysadminqector-testing-strategyqector-two-stage-cssqector-workbench
AGENT ROLES & PERSONAS

5 Specialized QEC Agents

Custom agent definitions for Claude Code configured with tailored instructions, prompt templates, and tool access boundaries.

qec-developer.md

QEC Software Engineer

Specialized in Python SDK integration, decoder benchmarking, matrix generation, and production deployment.

qec-researcher.md

QEC Research Scientist

Specialized in academic literature review, threshold sweeps, Wilson confidence intervals, and Monte Carlo studies.

qec-validator.md

Mathematical Proof Validator

Specialized in formal theorem checking, finite matrix verification, syndrome faithfulness, and local-only enforcement.

qec-sysadmin.md

Systems & Runtime Engineer

Specialized in Python environment health, MCP server stdio management, resource bounds, and packaging.

qec-hardware-engineer.md

Quantum Hardware Architect

Specialized in superconducting qubit topologies, heavy-hex grids, cryogenic latency constraints, and noise budgets.

MCP SERVER TOOL SURFACE

Local MCP Servers, Air-Gapped by Default

The v2.0.1 release separates local JSON-RPC 2.0 stdio capabilities by risk and purpose. The default qector-secure server (12 tools: the 8 stable tools below plus airgap_status, integrity_check, schema_catalog and audit_log_status) refuses network access and verifies its own files; qector-library (8 stable tools), qector-research (29 provisional tools), qector-admin (3 explicitly enabled tools), and qector-desktop-mcp (the safe Desktop profile).

Tool NameFunctionality & Mathematical Invariant
list_code_familiesLists available code families (Rotated Surface, Toric, Ring, Repetition, Color, Heavy-Hex, Hypergraph Product).
list_decodersLists the five stable decoder classes: UnionFind, FastUnionFind, Blossom (MWPM), SparseBlossom, NativeAuto.
get_license_infoReads live offline licensing tier and feature flags from the installed qector-decoder-v3 package.
decode_syndromeDecodes a binary syndrome with mandatory Theorem 1 fail-closed verification: H c = s (mod 2).
decode_singleExecutes a single-shot decode with logical-coset scoring (Theorem 2) against logical observables.
threshold_sweepRuns device-local code-capacity sweeps with Wilson 95% confidence intervals and SHA-256 sealed artifacts.
build_code_from_matrixValidates and compiles an arbitrary binary parity-check matrix with rank and observable analysis.
compat_reportAudits runtime health, wheel version, NumPy compatibility, and provisional feature boundaries.

qector-research server · 29 provisional tools

artifacts_sha256artifact_metadata_checkcode_distance_checkcode_export_matricescode_family_infocode_logicals_inspectcompat_reportdecode_faithfulness_checkdem_collapse_paralleldem_inspectenv_blockglossary_lookuphardware_probehot_path_microbenchlicense_active_checklogical_coset_scorepymatching_compat_checkqiskit_plugin_checkreproduction_command_lookupsinter_decoder_listsinter_task_templatestim_circuit_probetheorem_lookupwilson_ciwilson_tableworkload_hashget_capability_matrixget_evidence_policyget_runtime_provenance

qector-admin server · 3 privileged tools

Disabled by default. Requires QECTOR_ADMIN_ENABLED=1 and confirm=true for every administrative call.

system_setupconfigure_claude_desktopworkbench_probe

Installation & Setup

Configure QECTOR Claude Plugin v2.0.1 for Claude Code or Claude Desktop in seconds.

1

Claude Code Marketplace

Install directly via Claude Code marketplace registration:

# 1. Add marketplace repository
-claude plugin marketplace add GuillaumeLessard/qector-claude-plugin
-
-# 2. Install plugin
-claude plugin install qector@qector-tools
2

Local Plugin Directory

Clone the source repository and launch with the --plugin-dir flag:

git clone https://github.com/GuillaumeLessard/qector-claude-plugin.git
-cd qector-claude-plugin
-pip install --require-hashes -r requirements.lock
-claude --plugin-dir .

Mathematical Validation Gate

Verify all 16 Reference Manual theorems and 29 executable proof obligations locally on your machine:

# Run the complete public reference manual mathematical gate
-python scripts/run_manual_math_validation.py
-
-# Or run full pytest integration suite
-python -m pytest tests/test_reference_manual_math.py -v

Download Distribution Packages

Signed release archives: the Claude Code plugin, Claude Desktop extensions (.mcpb, including an offline bundle with a pinned wheelhouse), SHA256SUMS with its signature, an SBOM and provenance.

- - - diff --git a/commercial/index.html b/commercial/index.html deleted file mode 100644 index 8fc4251b..00000000 --- a/commercial/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Enterprise & OEM Licensing · QECTOR - - - - - - - - - - -
Skip to main content
Enterprise & OEM

Enterprise & OEM Licensing

For teams that put QECTOR in front of their own customers, inside their hardware, or under their own contract terms. From $25,000 a year, with licences that verify offline.

Hosted, SaaS and API

Offer QECTOR decoding to your own customers through a hosted service or API. Standard plans cover internal use only.

OEM and hardware bundling

Ship QECTOR inside your control stack, appliance or software product, with redistribution rights for your customers.

Named support engineer

A direct line to the developer, response targets written into the agreement, and help with integration and upgrades.

Custom terms

Signed agreement, your paper or ours, purchase orders and invoicing, security questionnaires and vendor onboarding.

How it works

  1. E-mail admin@qector.store or book a call: tell us the use case, deployment and timeline.
  2. Optional: start with the Pilot (60 days, creditable toward Lab) or a Validation Sprint on your workloads.
  3. We send a written proposal and agreement; Enterprise starts from $25,000 a year.
  4. Sign, pay by invoice or card, and receive offline licence tokens the same day.

Not sure you need Enterprise?

Internal research and production use, including GPU decoding, is covered by Pro ($79/month) or Lab ($9,900/year), bought online with no seat counts. You need Enterprise only for hosted or customer-facing use, OEM redistribution or custom contract terms. See the Commercial Licence Agreement and the Security & Trust pack for procurement.

- - - diff --git a/compare/index.html b/compare/index.html deleted file mode 100644 index 8360cc90..00000000 --- a/compare/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QECTOR vs PyMatching, ldpc and fusion-blossom · Feature Comparison - - - - - - - - - - -
Skip to main content
Features, not speed claims · Checked November 2026

How QECTOR Compares

PyMatching, ldpc and fusion-blossom are excellent open-source decoders. QECTOR's case is breadth: many decoder families, qLDPC and GPU batch decoding behind one API, with every correction checked.

FeatureQECTOR Decoder v3PyMatchingldpcfusion-blossom
Main decodersUnion-Find, exact MWPM (Blossom, Sparse Blossom), BP-OSD, Relay-BPMWPM (Sparse Blossom), correlated matchingBP+OSD, BP+LSD, BeliefFind (BP + Union-Find)Parallel MWPM
Graph-like codes (surface, repetition)YesYes, its specialtyYesYes
qLDPC and non-graph-like codesYes (BP-OSD, Relay-BP)No: needs graph-like error modelsYes, its specialtyNo
Several families on one check matrixYes, one APIMatching onlyBP-based familyMatching only
GPU batch decodingYes (CUDA, OpenCL; paid plans)NoNoNo
Stim and SinterYesYesVia Sinter decoder classesVia Sinter
Core languageRust, Python APIC++, Python APIC++, Python APIRust, Python API
LicencePolyForm Noncommercial; commercial plansApache 2.0MITMIT
Commercial supportYes, with offline-verified licencesCommunityCommunityCommunity

Choose another tool when

  • You only decode surface or repetition codes with matching and want the most established tool: PyMatching is the reference.
  • You need a permissive open-source licence to redistribute the decoder inside your own product for free.
  • You only need BP-based qLDPC decoding and are happy on CPU: ldpc is mature and MIT-licensed.

Choose QECTOR when

  • You compare several decoder families on the same codes and want one API and one output format.
  • You work on qLDPC codes and want GPU batch decoding.
  • You need every correction checked against its syndrome, and commercial support with licences that work air-gapped.
  • You use Claude: the QECTOR Claude plugin brings verified decoding into Claude Code and Claude Desktop.

About this comparison

Features and licences come from each project's own PyPI page, checked on 6 November 2026. We publish no speed comparison: decoder speed depends on code, noise model, hardware and settings, so measure on your own workload. QECTOR ships a PyMatching compatibility shim (from qector_decoder_v3.pymatching import Matching) so you can switch and compare in place. Spotted something out of date? Write to admin@qector.store and we will correct it.

Sources: PyMatching · ldpc · fusion-blossom · QECTOR Decoder v3

- - - diff --git a/contact/index.html b/contact/index.html deleted file mode 100644 index 2ac02696..00000000 --- a/contact/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Contact · QECTOR - - - - - - - - - - -
Skip to main content
admin@qector.store - Mon-Fri EST/EDT

Contact Us

Commercial evaluation requests, technical inquiries, partnership discussions, and support - all handled directly by Guillaume Lessard / iD01t Productions.

Mailing address

QECTOR is developed by iD01t Productions.
Primary contact: Guillaume Lessard.
288 boul. des Ormeaux, Longueuil, Québec, Canada J4L 1J4
Email: admin@qector.store

Working Hours

Monday - Friday: 09:00-17:00 EST/EDT
Saturday - Sunday: Closed

Response time: 1 business day for commercial inquiries.

We use what you send only to answer your inquiry and keep it for 3 years after our last exchange. It is never sold or shared for marketing. See the Privacy Policy (français) for your rights under Québec law.

Book a 30-minute call

Decoder audit, licensing questions, or an integration walkthrough, booked directly with Guillaume Lessard.

- - - diff --git a/decoder/index.html b/decoder/index.html deleted file mode 100644 index 28cb9b96..00000000 --- a/decoder/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QECTOR Decoder v3 · QEC Decoding for Python - - - - - - - - - - - - - -
Skip to main content
v1.0.1 (Source-Available) · Free Workbench GUI (CustomTkinter + MCP tools)

QECTOR Decoder v3

Rust-core Python library implementing 17 decoder configurations from exact MWPM to GPU batch. v1.0.1 is the current stable release: API stability tiers, Relay-BP and CS-OSD, Sinter/qiskit entry points, and the qector CLI, with build provenance for every wheel. A reproducible benchmark harness (qector bench) ships with the package so you can measure on your own hardware. Stim-native. PyPI binary wheels. All artifacts published on GitHub.

Decoder Configs
17

From exact MWPM to GPU batch, across documented stability tiers

Binary Wheels
18

Python 3.9-3.14 on Windows amd64, Linux x86_64, macOS arm64

Stable API
v1.0.1

Stable release with documented API stability tiers

CI Test Suite
Automated

Continuous validation and Stim comparison test suite on GitHub

Decoding Algorithms

Stable decoders with validation artifacts on GitHub. Experimental decoders are research-stage. Since v1.0.0 the public API is frozen under documented stability tiers. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.

Stable Decoders

Union-Find

Near-Linear

Near-linear time approximate decoder. High-throughput option for graph-like codes: trades some LER accuracy for speed.

Fast Union-Find

Hot Path

Optimized Union-Find hot path for low-latency offline simulation pipelines.

Blossom MWPM

Exact Reference

Exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes.

CPU & GPU Batch Decoder

Parallel

Native CUDA / OpenCL batch decoding for supported workloads. Throughput depends on hardware and batch size; CUDA accepts edge_weights and precision="f64" in v1.0.0.

Experimental & Research Decoders

BP-OSD

qLDPC Research

Belief propagation + ordered statistics decoding. v1.0.0 adds Relay-BP schedules, CS-OSD(lambda, w) and LLR damping.

Belief-Matching

Correlated Noise

BP pre-processing + reweighted exact MWPM. Research path for correlated noise scenarios.

Sparse Blossom

Near-Optimal

Region-growing blossom variant for detector graphs. Zero-allocation hot path in v1.0.0.

Hybrid & AutoDecoder

Adaptive Routing

AutoDecoder and HybridDecoder route between Union-Find and Blossom based on code properties.

Lookup-Table Decoder

Small Codes

Precomputed correction table for small codes or syndrome subspaces.

Colour Code / Two-Stage / Ambiguity-Cluster

Research

New v1.0.0 families: ColourCodeDecoder (opt-in cluster_bposd), TwoStageDecoder, AmbiguityClusterDecoder.

Technical Specifications

LanguagesRust core (PyO3) / Python 3.9-3.14 API
PlatformsLinux x86_64, macOS arm64, Windows amd64
GPUCUDA / OpenCL batch paths (supported configurations per package docs)
QEC LibraryStim (quantum-circuit noise simulation)
PackagingPyPI binary wheels (manylinux, macOS, Windows)
LicensePolyForm Noncommercial 1.0.0 (community) / Commercial
ValidationGitHub: github.com/GuillaumeLessard/qector-decoder
Validation Status

v1.0.0 (2026-08-06) was the first stable release; v1.0.1 (2026-11-06) is current. Decode runs are syndrome-validated (H·c = s) through the self-debugging harness, and artifact manifests are SHA-256 sealed on GitHub. No universal benchmark figures are published; the qector bench harness ships in the package for measuring on your own hardware.

GitHub Artifacts and Harness →
- - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 50c9bbe5..00000000 --- a/docs/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Documentation · QECTOR - - - - - - - - - - -
Skip to main content
Python 3.9-3.14 · Linux · macOS · Windows

Documentation

Install, configure, and integrate QECTOR Decoder v3 with your QEC stack. Stim, PyMatching, Sinter, and Qiskit compatible.

pip install qector-decoder-v3
- - - diff --git a/docs/reference.md b/docs/reference.md deleted file mode 100644 index cf4671d5..00000000 --- a/docs/reference.md +++ /dev/null @@ -1,111 +0,0 @@ -# QECTOR Decoder v3 Reference - -Version: 1.0.0 -Reference manual: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Package: `qector-decoder-v3==1.0.0` - -This page is the web companion to the reference manual. The PDF is normative for the complete mathematical proofs, implementation contracts, evidence anchors, limitations, and reproduction commands. - -## Core contract - -All supported decoders are evaluated against syndrome faithfulness: - -```text -H @ correction == syndrome (mod 2) -``` - -For a sampled physical error `e`, faithfulness puts `correction + e` in `ker(H)`. Logical success is a separate coset/observable question; raw correction-vector equality is not a valid universal logical metric for a degenerate stabilizer code. - -## Structural routing guard - -Inspect the actual check-to-qubit structure before selecting a backend: - -```text -maximum qubit/check degree <= 2 -> graphlike decoders may be eligible -any degree > 2 -> non-graphlike; use BP-OSD -``` - -Hyperedges must not be silently decomposed into pairwise matching edges. - -## Decoder families - -| Family | Domain | Contract boundary | -|---|---|---| -| `UnionFindDecoder` / `FastUnionFindDecoder` | Graphlike | Cluster growth and faithful spanning-forest peeling | -| `BlossomDecoder` | Graphlike | Exact weighted MWPM on audited small matching codes | -| `SparseBlossomDecoder` | Graphlike | Faithful, near-optimal event-driven path in tested scope | -| `BpOsdDecoder` / `BPOSDDecoder` | Reachable GF(2) matrices | BP reliability plus faithful OSD residual solve | -| `LookupTableDecoder` | Small codes | Exact for stored entries; fallback applies outside entries | -| `HybridCascadeDecoder` | Graphlike | Faithful pre-filter plus checked escalation | -| `AmbiguityClusterDecoder` | qLDPC | Exact within bounded ambiguous components | -| `TwoStageDecoder` | CSS | Faithful when both sector stages are faithful | -| `SpaceTimeDecoder` | Lifted graphlike detector model | Faithful space-time correction | -| `StreamingDecoder` / `SlidingWindowDecoder` | Multi-round workflow | Windowed primitives, not automatic full 3D matching | -| `CUDABatchDecoder` / `OpenCLBatchDecoder` | Graphlike batches | Bit identity on tested configurations for the unweighted path | -| `CUDABpOsdDecoder` | qLDPC batches | Batched BP-OSD path; single-shot CPU path preferred | -| `NativeAutoDecoder` | Eligible inputs | Routes and inherits the selected backend contract | - -## Stable and provisional APIs - -Stable symbols include the core Union-Find and Blossom decoders, code helpers, license status helpers, shot accounting, and `DecodeResult`. Batch aliases, auto-routing order, streaming tuning, BP-OSD tuning arguments, GPU paths, and network surfaces are supported but workload-sensitive or provisional according to the manual. - -## Direct decode example - -```python -import numpy as np -from qector_decoder_v3 import BlossomDecoder - -checks = [[0, 1], [1, 2], [2, 3], [3, 4]] -syndrome = np.array([0, 1, 0, 0], dtype=np.uint8) -correction = BlossomDecoder(checks, n_qubits=5).decode(syndrome) - -# Validate the contract with the same H used to construct the decoder. -``` - -## DEM workflow - -```python -from qector_decoder_v3 import dem - -model = dem.from_stim( - circuit.detector_error_model(decompose_errors=True) -) -if model.is_graphlike: - model = model.collapse_to_graph() -decoder = model.make_decoder("blossom") -``` - -Parallel graph mechanisms combine with the independent-XOR probability rule. Mechanism weights use `log((1-p)/p)`. Record the DEM settings, mechanism counts, graphlike status, and observable mapping with any result. - -## Validation policy - -The live repository suite is authoritative. The manual maps claims to syndrome-faithfulness, property, exhaustive-oracle, cross-decoder, DEM, logical-observable, qLDPC, memory, API, and hardware-gated GPU tests. - -A skipped hardware-gated test is not evidence for that hardware path. A historical test count is not a current pass/fail statement. - -## Measurement policy - -This website publishes no hardware-specific benchmark data, charts, screenshots, latency, throughput, VRAM, or threshold results. Such values depend on code family, distance, rounds, noise model, decoder options, compiler, operating system, hardware, driver, batch shape, seed, and warmup. - -For an independent local measurement, store: - -```text -code family and size -noise model and DEM settings -shots, trials, warmup, and seed -hot/cold/end-to-end path label -raw JSON/CSV plus SHA-256 -Wilson interval for logical-error rates -``` - -Keep Python allocation, process RSS, native memory, and GPU memory as separate metrics. Score logical observables rather than raw correction equality. Do not compare code-capacity and circuit-level rows. - -## Deployment posture - -The local Rust/Python CPU library is the preferred research path. CUDA/OpenCL batch paths require controlled runtime setup. REST, gRPC, MCP, and metrics surfaces are provisional and require authentication, authorization, TLS, rate limits, timeouts, audit logging, request limits, and resource quotas before production use. - -License verification is offline. The decoder does not make a blocking network call during decoding. Distance caps and GPU feature access are enforced by the Rust core according to the active license tier. - -## Canonical citation - -Guillaume Lessard, *QECTOR Decoder v3: Syndrome-Faithful Decoding - Foundations, Algorithms, and Architecture of a Fifteen-Backend Quantum Error Correction Engine*, version 1.0.0, August 2026. DOI: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046). diff --git a/evidence/index.html b/evidence/index.html deleted file mode 100644 index db58e16e..00000000 --- a/evidence/index.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Evidence & Reports · QECTOR - - - - - - - - - - -
Skip to main content
Verified v1.0.0 Manual · SHA-256 Sealed Manifests

Evidence & Reports

Public claims are documented with their boundaries: the six-record Zenodo evidence corpus, validation reports, and SHA-256 sealed manifests archived on GitHub.

Evidence Reports

Official User Manual v1.0.0

Verified

QECTOR Decoder v3 Reference Manual v1.0.0 (DOI 10.5281/zenodo.21941046): the normative source for decoder contracts and claim boundaries.

SHA-256 Sealed Artifact Manifests

Verified

Source and artifact releases carry SHA-256 sealed manifests on GitHub, so published builds can be verified against their recorded hashes.

Syndromic Validation Harness

Verified

Decode runs verify H·c = s on every shot through the self-debugging harness shipped in the package, with the harness published on GitHub.

Scoped Methodology and Limitations

Methodology

The manual excludes hardware-bound performance figures and documents the metadata, confidence intervals, and artifact requirements for future measurements.

Zenodo Evidence Registry

The complete six-record evidence corpus for QECTOR Decoder v3 v1.0.0. Each record is a DOI-stable, versioned deposit with its scope and date listed below.

DOIScopeDateAccess
10.5281/zenodo.21611214User manual2026-08-06open
10.5281/zenodo.21822738Restricted source custody2026-08-06 embargoed
10.5281/zenodo.21823755V&V report2026-08-06open
10.5281/zenodo.21850315Technical monograph2026-08-08open
10.5281/zenodo.21941046Normative reference manual2026-08-14open
10.5281/zenodo.22046403Verification / proof bundle2026-08-21open

Document deposits carry their own document-level publication licence; software licensing (PolyForm Noncommercial / commercial) is separate and governed by the license page. The embargoed record is restricted source custody and is not part of the public evidence set.

Verify on Your Own Machine

No universal benchmark figures are published on this site, because results depend on your hardware. The package ships the qector-doctor environment diagnostic and the qector bench harness so you can validate and measure on your own machines. Run them yourself:

# Quick validation
-pip install --upgrade "qector-decoder-v3>=1.0.1,<2"
-python -c "import qector_decoder_v3 as qd; print(qd.__version__)"
-# environment diagnostic
-qector-doctor
-# Throughput benchmark on a generated surface-code circuit
-qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001

How to Cite QECTOR

If you use QECTOR Decoder v3 or its validation artifacts in academic research, please cite our software artifact release:

@software{lessard2026qector,
-  author  = {Guillaume Lessard},
-  title   = {{QECTOR Decoder v3}: Rust/Python Quantum Error Correction Decoding Platform},
-  year    = {2026},
-  version = {1.0.1},
-  url     = {https://qector.store/},
-  note    = {Source-available under PolyForm Noncommercial 1.0.0. Commercial license required for commercial use.}
-}
Our Transparency Commitment

We document validation results openly, including known limitations. Published numeric claims link to GitHub artifact releases. We do not hide non-passes behind aggregate statistics.

- - - diff --git a/feed.xml b/feed.xml deleted file mode 100644 index e6c11cf1..00000000 --- a/feed.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - - QECTOR Blog - Field notes on quantum error correction, decoder algorithms, qLDPC, noise models, evidence, systems, and ecosystem integration. - https://qector.store/feed.xml - - - 2026-09-27T00:00:00Z - - Guillaume Lessard - https://qector.store/guillaume-lessard/ - admin@qector.store - - QECTOR site - https://qector.store/images/logo.png - - - Stim, Sinter, PyMatching, and Qiskit Integration - https://qector.store/blog/20EcosystemIntegration/ - - 2026-08-01T00:00:00Z - Connect QECTOR to common quantum software workflows while preserving detector, observable, and noise contracts. - - - - Shipping a QEC Decoder Responsibly - https://qector.store/blog/19ReleaseLicensing/ - - 2026-08-01T00:00:00Z - API stability, wheels, offline licensing, release gates, and the difference between local and network deployment. - - - - Rust, PyO3, and QEC Memory Discipline - https://qector.store/blog/18RustPyo3Architecture/ - - 2026-08-01T00:00:00Z - FFI buffers, selective repacking, GIL release, Rayon worker state, and memory metrics at the Python boundary. - - - - Reproducible QEC Benchmarks - https://qector.store/blog/17ReproducibleBenchmarks/ - - 2026-08-01T00:00:00Z - Separate correctness from performance and make every benchmark claim traceable to an artifact and hash. - - - - Choosing a Decoder From the Matrix - https://qector.store/blog/16DecoderSelection/ - - 2026-08-01T00:00:00Z - A practical decision guide for graphlike, qLDPC, space-time, streaming, CSS, and batch workloads. - - - - Logical Error Rates Without the Wrong Metric - https://qector.store/blog/15LogicalErrorRates/ - - 2026-08-01T00:00:00Z - Score observables, compute Wilson intervals, keep noise models comparable, and report reproducible LERs. - - - - Weighted Decoding and Likelihood Priors - https://qector.store/blog/14WeightedDecoding/ - - 2026-08-01T00:00:00Z - Why log((1-p)/p) belongs in the graph and how matching, Union-Find, and space-time paths use weights. - - - - Detector Error Models from Faults to Graphs - https://qector.store/blog/13DemPipeline/ - - 2026-08-01T00:00:00Z - Parse DEMs, classify hyperedges, collapse parallel mechanisms, set weights, and preserve observables. - - - - Rotated Surface Code d=3 - https://qector.store/blog/12RotatedSurfaceD3/ - - 2026-08-01T00:00:00Z - Nine data qubits, boundaries, graphlike eligibility, logical strings, and a complete structural audit. - - - - A Hand-Worked Steane Decode - https://qector.store/blog/11SteaneWorkedDecode/ - - 2026-08-01T00:00:00Z - Compute a Steane syndrome by hand and see why stabilizer cosets matter more than raw correction equality. - - - - Evidence-First QEC Architecture and Benchmarks - https://qector.store/blog/10BenchmarksArchitecture/ - - 2026-08-01T00:00:00Z - The v1.0.0 backend map, logical scoring, Wilson intervals, metadata, release gates, and claim boundaries. - - - - GPU Batch Decoding and Tested Bit Identity - https://qector.store/blog/09GpuAcceleration/ - - 2026-08-01T00:00:00Z - Per-shot GPU state isolation, deterministic Union-Find, scoped CPU/GPU identity, and deployment gates. - - - - Routing, Cascades, and Two-Stage CSS Decoding - https://qector.store/blog/08AutoDecoderCascade/ - - 2026-08-01T00:00:00Z - Structural backend eligibility, fallback verification, hybrid acceptance, and CSS sector feedforward. - - - - Space-Time Decoding with Noisy Measurements - https://qector.store/blog/07SpaceTimeDecoder/ - - 2026-08-01T00:00:00Z - Detector differencing, temporal and spatial weights, measurement glitches, and streaming scope. - - - - Ambiguity Clustering and Learned Predecoders - https://qector.store/blog/06AmbiguityGnnNeural/ - - 2026-08-01T00:00:00Z - Freeze confident qubits, solve ambiguous components, and add learned priors without moving the correctness proof. - - - - BP-OSD for qLDPC Hypergraphs - https://qector.store/blog/05BpOsdQldpc/ - - 2026-08-01T00:00:00Z - Log-domain belief propagation, ordered statistics, residual GF(2) solving, and faithful non-graphlike decoding. - - - - UF-01: Parity, Peeling, and Graphlike Decoding - https://qector.store/blog/04FastUnionFind/ - - 2026-08-01T00:00:00Z - Cluster parity, spanning-forest peeling, weighted growth, zero-allocation structure, and domain boundaries. - - - - Sparse Blossom and Event-Driven Growth - https://qector.store/blog/03SparseBlossomEventDriven/ - - 2026-08-01T00:00:00Z - Region states, collision times, tight edges, radix heaps, and the tested scope of Sparse Blossom. - - - - Exact Blossom Decoding for Graphlike QEC - https://qector.store/blog/02BlossomMwpmExact/ - - 2026-08-01T00:00:00Z - How weighted MWPM, Edmonds' primal-dual view, path boundaries, and sparse candidate escalation fit together. - - - - Syndrome Faithfulness: The Decoder Contract - https://qector.store/blog/01QecFoundations/ - - 2026-08-01T00:00:00Z - The GF(2) invariant Hc=s, logical cosets, degeneracy, and graphlike eligibility explained from first principles. - - \ No newline at end of file diff --git a/feed.xsl b/feed.xsl deleted file mode 100644 index 9776476b..00000000 --- a/feed.xsl +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - <xsl:value-of select="atom:feed/atom:title"/> - - - - -

-

-
    - -
  • - -
    -

    -
  • -
    -
-

QECTOR

- - -
-
\ No newline at end of file diff --git a/fr/decoder/index.html b/fr/decoder/index.html deleted file mode 100644 index de2f5d99..00000000 --- a/fr/decoder/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QECTOR Decoder v3 · Décodage QEC pour Python - - - - - - - - - - - - - -
Aller au contenu principal
v1.0.1 (code source disponible) · Workbench gratuit

QECTOR Decoder v3

Bibliothèque Python à noyau Rust offrant 17 configurations de décodeurs, du MWPM exact au décodage GPU par lots. La v1.0.1 est la version stable actuelle : paliers de stabilité d’API, Relay-BP et CS-OSD, points d’entrée Sinter et qiskit, et l’outil en ligne de commande qector, avec une provenance de compilation pour chaque roue. Le banc d’essai reproductible qector bench est inclus pour mesurer sur votre propre matériel. Compatible Stim, roues binaires sur PyPI, artefacts publiés sur GitHub.

Configurations
17

Du MWPM exact au GPU par lots, selon des paliers de stabilité documentés

Roues binaires
18

Python 3.9 à 3.14 sur Windows amd64, Linux x86_64 et macOS arm64

API stable
v1.0.1

Version stable avec paliers de stabilité d’API documentés

Tests CI
Automatisés

Validation continue et comparaison avec Stim sur GitHub

Algorithmes de décodage

Décodeurs stables avec artefacts de validation sur GitHub; les décodeurs expérimentaux sont au stade de la recherche. Depuis la v1.0.0, l’API publique est figée selon des paliers de stabilité documentés. Aucun chiffre de performance universel n’est publié : mesurez sur votre matériel avec qector bench.

Décodeurs stables

Union-Find

Quasi linéaire

Décodeur approché en temps quasi linéaire. L’option à haut débit pour les codes de type graphe : un peu moins précis, beaucoup plus rapide.

Fast Union-Find

Chemin rapide

Chemin Union-Find optimisé pour les pipelines de simulation hors ligne à faible latence.

Blossom MWPM

Référence exacte

Couplage parfait de poids minimal exact pour les codes de type graphe. Le décodeur de référence des codes de surface.

Décodage par lots CPU et GPU

Parallèle

Décodage par lots natif CUDA / OpenCL pour les charges prises en charge. Le débit dépend du matériel et de la taille des lots; CUDA accepte edge_weights et precision="f64" depuis la v1.0.0.

Décodeurs expérimentaux et de recherche

BP-OSD

Recherche qLDPC

Propagation de croyance + décodage par statistiques ordonnées. La v1.0.0 ajoute les ordonnancements Relay-BP, CS-OSD(lambda, w) et l’amortissement des LLR.

Belief-Matching

Bruit corrélé

Prétraitement BP + MWPM exact repondéré. Voie de recherche pour le bruit corrélé.

Sparse Blossom

Quasi optimal

Variante blossom par croissance de régions pour les graphes de détecteurs. Chemin sans allocation depuis la v1.0.0.

Hybrid et AutoDecoder

Routage adaptatif

AutoDecoder et HybridDecoder choisissent entre Union-Find et Blossom selon les propriétés du code.

Décodeur à table

Petits codes

Table de corrections précalculée pour les petits codes ou des sous-espaces de syndromes.

Code couleur / Deux étapes / Grappes d’ambiguïté

Recherche

Familles ajoutées en v1.0.0 : ColourCodeDecoder (cluster_bposd optionnel), TwoStageDecoder, AmbiguityClusterDecoder.

Caractéristiques techniques

LangagesNoyau Rust (PyO3) / API Python 3.9 à 3.14
PlateformesLinux x86_64, macOS arm64, Windows amd64
GPUChemins par lots CUDA / OpenCL (configurations prises en charge selon la documentation)
Bibliothèque QECStim (simulation de bruit sur circuits quantiques)
DistributionRoues binaires PyPI (manylinux, macOS, Windows)
LicencePolyForm Noncommercial 1.0.0 (communauté) / commerciale
ValidationGitHub : github.com/GuillaumeLessard/qector-decoder
État de la validation

La v1.0.0 (2026-08-06) a été la première version stable; la v1.0.1 (2026-11-06) est la version actuelle. Chaque décodage est vérifié contre son syndrome (H·c = s) et les manifestes d’artefacts sont scellés par SHA-256 sur GitHub. Aucun chiffre de performance universel n’est publié; qector bench est inclus pour mesurer sur votre matériel.

Artefacts et banc d’essai sur GitHub →

Detailed English page · Tutoriel (en anglais)

- - - diff --git a/fr/index.html b/fr/index.html deleted file mode 100644 index f6cbe60c..00000000 --- a/fr/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QECTOR · Décodage de correction d’erreurs quantiques pour Python - - - - - - - - - - - - - -
Aller au contenu principal
v1.0.1 · 18 wheels vérifiées

Décodage QEC pour Python

Une seule bibliothèque pour plusieurs familles de décodeurs sur la même matrice de contrôle : Union-Find, MWPM exact, BP-OSD et Relay-BP pour les codes qLDPC, sur CPU et GPU, avec Stim et Sinter. Chaque correction est vérifiée contre son syndrome, et les licences commerciales se vérifient hors ligne.

Gratuit pour la recherche universitaire et non commerciale. Forfaits commerciaux dès 79 $/mois, avec garantie de remboursement de 14 jours.

Démarrage rapidebash
pip install qector-decoder-v3==1.0.1
-python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"

Chaque correction est vérifiée

Chaque résultat satisfait H·c = s (mod 2) : la correction reproduit le syndrome.

Licences hors ligne

Jetons Ed25519 vérifiés localement. Aucun serveur de licence, aucune télémétrie : fonctionne sur des machines isolées.

Versions vérifiables

18 wheels construites dans GitHub Actions, avec provenance Sigstore et attestations PyPI, testées sur chaque système avant publication.

Aucun nombre de postes

Une licence couvre l’usage interne de votre organisation, sur autant de machines et par autant de personnes que nécessaire.

Les produits

QECTOR Decoder v3

La bibliothèque Python à noyau Rust : Union-Find, MWPM exact (Blossom), BP-OSD et Relay-BP pour les codes qLDPC, décodage par lots CPU et GPU, intégration Stim et Sinter.

Le décodeur →

Plugiciel Claude

Un serveur MCP isolé du réseau (air-gapped) qui apporte le décodage vérifié dans Claude Code et Claude Desktop, avec schémas validés et versions signées.

Le plugiciel (anglais) →

Workbench

L’application de bureau gratuite pour Windows et Linux : constructeur de circuits, familles de codes et décodeurs, sans installation de Python.

Le Workbench (anglais) →

En français

La documentation technique est en anglais. Pour toute question, écrivez-nous en français à admin@qector.store.

- - - diff --git a/fr/license-agreement/index.html b/fr/license-agreement/index.html deleted file mode 100644 index e37d6b43..00000000 --- a/fr/license-agreement/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Contrat de licence commerciale · QECTOR Decoder v3 - - - - - - - - - - - - - -
Aller au contenu principal
Version 2026-11 · En vigueur le 6 novembre 2026 · Droit applicable : Québec

Contrat de licence commerciale

Ces conditions s’appliquent lorsque votre organisation achète un forfait QECTOR. L’usage non commercial reste gratuit sous la licence PolyForm Noncommercial 1.0.0.

Version 2026-11, en vigueur le 6 novembre 2026. La version en vigueur à la date de votre achat ou de votre renouvellement régit cette période payée.

English version

1. Parties et acceptation

Le présent contrat est conclu entre Guillaume Lessard, entrepreneur individuel faisant affaire sous le nom iD01t Productions, 288, boul. des Ormeaux, Longueuil (Québec) Canada J4L 1J4 (le « Concédant », « nous »), et l’organisation nommée lors du paiement (le « Licencié », « vous »).

Vous l’acceptez en effectuant un achat, en activant un jeton de licence ou en utilisant le Logiciel à des fins commerciales. La personne qui achète confirme qu’elle peut engager l’organisation. Si vous n’acceptez pas ces conditions, n’achetez pas et n’utilisez pas de forfait payant. La garantie de remboursement de 14 jours s’applique.

2. Définitions

  • Logiciel : le paquet Python qector-decoder-v3 et son noyau compilé, tels que publiés sur PyPI et GitHub, avec leur documentation.
  • Forfait : l’offre achetée (Pro, Pro Perpétuel, Labo, Pilote ou Entreprise), telle que décrite sur la page Tarifs à la date d’achat.
  • Jeton de licence : la clé signée Ed25519 que nous vous envoyons par courriel et que le Logiciel vérifie hors ligne.
  • Usage interne : l’utilisation par votre organisation, ses employés et les contractuels qui travaillent pour elle, à ses propres fins, y compris en production.
  • Durée : la période payée (un mois ou un an pour les abonnements, 60 jours pour le Pilote), ou sans date de fin pour Pro Perpétuel.

3. Octroi de licence

Sous réserve du paiement et du présent contrat, nous vous accordons une licence non exclusive, non transférable et mondiale d’installer et d’utiliser le Logiciel pour un Usage interne pendant la Durée, au palier de licence de votre Forfait.

Il n’y a aucun nombre de postes ni d’utilisateurs. Vous pouvez installer le Logiciel sur autant de machines que vous le souhaitez et le faire utiliser par autant de membres de votre personnel que nécessaire, pourvu que ce soit pour votre organisation. Une licence couvre une seule organisation acheteuse; les sociétés affiliées ont besoin de leur propre licence, sauf disposition contraire d’un contrat Entreprise.

4. Contenu de chaque forfait

ForfaitPortée
ProPalier de licence Pro (décodage GPU par lots, distance de code 19), Usage interne y compris en production, support par courriel, toutes les versions publiées pendant la Durée.
Pro PerpétuelLes droits Pro sans date de fin pour toutes les versions 1.x de qector-decoder-v3, y compris les mises à jour correctives et mineures, et 12 mois de support par courriel. Une nouvelle version majeure (2.0 et suivantes) est une nouvelle licence.
LaboPalier de licence Entreprise (décodage GPU par lots, distance de code 63), support prioritaire avec des délais de réponse convenus à l’intégration, un appel d’intégration et un rapport de validation par année.
PiloteUne licence d’évaluation de 60 jours au palier Pro avec un appel d’intégration, pour les essais de performance, les tests d’intégration et les études, pas pour la production. Créditable sur Labo dans les 90 jours.
EntrepriseDroits d’hébergement, SaaS ou OEM et support dédié uniquement selon un contrat signé distinct, qui prévaut sur le présent contrat.

5. Restrictions

Sauf si un contrat Entreprise signé le permet, vous ne pouvez pas :

  • redistribuer, vendre, sous-licencier, louer ou prêter le Logiciel ou un jeton de licence;
  • intégrer le Logiciel dans un produit distribué à des tiers (OEM), ni offrir son décodage à des tiers comme service hébergé, API ou SaaS;
  • partager un jeton de licence hors de votre organisation ni le publier;
  • retirer, contourner ou altérer les vérifications de licence, les avis ou les limites de palier;
  • faire de l’ingénierie inverse du noyau compilé, sauf dans la mesure où la loi applicable le permet malgré cette restriction.

6. Jetons de licence et vérification hors ligne

Les jetons de licence sont vérifiés hors ligne par le Logiciel au moyen d’une clé publique qu’il contient. Il n’y a ni serveur de licence, ni appel d’activation, ni télémétrie : le Logiciel fonctionne sur des machines isolées (air-gapped).

Gardez votre jeton confidentiel. S’il est perdu, exposé ou associé à la mauvaise adresse, écrivez-nous et nous le réémettrons sans frais. Un jeton peut expirer quelques jours après la fin de la période payée, pour absorber les renouvellements tardifs; ce délai de grâce ne donne aucun droit au-delà de la Durée.

Si un paiement est entièrement remboursé ou contesté, nous révoquons le jeton et l’inscrivons à qector.store/stripe/revoked.txt; vous devez alors cesser de l’utiliser.

7. Durée, renouvellement et résiliation

Pro (mensuel ou annuel) et Labo sont des abonnements qui se renouvellent automatiquement pour la même période au prix en vigueur jusqu’à leur résiliation. Nous envoyons un rappel 14 jours avant chaque renouvellement annuel. Vous pouvez résilier en tout temps dans le portail client ou par courriel; votre licence reste valide jusqu’à la fin de la période payée.

Le Pilote prend fin après 60 jours et ne se renouvelle pas. Pro Perpétuel n’a pas de date de fin pour les versions 1.x qu’il couvre.

8. Prix, taxes et remboursements

Les prix sont en dollars américains, taxes en sus. Stripe perçoit le paiement et toute taxe de vente, TPS/TVQ ou TVA applicable selon votre adresse de facturation. Chaque forfait comporte une garantie de remboursement de 14 jours sur le premier paiement, selon la Politique de remboursement. Les paiements de renouvellement suivent la même politique.

Les établissements d’enseignement qui achètent un forfait payant obtiennent 40 % de rabais sur Labo. L’usage universitaire non commercial reste gratuit sous la licence PolyForm Noncommercial.

9. Support et mises à jour

Le support se fait par courriel à admin@qector.store, avec une première réponse en 2 jours ouvrables pour Pro et Pro Perpétuel. Labo bénéficie d’un support prioritaire avec des délais convenus à l’intégration. Les abonnements comprennent toutes les versions publiées pendant la Durée; Pro Perpétuel comprend toutes les versions 1.x.

Nous pouvons modifier ou retirer des fonctionnalités dans les nouvelles versions. Les versions déjà reçues continuent de fonctionner sous votre licence.

10. Propriété et composants tiers

Le Logiciel est concédé sous licence, non vendu. Nous conservons tous les droits qui ne sont pas expressément accordés, y compris le droit d’auteur et les marques. Les composants libres fournis avec le Logiciel restent régis par leurs propres licences, que le présent contrat ne limite pas.

Vos données d’entrée et vos résultats (codes, syndromes, circuits, résultats) vous appartiennent. Le Logiciel ne nous en transmet aucun.

11. Garantie

Si le Logiciel ne vous convient pas, votre recours est la garantie de remboursement de 14 jours. Pour le reste, le Logiciel est fourni « tel quel », sans autre garantie expresse ou implicite, notamment de qualité marchande, d’adaptation à un usage particulier et d’absence de contrefaçon, dans la mesure permise par la loi.

Le Logiciel est une bibliothèque de décodage pour la simulation et la recherche, validée en vérifiant que chaque correction reproduit son syndrome. Il n’est pas certifié pour un usage critique pour la sécurité. Rien dans le présent contrat n’exclut une garantie que la loi applicable, y compris la Loi sur la protection du consommateur du Québec lorsqu’elle s’applique, ne permet pas d’exclure.

12. Limitation de responsabilité

Dans la mesure permise par la loi, notre responsabilité totale en vertu du présent contrat est limitée aux sommes que vous avez payées au cours des 12 mois précédant l’événement à l’origine de la réclamation, et nous ne sommes pas responsables des dommages indirects, consécutifs ou punitifs, ni des pertes de profits, de données ou d’affaires.

Ces limites ne s’appliquent pas au préjudice corporel ou moral, ni au préjudice causé par une faute intentionnelle ou lourde, que le droit québécois ne permet pas d’exclure.

13. Contrôle des exportations et sanctions

Vous respecterez les lois sur le contrôle des exportations et les sanctions du Canada et de tout autre pays qui vous est applicable, et vous n’utiliserez ni ne transférerez le Logiciel vers une personne ou une destination que ces lois interdisent.

14. Résiliation pour manquement

Nous pouvons résilier votre licence en cas de manquement important au présent contrat, comme un usage hors de sa portée, après un avis écrit et un délai de 15 jours pour y remédier. À la résiliation, vous devez cesser l’usage commercial et supprimer vos jetons de licence. Aucun remboursement n’est dû pour la Durée écoulée après une résiliation pour manquement.

15. Renseignements personnels

Nous ne recueillons que ce qui est nécessaire pour vendre et livrer votre licence. Consultez la Politique de confidentialité pour savoir ce que nous recueillons, pourquoi, où ces renseignements sont conservés et quels sont vos droits en vertu de la loi québécoise.

16. Modifications du contrat

Nous pouvons publier de nouvelles versions du présent contrat. Une nouvelle version s’applique aux nouveaux achats et, après un préavis d’au moins 30 jours par courriel, aux renouvellements. Elle ne modifie jamais les conditions d’une période déjà payée. Les versions antérieures sont disponibles sur demande.

17. Droit applicable, langue et intégralité

Le présent contrat est régi par les lois du Québec et les lois fédérales du Canada qui s’y appliquent. Les tribunaux du district judiciaire de Montréal sont compétents, sans priver un consommateur de la protection des lois impératives ou des tribunaux de son lieu de résidence.

La présente version française est la version de référence remise avant la version anglaise. Les parties peuvent convenir d’être liées par la version anglaise; dans ce cas, la clause de langue de cette version s’applique.

Le présent contrat, la description du Forfait à la date d’achat et la Politique de remboursement constituent l’entente complète pour les forfaits payants. Un contrat Entreprise signé prévaut en cas de conflit. Si une clause est inapplicable, le reste demeure en vigueur.

- - - diff --git a/fr/license/index.html b/fr/license/index.html deleted file mode 100644 index bcbd3500..00000000 --- a/fr/license/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Licence · QECTOR - - - - - - - - - - - - - -
Aller au contenu principal
PolyForm Noncommercial 1.0.0 · Gratuit pour la recherche · Usage commercial sous licence · Mis à jour en novembre 2026

Licence

Le code source de QECTOR Decoder v3 est disponible, mais son usage commercial n’est pas gratuit. Gratuit pour l’usage personnel, académique et la recherche non commerciale. L’usage commercial exige un forfait payant dès 79 $/mois, avec une garantie de remboursement de 14 jours. Le Workbench est gratuit.

Licence communautaire

QECTOR Decoder v3 est publié sous la PolyForm Noncommercial License 1.0.0. Vous pouvez utiliser, modifier et distribuer le logiciel gratuitement à des fins non commerciales.

Permis (non commercial)

  • • Recherche et apprentissage personnels
  • • Recherche et enseignement universitaires
  • • Usage par les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales, quelle que soit leur source de financement
  • • Projets libres non commerciaux
  • • Publication de résultats de mesures (avec attribution)

Exige une licence commerciale

  • • Intégration dans un produit commercial
  • • R-D commerciale interne
  • • Travail d’une entreprise dans le cadre de contrats gouvernementaux, de défense ou universitaires
  • • Redistribution dans des produits commerciaux
  • • Usage en SaaS ou par API hébergée

Licence commerciale

Chaque forfait payant est régi par le Contrat de licence commerciale (English version). Toutes les licences commerciales comprennent le droit d’usage commercial (interne, sans nombre de postes), des ensembles d’artefacts reproductibles et l’examen prioritaire des bogues. La redistribution et les droits OEM ne sont pas inclus par défaut; écrivez à admin@qector.store pour une licence OEM ou SaaS. Le détail des paliers est sur la page Tarifs.

Licences perpétuelles

Pro Perpétuel (1 990 $, paiement unique) : les mêmes droits que Pro, pour toutes les versions 1.x de qector-decoder-v3, y compris les correctifs et les mises à jour mineures; une nouvelle version majeure comme la 2.0 exige une nouvelle licence. Les licences achetées auparavant sous le nom Solo / Indie Perpétuel conservent leurs conditions d’origine.

Ce que change une licence payante

  • • Accorde l’usage commercial que PolyForm Noncommercial exclut, pour la durée achetée.
  • • Usage interne seulement. La redistribution, la sous-licence, l’intégration OEM et les services SaaS ou API hébergées offerts à des clients sont exclus, sauf entente écrite Entreprise ou OEM.
  • • S’active en réglant QECTOR_LICENSE et QECTOR_LICENSE_KEY à votre jeton Ed25519. La vérification se fait hors ligne, avec une clé publique intégrée au paquet : aucun serveur de licences, aucune communication sortante, fonctionne sur un réseau isolé.
  • • Le paquet est identique avec ou sans licence. Sans jeton, un avis de licence s’affiche à l’importation (masquable avec QECTOR_SILENT=1). Le jeton masque l’avis et débloque les fonctions liées au palier : décodage GPU par lots (CUDA/OpenCL) sur tous les forfaits payants, et une distance de code maximale de 7 (Communauté), 19 (Pro, Équipe) ou 63 (Labo, Entreprise). Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1 est réglé.
  • • Aucune garantie, indemnisation, exclusivité, marque de commerce ni licence de brevet n’est incluse par défaut.

Les jetons sont livrés en quelques minutes, et chaque forfait est assorti d’une garantie de remboursement de 14 jours sur le premier paiement : voir la Politique de remboursement. Une licence remboursée prend fin au remboursement.

Activer votre licence

  1. 1. Achat vérifié. Le service de livraison n’accepte qu’un événement de paiement Stripe signé et enregistre la référence Stripe, le courriel, le palier et le jeton dans un registre protégé.
  2. 2. Installer. python -m pip install --upgrade "qector-decoder-v3>=1.0,<2" depuis le projet PyPI officiel.
  3. 3. Régler les deux variables. Donnez à QECTOR_LICENSE et à QECTOR_LICENSE_KEY le même jeton, reçu par courriel. La première sert à l’avis d’importation, la seconde au moteur selon le palier.
  4. 4. Vérifier hors ligne. python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])" doit afficher votre palier payant (par exemple Pro) et non Community. Aucun serveur n’est contacté.
  5. 5. Conserver la preuve. Gardez le jeton avec la facture ou la confirmation Stripe. N’envoyez jamais le jeton dans une URL, un suivi de bogues, une messagerie ou un dépôt public.

Courriel manquant ou jeton refusé? Écrivez à admin@qector.store avec la référence Stripe. N’ouvrez pas un second paiement ni une contestation pendant que la livraison est corrigée.

Texte complet de la licence

Le texte officiel de la PolyForm Noncommercial License 1.0.0 (en anglais) est publié à polyformproject.org/licenses/noncommercial/1.0.0 et inclus tel quel dans chaque distribution (LICENSE dans la roue). Les résumés de cette page sont fournis à titre indicatif; en cas d’écart, le texte de la licence prévaut.

Licences de tiers

QECTOR s’appuie sur plusieurs projets libres, dont Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD) et NetworkX (BSD). Les attributions complètes sont incluses dans la distribution. Les noms de tiers sont des marques de leurs propriétaires respectifs; QECTOR n’est ni affilié à eux, ni commandité, ni approuvé par eux.

- - - diff --git a/fr/pricing/index.html b/fr/pricing/index.html deleted file mode 100644 index 59a75364..00000000 --- a/fr/pricing/index.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tarifs · QECTOR - - - - - - - - - - - - - -
Aller au contenu principal
Licences commerciales claires et transparentes

Licenciez QECTOR pour la production

Gratuit pour la recherche académique et non commerciale. Pour un usage commercial, choisissez un forfait : licences vérifiées hors ligne, entièrement hors réseau, annulables en tout temps, satisfait ou remboursé 14 jours sur votre premier paiement.

Hors réseau

Jeton signé, vérifié hors ligne. Aucun serveur de licence, aucun appel réseau.

Remboursé 14 jours

Remboursement complet de votre premier paiement de tout forfait, sans question.

Annulable en tout temps

Votre licence reste valide jusqu’à la fin de la période payée.

Forfaits commerciaux

Droits de production pour l’usage interne de votre organisation. Les abonnements se renouvellent automatiquement jusqu’à annulation.

40 % de rabais sur Labo pour les établissements d’enseignement. La recherche non commerciale est gratuite.
Le plus populaire
Pro
79 $/ mois

Ou 790 $/an (2 mois offerts). Palier de licence Pro.

  • Included: Usage commercial interne
  • Included: Toutes les familles de décodeurs
  • Included: Lots CPU + GPU (CUDA/OpenCL)
  • Included: Distances de code jusqu’à 19
  • Included: Support courriel (2 jours ouvrables)
Acheter au mois
Labo
9 900 $/ an

Palier de licence Entreprise, pour les groupes de recherche et laboratoires.

  • Included: Tout Pro
  • Included: Distances de code jusqu’à 63
  • Included: Support prioritaire avec SLA
  • Included: Appel d’intégration de 2 h
  • Included: Un rapport de validation (valeur 5 000 $)
Acheter Labo
Entreprise & OEM
25 k$+/ an

Redistribution, SaaS, OEM et conditions sur mesure.

  • Included: Contrat signé, conditions sur mesure
  • Included: SaaS et API offertes aux clients
  • Included: OEM et regroupement matériel
  • Included: Ingénieur de support attitré
Contacter l’équipe commerciale

Pro facturé à l’année : 790 $ / an. Vous préférez l’acheter définitivement ? Pro Perpétuel : 1 990 $ paiement unique (toutes les versions 1.x, 12 mois de support).

QECTOR Validation Sprint

3 750 $ paiement unique · Livraison en 10-20 jours

La voie rapide recommandée pour les équipes qui veulent une preuve immédiate et défendable de la valeur sur leur flux de travail. Nous exécutons jusqu’à 3 charges de référence standard avec QECTOR et livrons des lots d’artefacts reproductibles.

  • ✓ Inclut une licence Pilote de 60 jours
  • ✓ Analyse comparative vs PyMatching/Stim
  • ✓ Appel de révision des résultats de 60 minutes
Demander un sprint de validation

Seulement la licence et un appel ? Le Pilote de 60 jours est à 1 500 $ : un appel d’intégration d’une heure et une note de validation écrite, crédités à 100 % sur Labo dans les 90 jours.

Activer votre licence

Tout le monde installe la même wheel depuis PyPI : il n’existe pas de build commercial séparé. Votre jeton déverrouille les fonctionnalités payantes : décodage GPU (CUDA/OpenCL) par lots sur tous les forfaits payants, et distances de code jusqu’à 63 sur Labo et Entreprise. Le décodage CPU n’est jamais bloqué; les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.

pip install --upgrade "qector-decoder-v3>=1.0.1,<2"
-export QECTOR_LICENSE_KEY="<votre-jeton>"
-export QECTOR_LICENSE="<votre-jeton>"
-
-# Vérifier hors ligne : affiche Pro ou Enterprise
-python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"

Les jetons sont vérifiés hors ligne contre une clé publique embarquée dans le paquet : aucun serveur de licence, aucun appel maison, fonctionne complètement hors réseau.

Pourquoi licencier QECTOR ?

Gratuit (source disponible)Licencié (commercial)
Usage de recherche non commerciale seulementDroits internes de R&D et de production
Support communautaire (GitHub Issues)Support courriel prioritaire et SLA
QECTOR Workbench GUI (gratuit)Harnais de reproduction d’artefacts de validation
Licence PolyForm NoncommercialContrat de licence commerciale écrit

Foire aux questions

La licence fonctionne-t-elle sur des machines hors réseau ?

Oui. Une licence est un jeton signé vérifié hors ligne contre une clé publique incluse dans le paquet. Aucun serveur de licence, aucune activation, aucun appel réseau : elle fonctionne sur des systèmes isolés et hors réseau.

Comment la licence est-elle livrée, et que déverrouille le jeton ?

Par courriel dans les minutes qui suivent le paiement (vérifiez le courrier indésirable, puis écrivez à admin@qector.store avec votre reçu Stripe). Tout le monde installe la même wheel : pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Définissez QECTOR_LICENSE_KEY et QECTOR_LICENSE au jeton. Chaque forfait payant déverrouille le décodage GPU (CUDA/OpenCL) par lots; Labo et Entreprise portent aussi le palier de distance à 63. Le décodage CPU n’est jamais bloqué, et les plafonds de distance ne s’appliquent que si QECTOR_ENFORCE=1.

Puis-je l’essayer avant de m’engager ?

Chaque forfait offre une garantie satisfait ou remboursé de 14 jours sur le premier paiement : achetez Pro au mois, testez-le sur vos propres charges, et si ce n’est pas le bon choix, écrivez à admin@qector.store pour un remboursement complet. Pour une évaluation encadrée avec appel d’intégration, prenez le Pilote de 60 jours, entièrement crédité sur Labo.

Les forfaits se renouvellent-ils automatiquement, et comment annuler ?

Oui. Pro (mensuel ou annuel) et Labo se renouvellent automatiquement jusqu’à annulation, avec un courriel de rappel 14 jours avant chaque renouvellement annuel. Annulez en tout temps depuis votre reçu Stripe ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée. Pro Perpétuel et le Pilote sont des paiements uniques et ne se renouvellent jamais.

Quelle est votre politique de remboursement ?

Garantie satisfait ou remboursé de 14 jours sur votre premier paiement de tout forfait : écrivez à admin@qector.store avec votre reçu Stripe et nous remboursons en entier. Les renouvellements ne sont pas remboursés au prorata. Les achats en double et les frais faits par erreur sont toujours remboursés. Si un jeton n’arrive pas ou ne se vérifie pas, nous le réémettons sans frais. Cela ne limite pas les droits légaux auxquels on ne peut renoncer.

Que couvre une licence ?

L’usage commercial interne par votre organisation, y compris en production. Pro et Labo diffèrent par le palier de licence (Labo porte le palier de distance à 63) et le niveau de support. Pro Perpétuel couvre toutes les versions 1.x de qector-decoder-v3; une nouvelle version majeure comme 2.0 est une nouvelle licence. Le Pilote sert à l’évaluation (benchmarks, tests d’intégration, études de seuil), pas à la production.

Une API hébergée ou offerte aux clients est-elle couverte ?

Non. Pro et Labo couvrent l’usage interne sur votre propre infrastructure. Dès que QECTOR se trouve derrière une API, un produit ou un service accessible hors de votre organisation, c’est du SaaS ou de la redistribution, ce qui exige un contrat Entreprise/OEM. Les points d’accès internes réservés à votre personnel sont couverts. En cas de doute, décrivez le déploiement à admin@qector.store.

Puis-je redistribuer QECTOR dans mon produit ?

Seulement avec un contrat Entreprise/OEM, qui couvre la redistribution, l’hébergement SaaS et le regroupement matériel. Écrivez à admin@qector.store.

Ai-je besoin d’une licence pour la recherche non commerciale ?

Non. L’usage personnel, académique et non commercial est gratuit sous la licence PolyForm Noncommercial 1.0.0. Les universités, organismes de recherche publics, organismes de bienfaisance et institutions gouvernementales peuvent aussi l’utiliser gratuitement, quelle que soit la source de leur financement. Une entreprise qui utilise QECTOR, y compris dans un contrat avec une université, doit avoir un forfait payant. Les établissements d’enseignement qui veulent tout de même un forfait payant obtiennent 40 % de rabais sur Labo avec un courriel institutionnel.

En quelle devise sont les prix, et la taxe est-elle incluse ?

Les prix sont en dollars américains, hors taxes. La taxe de vente, TPS/TVH ou TVA applicable est calculée et ajoutée au paiement selon votre adresse de facturation. Les entreprises peuvent saisir un numéro de TPS/TVA au paiement.

Pouvons-nous obtenir un contrat signé, un formulaire fiscal ou un questionnaire de sécurité ?

Oui. Pour un contrat PDF signé, un profil de fournisseur, un W-8BEN ou équivalent, ou un questionnaire de sécurité, écrivez à admin@qector.store avec votre numéro de facture Stripe. Les contrats Entreprise sont toujours signés.

Ce qui n’est pas inclus : sauf mention explicite, aucun palier n’inclut la redistribution, l’OEM, l’hébergement SaaS ni les droits de sous-licence. Contactez notre équipe commerciale pour des conditions sur mesure.

Approvisionnement : tous les prix sont en USD; les taxes applicables sont ajoutées au paiement. Les forfaits mensuels et annuels se renouvellent automatiquement jusqu’à annulation, avec un rappel avant chaque renouvellement annuel. Satisfait ou remboursé 14 jours sur votre premier paiement de tout forfait. Les jetons sont envoyés par courriel en quelques minutes.

En achetant, vous acceptez le Contrat de licence commerciale.

- - - diff --git a/fr/privacy/index.html b/fr/privacy/index.html deleted file mode 100644 index 98f26b83..00000000 --- a/fr/privacy/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Politique de confidentialité · QECTOR - - - - - - - - - - - - - -
Aller au contenu principal
Aucune télémétrie logicielle · Aucune publicité · Aucune vente de données · Mise à jour le 6 novembre 2026

Politique de confidentialité

QECTOR ne recueille que ce qui est nécessaire pour vendre des licences et vous répondre. Le logiciel de décodage ne nous transmet rien : les licences sont vérifiées hors ligne.

Dernière mise à jour : 6 novembre 2026.

English version

1. Responsable

QECTOR est exploité par Guillaume Lessard, entrepreneur individuel faisant affaire sous le nom iD01t Productions, 288, boul. des Ormeaux, Longueuil (Québec) Canada J4L 1J4.

Guillaume Lessard est le responsable de la protection des renseignements personnels. Pour le joindre : admin@qector.store, objet « Confidentialité ».

2. Le logiciel ne recueille rien

Le paquet qector-decoder-v3, le plugiciel Claude et le Workbench s’exécutent localement. Ils ne nous transmettent aucune télémétrie, donnée d’utilisation, syndrome, matrice ou circuit, et les jetons de licence sont vérifiés hors ligne, sans appel réseau.

La seule exception est la facturation à l’usage, offerte uniquement dans le cadre d’un contrat Entreprise signé et désactivée par QECTOR_OFFLINE=1.

3. Ce que nous recueillons et pourquoi

Nous n’utilisons pas vos renseignements à des fins publicitaires, nous ne les vendons ni ne les louons, et nous ne prenons aucune décision fondée exclusivement sur un traitement automatisé.

RenseignementsFins
Achat : nom, organisation, courriel, adresse de facturation, numéro de taxe (s’il est fourni), forfait et montantVendre la licence, émettre les factures et reçus fiscaux et respecter les lois fiscales. Les données de carte vont uniquement à Stripe; nous ne les voyons jamais.
Dossier de licence : courriel, numéro de reçu, forfait, jeton de licence, expiration, statut de remboursement ou de révocationLivrer et réémettre les jetons, traiter les renouvellements et remboursements, et publier les reçus révoqués.
Messages : ce que vous envoyez par courriel, par le formulaire de contact (qui ouvre votre propre logiciel de courriel) ou par une réservation CalendlyVous répondre et offrir du support.
Données techniques : adresse IP, type de navigateur et pages demandées, dans les journaux de nos hébergeurs; statistiques de pages agrégées et sans témoin (Cloudflare Web Analytics)Diffuser le site, le protéger contre les abus et savoir quelles pages sont consultées.

5. Fournisseurs et communication hors du Québec

Nous faisons appel aux fournisseurs ci-dessous. Chacun ne reçoit que ce dont son service a besoin et est lié par ses propres engagements de confidentialité et de sécurité. Certains conservent ou traitent des renseignements à l’extérieur du Québec et du Canada, surtout aux États-Unis. Avant de recourir à un fournisseur, nous évaluons si les renseignements bénéficieront d’une protection adéquate.

FournisseurUsage et lieu
StripePaiements, factures et taxes; États-Unis et Irlande.
CloudflareDiffusion et sécurité du site, et service de licences qui conserve les dossiers de licence; réseau mondial, États-Unis.
GoogleEnvoi des courriels de licence (Gmail); États-Unis.
GitHubHébergement du site (GitHub Pages) et du code source et des versions du logiciel; États-Unis.
CalendlyRéservation d’appels depuis les pages Contact et Fondateur; États-Unis.

6. Témoins (cookies) et technologies semblables

QECTOR ne dépose aucun témoin et n’utilise aucun traceur publicitaire. Nous utilisons Cloudflare Web Analytics, sans témoin : il compte les pages vues et les temps de chargement de façon agrégée, sans témoins, empreinte numérique ni pistage intersites. Certaines fonctions de tiers peuvent déposer leurs propres témoins : le script de Stripe sur les pages Accueil et Tarifs (prévention de la fraude), le module Calendly sur les pages Contact et Fondateur, et les témoins de sécurité de Cloudflare. Les polices sont servies par qector.store. Certaines pages demandent à PyPI le numéro de la dernière version; PyPI voit alors votre adresse IP.

7. Durée de conservation

Lorsque des renseignements ne sont plus nécessaires, nous les détruisons ou les anonymisons.

  • Dossiers d’achat et de licence : pendant la durée de la licence, puis 6 ans après la fin de l’année d’imposition à laquelle ils se rapportent, comme l’exigent les lois fiscales du Québec et du Canada.
  • Messages et réservations : 3 ans après le dernier échange, sauf s’ils font partie d’un dossier d’achat.
  • Journaux d’hébergement : conservés par nos fournisseurs selon leurs propres politiques, habituellement de quelques jours à quelques mois; nous n’en gardons pas de copie.

8. Sécurité et incidents

L’accès aux dossiers de licence et aux comptes est réservé au responsable et protégé par une authentification forte. Les jetons de licence sont signés avec une clé privée qui ne quitte jamais des systèmes contrôlés.

Nous tenons un registre des incidents de confidentialité. Si un incident présente un risque de préjudice sérieux, nous avisons la Commission d’accès à l’information du Québec et les personnes concernées avec diligence.

9. Vos droits

Vous pouvez demander l’accès aux renseignements personnels que nous détenons à votre sujet, leur rectification, leur communication dans un format technologique structuré et couramment utilisé, leur suppression ou leur désindexation lorsque la loi le permet, et retirer votre consentement. Écrivez à admin@qector.store. Nous répondons dans un délai de 30 jours, sans frais.

Si vous n’êtes pas satisfait, vous pouvez porter plainte auprès de la Commission d’accès à l’information du Québec, du Commissariat à la protection de la vie privée du Canada ou de l’autorité de protection des données de votre lieu de résidence.

10. Mineurs

Nos services s’adressent aux professionnels et aux chercheurs. Nous ne recueillons pas sciemment de renseignements auprès de personnes de moins de 14 ans.

11. Modifications

Toute modification sera publiée ici avec une nouvelle date. Si une modification touche l’usage de renseignements déjà fournis, nous en informerons les clients par courriel et demanderons leur consentement lorsque la loi l’exige.

- - - diff --git a/fr/refund/index.html b/fr/refund/index.html deleted file mode 100644 index 47d207d1..00000000 --- a/fr/refund/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Politique de remboursement · QECTOR - - - - - - - - - - - - - -
Aller au contenu principal
Prix en USD · Livraison numérique immédiate · Mise à jour le 6 novembre 2026

Politique de remboursement

Chaque forfait comporte une garantie de remboursement de 14 jours sur le premier paiement. Les abonnements se renouvellent automatiquement et peuvent être résiliés en tout temps. Voir les Tarifs.

English version

Garantie de remboursement de 14 jours

Si QECTOR ne vous convient pas, écrivez à admin@qector.store avec votre reçu Stripe dans les 14 jours suivant votre premier paiement de tout forfait (Pro mensuel ou annuel, Pro Perpétuel, Labo ou Pilote). Nous le remboursons en entier, sans poser de questions, et révoquons le jeton de licence.

  • Une garantie par organisation; elle s’applique au premier achat, pas aux renouvellements.
  • Le remboursement est versé au moyen de paiement d’origine par Stripe, habituellement en 5 à 10 jours ouvrables.
  • Une fois remboursée, la licence prend fin et le jeton ne doit plus être utilisé.

Renouvellements et résiliation

Pro (mensuel ou annuel) et Labo sont des abonnements qui se renouvellent automatiquement jusqu’à leur résiliation. Nous envoyons un rappel 14 jours avant chaque renouvellement annuel. Résiliez en tout temps dans le portail client (connexion avec votre courriel de facturation) ou en écrivant à admin@qector.store; votre licence reste valide jusqu’à la fin de la période payée.

Les paiements de renouvellement ne sont pas remboursés au prorata. Si un renouvellement que vous vouliez annuler a été prélevé et que vous n’avez pas utilisé la nouvelle période, écrivez-nous dans les 7 jours et nous le rembourserons. Pro Perpétuel et le Pilote sont des paiements uniques qui ne se renouvellent jamais.

Problèmes de livraison : nous les corrigeons

Si votre jeton n’arrive pas, arrive corrompu, est associé au mauvais courriel ou échoue à la vérification hors ligne, c’est une erreur de livraison de notre part. N’ouvrez pas de contestation : écrivez à admin@qector.store avec votre reçu Stripe et nous le réémettrons ou le corrigerons sans frais, sans limite de temps.

Les jetons sont envoyés quelques minutes après le paiement, habituellement en moins de 10 minutes. Sinon, vérifiez d’abord vos courriels indésirables.

Paiements en double ou erronés

Les achats en double du même forfait pour la même organisation et les paiements manifestement erronés sont toujours remboursés en entier. Écrivez à admin@qector.store avec les deux reçus dans les 30 jours suivant le paiement.

Droits prévus par la loi

Rien dans cette politique ne limite les droits auxquels on ne peut renoncer en vertu de la loi de protection du consommateur qui vous est applicable, y compris la Loi sur la protection du consommateur du Québec lorsqu’elle s’applique.

Devise et taxes

Tous les prix sont affichés et facturés en dollars américains (USD), taxes en sus. Toute taxe de vente, TPS/TVQ ou TVA est calculée au paiement selon votre adresse de facturation et remboursée avec le prix. Les entreprises peuvent saisir un numéro de taxe au paiement.

Vendeur et contact

Le logiciel et les licences QECTOR sont vendus par Guillaume Lessard, entrepreneur individuel faisant affaire sous le nom iD01t Productions, 288, boul. des Ormeaux, Longueuil (Québec) Canada J4L 1J4. Contact : admin@qector.store.

Délai de réponse habituel : 1 jour ouvrable. Voir aussi le Contrat de licence commerciale et les Conditions.

- - - diff --git a/fr/terms/index.html b/fr/terms/index.html deleted file mode 100644 index 45f3cf8b..00000000 --- a/fr/terms/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Conditions d’utilisation · QECTOR - - - - - - - - - - - - - -
Aller au contenu principal
Droit applicable : Québec, Canada · Mise à jour le 6 novembre 2026

Conditions d’utilisation

Ces conditions visent le site web et l’usage gratuit du logiciel QECTOR. Les forfaits payants sont aussi régis par le Contrat de licence commerciale.

Dernière mise à jour : 6 novembre 2026.

English version

1. Votre vendeur

Le logiciel et les licences QECTOR sont vendus par Guillaume Lessard, entrepreneur individuel faisant affaire sous le nom iD01t Productions, 288, boul. des Ormeaux, Longueuil (Québec) Canada J4L 1J4. Contact : admin@qector.store.

Les prix sont en dollars américains, taxes en sus; Stripe ajoute toute taxe de vente, TPS/TVQ ou TVA au paiement et traite chaque transaction. Les abonnements se renouvellent automatiquement jusqu’à leur résiliation, et chaque forfait comporte une garantie de remboursement de 14 jours sur le premier paiement.

2. Acceptation

En utilisant ce site ou le logiciel QECTOR, vous acceptez ces conditions. Sinon, ne les utilisez pas.

3. Licences du logiciel

  • L’usage non commercial (personnel, universitaire, éducatif, recherche publique, organismes de bienfaisance et institutions gouvernementales, quel que soit leur financement) est gratuit sous la licence PolyForm Noncommercial 1.0.0.
  • L’usage commercial exige un forfait payant et est régi par le Contrat de licence commerciale, qui prévaut sur les présentes conditions pour les forfaits payants.
  • Les composants libres de tiers restent régis par leurs propres licences.

4. Usage acceptable

Vous vous engagez à ne pas :

  • contourner les vérifications de licence ni utiliser un jeton de licence qui n’a pas été émis à votre organisation;
  • attaquer, surcharger ou sonder ce site ou son service de licences, sauf par divulgation coordonnée selon notre politique de sécurité;
  • utiliser le logiciel QECTOR ou ce site en violation des lois sur le contrôle des exportations ou les sanctions;
  • présenter des résultats obtenus avec QECTOR comme approuvés ou certifiés par nous sans autorisation écrite.

5. Contenu du site

Les textes, les images ainsi que le nom et le logo QECTOR appartiennent à Guillaume Lessard. Vous pouvez citer ce site et y faire des liens en indiquant la source. Les artefacts de validation et la documentation peuvent être republiés avec attribution. Les articles et jeux de données publiés suivent la licence indiquée sur leur notice DOI.

6. Absence de garantie

Le site et le logiciel gratuit sont fournis « tels quels », sans garantie expresse ou implicite, notamment de qualité marchande, d’adaptation à un usage particulier et d’absence de contrefaçon, dans la mesure permise par la loi. QECTOR est un logiciel de simulation et de recherche validé en vérifiant que chaque correction reproduit son syndrome; ce n’est pas une pile de tolérance aux fautes certifiée.

7. Limitation de responsabilité

Dans la mesure permise par la loi, nous ne sommes pas responsables des dommages indirects, consécutifs ou punitifs, ni des pertes de profits ou de données, découlant du site ou de l’usage gratuit du logiciel. Pour les forfaits payants, la clause de responsabilité du Contrat de licence commerciale s’applique. Rien ici ne limite la responsabilité pour un préjudice corporel ou moral, ni pour une faute intentionnelle ou lourde.

8. Résiliation

Nous pouvons suspendre ou mettre fin à une licence en cas de manquement important, après un avis écrit et un délai de 15 jours pour y remédier. À la résiliation, l’usage commercial doit cesser et les jetons de licence doivent être supprimés.

9. Droit applicable et langue

Les présentes conditions sont régies par les lois du Québec et les lois fédérales du Canada qui s’y appliquent; les tribunaux du district judiciaire de Montréal sont compétents. Les consommateurs conservent la protection des lois impératives de leur lieu de résidence.

La présente version française est la version de référence; une version anglaise est aussi offerte.

10. Modifications

Nous pouvons mettre à jour ces conditions; la date ci-dessus indique la version en vigueur. Les modifications qui touchent les licences payantes suivent les règles de préavis du Contrat de licence commerciale et ne modifient jamais une période déjà payée.

- - - diff --git a/getting-started/index.html b/getting-started/index.html deleted file mode 100644 index 2fe2c187..00000000 --- a/getting-started/index.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Getting Started · QECTOR Decoder v3 - - - - - - - - - - -
Skip to main content
About 15 minutes · Tested on 1.0.1

Getting Started

From pip install to decoding a surface-code circuit and a qLDPC code. Each step is a complete script you can copy and run.

Step 1

Install and check

Install from PyPI. Wheels exist for CPython 3.9 to 3.14 on Linux x86_64, Windows x64 and macOS on Apple silicon, so there is nothing to compile. The tier stays "Community" until you activate a licence, and every decoder works on the CPU in that tier.

terminalbash
python -m pip install --upgrade "qector-decoder-v3>=1.0.1,<2" stim sinter
step1_check.pypython
import qector_decoder_v3 as q
-print(q.__version__)
-print(q.get_license_info()["tier"])   # "Community" until you activate a licence

Step 2

Your first decode, checked

Build a distance-5 repetition code, inject one error, and decode its syndrome with Union-Find and exact matching. The assert is the contract every QECTOR decoder keeps: the correction reproduces the syndrome, H·c = s (mod 2).

step2_first_decode.pypython
import numpy as np
-from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder, generate_parity_check_matrix
-
-# Distance-5 repetition code: 5 data qubits, 4 parity checks.
-check_to_qubits = [[0, 1], [1, 2], [2, 3], [3, 4]]
-H = generate_parity_check_matrix(check_to_qubits, 5)
-
-error = np.array([0, 0, 1, 0, 0], dtype=np.uint8)
-syndrome = (H @ error) % 2                      # which checks fire
-
-for decoder in (UnionFindDecoder(check_to_qubits, 5), BlossomDecoder(check_to_qubits, 5)):
-    correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8)
-    assert np.array_equal((H @ correction) % 2, syndrome)   # H·c = s (mod 2)
-    print(type(decoder).__name__, correction)

Step 3

Decode a Stim circuit

Generate a rotated surface-code memory experiment with Stim, turn its detector error model into a weighted matching graph, and count logical errors over sampled shots. The decoder uses the error model’s weights, so rare and common faults are treated differently.

step3_stim.pypython
import stim
-from qector_decoder_v3 import dem
-
-circuit = stim.Circuit.generated(
-    "surface_code:rotated_memory_z", distance=5, rounds=5,
-    after_clifford_depolarization=0.005,
-)
-graph = dem.from_stim(circuit.detector_error_model(decompose_errors=True)).collapse_to_graph()
-decoder = graph.make_decoder("blossom")          # uses the DEM's edge weights
-
-shots = 2_000
-dets, obs = circuit.compile_detector_sampler(seed=7).sample(shots, separate_observables=True)
-fails = 0
-for d, o in zip(dets, obs):
-    correction = decoder.decode(d.astype("uint8"))
-    predicted = graph.predicted_observables(correction)
-    fails += int(predicted[0] != o[0])
-print(f"logical errors: {fails} / {shots}")

Step 4

qLDPC with BP-OSD

Matching needs graph-like errors; qLDPC codes do not have them. Build the [[144,12,12]] bivariate bicycle code and decode a random error with belief propagation plus ordered statistics, again checking the syndrome.

step4_qldpc.pypython
import numpy as np
-from qector_decoder_v3 import codes
-from qector_decoder_v3.bposd import BpOsdDecoder
-
-# [[144,12,12]] bivariate bicycle code: A = x^3 + y + y^2, B = y^3 + x + x^2
-cx, cz = codes.bivariate_bicycle_code(
-    12, 6, [("x", 3), ("y", 1), ("y", 2)], [("y", 3), ("x", 1), ("x", 2)]
-)
-H = cx.parity_check_matrix()
-decoder = BpOsdDecoder(H, error_rate=0.01, osd_order=0)
-
-rng = np.random.default_rng(1)
-error = (rng.random(H.shape[1]) < 0.01).astype(np.uint8)
-syndrome = (H @ error) % 2
-correction = np.asarray(decoder.decode(syndrome), dtype=np.uint8)
-assert np.array_equal((H @ correction) % 2, syndrome)
-print(H.shape, "syndrome reproduced")

Step 5

Scale up with Sinter

Sinter runs many circuits across worker processes and collects statistics. QECTOR registers its decoders as Sinter custom decoders. Keep the main guard: Sinter starts worker processes.

step5_sinter.pypython
import sinter
-import stim
-from qector_decoder_v3.sinter_compat import qector_sinter_decoders
-
-
-def main():
-    tasks = [
-        sinter.Task(
-            circuit=stim.Circuit.generated(
-                "surface_code:rotated_memory_z", distance=d, rounds=d,
-                after_clifford_depolarization=p,
-            ),
-            json_metadata={"d": d, "p": p},
-        )
-        for d in (3, 5)
-        for p in (0.002, 0.004)
-    ]
-
-    stats = sinter.collect(
-        num_workers=2, tasks=tasks,
-        decoders=["qector_blossom"],
-        custom_decoders=qector_sinter_decoders(),
-        max_shots=2_000, max_errors=50,
-    )
-    for s in sorted(stats, key=lambda s: (s.json_metadata["d"], s.json_metadata["p"])):
-        print(s.json_metadata, s.errors, "/", s.shots)
-
-
-if __name__ == "__main__":   # Sinter uses worker processes
-    main()

Where to go next

  • Every class and function, with signatures: the API index.
  • Choosing a decoder and the full feature set: Decoder and the user manual.
  • Using QECTOR from Claude: the Claude plugin.
  • GPU batch decoding and commercial use: plans, from $79/month.

Verified: each script above was run against the published qector-decoder-v3 1.0.1 wheel on Linux (CPython 3.13) on 6 November 2026. Logical-error counts depend on the random seed and noise settings; measure on your own workloads.

- - - diff --git a/guillaume-lessard/index.html b/guillaume-lessard/index.html deleted file mode 100644 index d8c38dc3..00000000 --- a/guillaume-lessard/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Guillaume Lessard · Founder and Lead Engineer, QECTOR - - - - - - - - - - -
Skip to main content
Guillaume Lessard

Founder and Lead Engineer, QECTOR

Guillaume Lessard

I build quantum error correction decoders in Rust and Python, and the release and licensing infrastructure that lets teams trust them: corrections checked against their syndromes, wheels with verifiable provenance, and licences that work air-gapped. Based in Longueuil, Québec.

What I work on

Decoders that prove their output

A Rust core behind a Python API: Union-Find, exact MWPM, BP-OSD and Relay-BP for qLDPC codes, on CPU and GPU. Every correction is checked against its syndrome, H·c = s (mod 2).

Releases you can verify

Wheels built in public CI, tested on each operating system before publishing, with Sigstore provenance, PyPI attestations and Trusted Publishing.

Tools that stay offline

Air-gapped licensing with Ed25519 tokens, a schema-validated MCP server for Claude, and a self-contained desktop Workbench.

Track record

Public releases, newest first. Each links to its release page.

  1. QECTOR Decoder v3 1.0.1

    18 wheels for CPython 3.9 to 3.14, tested per OS, Sigstore provenance on every file

  2. QECTOR Claude Plugin 2.0.1

    Air-gapped, schema-validated MCP server for Claude Code and Claude Desktop

  3. QECTOR Workbench v1.0.7

    Free desktop GUI for Windows and Linux, 19 decoder kinds, 10 code families

  4. QECTOR Decoder v3 1.0.0

    First stable release: API stability tiers, qector CLI, reference manual

  5. First public release (0.5.0)

    Published on PyPI; 19 releases to date

Expertise

Quantum error correction
MWPM and Blossom, Union-Find, BP-OSD and Relay-BP for qLDPC, detector error models, Stim and Sinter
Systems
Rust, PyO3, CUDA and OpenCL batch kernels, memory layout and throughput
Python and release engineering
Binary wheels for Linux, Windows and macOS, PyPI Trusted Publishing, Sigstore, supply-chain gates
Tooling and product
MCP servers, desktop apps, React and TypeScript, Stripe and licensing infrastructure

iD01t Productions

I founded iD01t Productions in 2012 as an independent studio. It publishes technical books, desktop software and games, and electronic music. QECTOR is its quantum error correction line, built and supported by me directly, so you always deal with the person who wrote the code.

Verify my identity

Several people share my name. For invoices, citations or due diligence, these are the identifiers I control:

Book a 30-minute call

Decoder evaluation, integration, licensing or research collaboration: you will speak with me directly. Prefer e-mail? admin@qector.store.

- - - diff --git a/health.json b/health.json deleted file mode 100644 index 2a3cfc43..00000000 --- a/health.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "status": "ok", - "service": "QECTOR Store", - "canonical": "https://qector.store", - "package": "qector-decoder-v3", - "version": "1.0.1", - "note": "Static release metadata; live fulfillment status is available at /stripe/health." -} diff --git a/humans.txt b/humans.txt deleted file mode 100644 index f97d9f6b..00000000 --- a/humans.txt +++ /dev/null @@ -1,7 +0,0 @@ -/* Humans behind QECTOR */ -Author: Guillaume Lessard -Handle: El'Nox Rah (research), DJ iD01T (music) -Organization: iD01t Productions -Location: Longueuil, Quebec, Canada -Contact: admin@qector.store -ORCID: 0009-0000-3465-3753 diff --git a/images/favicon-48.png b/images/favicon-48.png deleted file mode 100644 index 3e2c6965..00000000 Binary files a/images/favicon-48.png and /dev/null differ diff --git a/images/hero-bg-1200.avif b/images/hero-bg-1200.avif deleted file mode 100644 index 53b04c04..00000000 Binary files a/images/hero-bg-1200.avif and /dev/null differ diff --git a/images/hero-bg-640.avif b/images/hero-bg-640.avif deleted file mode 100644 index 65ae34ae..00000000 Binary files a/images/hero-bg-640.avif and /dev/null differ diff --git a/images/hero-bg-640.webp b/images/hero-bg-640.webp deleted file mode 100644 index cf8e1cb6..00000000 Binary files a/images/hero-bg-640.webp and /dev/null differ diff --git a/images/hero-bg.png b/images/hero-bg.png deleted file mode 100644 index e7a70a0b..00000000 Binary files a/images/hero-bg.png and /dev/null differ diff --git a/images/hero-bg.webp b/images/hero-bg.webp deleted file mode 100644 index faaec662..00000000 Binary files a/images/hero-bg.webp and /dev/null differ diff --git a/images/icon-192.png b/images/icon-192.png deleted file mode 100644 index 0b06af4e..00000000 Binary files a/images/icon-192.png and /dev/null differ diff --git a/images/icon-512.png b/images/icon-512.png deleted file mode 100644 index 517207ec..00000000 Binary files a/images/icon-512.png and /dev/null differ diff --git a/images/logo-160.webp b/images/logo-160.webp deleted file mode 100644 index a643fc50..00000000 Binary files a/images/logo-160.webp and /dev/null differ diff --git a/images/logo-80.webp b/images/logo-80.webp deleted file mode 100644 index 86432f80..00000000 Binary files a/images/logo-80.webp and /dev/null differ diff --git a/images/logo.png b/images/logo.png deleted file mode 100644 index 632ec386..00000000 Binary files a/images/logo.png and /dev/null differ diff --git a/images/og-banner.png b/images/og-banner.png deleted file mode 100644 index f30429da..00000000 Binary files a/images/og-banner.png and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index 51d3a724..00000000 --- a/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QECTOR · Quantum Error Correction Decoding for Python - - - - - - - - - - - - - -
Skip to main content
v1.0.1 · 18 verified wheels · Changelog →

QEC Decoding for Python

One library for many decoder families on the same check matrix: Union-Find, exact MWPM, BP-OSD and Relay-BP for qLDPC codes, on CPU and GPU, with Stim and Sinter integration. Every correction is checked against its syndrome, and commercial licences verify offline, so it runs air-gapped.

Built for hardware teams, qLDPC researchers and academic labs. Free for academic and non-commercial research; commercial plans from $79/month with a 14-day money-back guarantee.

Quick startbash
pip install qector-decoder-v3==1.0.1
-python -c "from qector_decoder_v3 import BlossomDecoder; print('QECTOR OK')"
17
Decoder configurations
H·c = s
Checked on every result
CPU + GPU
Batch decoding
Offline
Air-gapped licensing
Evidence policy
No hardware-specific results published

QECTOR publishes contracts, methodology, and artifacts rather than portable speed numbers. Read the evidence policy before generating a local measurement.

Release Assurance

A Clear Path From Code to Evidence

The public release, validation contract, and commercial delivery path are explicit by design.

Current Runtime

qector-decoder-v3 1.0.1

The live PyPI release supports Python 3.9 through 3.14 with 18 binary wheels across Windows, Linux, and macOS, each with build provenance.

Evidence Contract

Correctness before speed

Every correction is checked against H c = s (mod 2). Measurements stay workload-scoped, artifact-hashed, and separate from universal performance claims.

Secure Delivery

Signed, traceable licensing

Commercial fulfillment requires a live Stripe event, issues a v2 Ed25519 token, and records independent billing and license delivery states.

Read the license activation procedure →

Works with your existing stack

Stimpip install stim
Sinterpip install sinter
Qiskitpip install qiskit-qec
Proof Suite

Executable Verification for the 1.0 Line

Hashed-lock reproducible install, CERT_STRICT gate, and Lean/Coq kernel evidence - verifiable against Reference Manual v1.0.0.

Reproducible Install

Hashed-lock & CERT_STRICT

Proof runs are hashed-locked and gated by CERT_STRICT - no universal benchmark figures, only workload-scoped artifacts.

Reference Manual v1.0.0

DOI 10.5281/zenodo.21941046

Normative manual with syndrome-faithfulness foundations, every decoder backend, and API stability tiers. All proofs trace to this document.

Lean/Coq Evidence

Kernel-checked proofs

Executable suite checks GF(2) invariants and logical cosets with Lean/Coq kernels - evidence, not claims.

View qector-proof on GitHubgithub.com/GuillaumeLessard/qector-proof
How It Works

From Installation to Validation

QECTOR integrates directly into your existing QEC workflow with minimal friction.

01
01

Install

Install the 1.0.1 wheel in a supported Python 3.9-3.14 environment alongside your existing Stim or PyMatching workflow.

pip install --upgrade "qector-decoder-v3>=1.0.1,<2"
02
02

Decode

Access 17 concrete Rust-accelerated decoder configurations through a unified Python API. Workbench also exposes AutoDecoder and Auto Router as two orchestration kinds, for 19 named kinds in total.

from qector_decoder_v3 import BlossomDecoder, BpOsdDecoder
03
03

Validate

Claims are scoped to a declared workload and backed by SHA-256 sealed artifacts. Run qector-doctor before relying on optional paths and preserve the report with the result.

evidence policy · SHA-256 sealed
Why QECTOR

More Than Just MWPM

QEC decoding is not one-size-fits-all. Surface codes, qLDPC codes, optional batch paths, and simulation workloads each demand different decoders. QECTOR documents the supported contracts and the evidence needed to evaluate a selected workload.

Blossom

Blossom MWPM (Exact)

Weight-optimal exact minimum-weight perfect matching for graph-like codes. The reference decoder for surface codes.

✓Exact optimal matching · Stim-native
BP-OSD (qLDPC)

qLDPC Support

Matching decoders are restricted to graphlike structures. BP-OSD handles reachable arbitrary GF(2) check matrices, including LDPC and qLDPC workloads.

✓Hyperedge-safe GF(2) path
Union-Find + Optional GPU

Workload-Scoped Execution

Union-Find and optional GPU batch paths are available for supported workloads. Availability and performance must be verified on the target environment.

✓Environment-dependent paths
Stim · PyMatching · Sinter · Qiskit

One Library, Pluggable

Drop QECTOR into any existing Stim or PyMatching workflow. Same API surface, swappable backend. No vendor lock-in.

✓Drop-in, same API surface
19 Workbench Kinds · 17 Concrete Configs

Decoding Algorithms

Union-Find, Fast Union-Find, Blossom MWPM, Sparse Blossom, Belief-Matching, BP-OSD, GPU Batch (CUDA/OpenCL), Hybrid, Predecoded, two-stage, ambiguity-cluster, colour-code, space-time, and other concrete paths are exposed through a consistent Python API. Workbench adds the two orchestration kinds, AutoDecoder and Auto Router, to make 19 named kinds.

v1.0.1 Stable
Corrected code families and Union-Find peeling, Python 3.14, GPU on Pro licences, signed provenance for every wheel.
18 Binary Wheels
Python 3.9-3.14 across Windows amd64, Linux x86_64, and macOS arm64, each tested on its own OS before release.
GPU Batch Paths
CUDA and OpenCL batch paths are available for supported hardware and drivers; OpenCL via source build.
Reproducible Harness
qector bench ships with the package; measure on your own hardware, no universal figures claimed.

Interactive QEC Simulator

Planar stabilizer code (d=3). Click edges to toggle physical errors.

LEFT BOUNDARYRIGHT BOUNDARYSSSSSSSSS
Performance

Measure on Your Own Hardware

Reproducible Benchmark Harness

No universal benchmark figures are published on this site, because results depend on your hardware, drivers, and workloads. The qector bench harness ships with the package so you can measure logical error rates and throughput on your own machines.

GitHub Artifacts →
$ pip install "qector-decoder-v3[bench]"
$ qector-doctor
$ qector bench -d 5 -r 5 -s 10000 --decoder blossom --noise 0.001
✓ Logical error rates and throughput written as reproducible JSON

Enterprise Compliance & Licensing

License Clarity

The package is source-available under PolyForm Noncommercial 1.0.0 for community use. Commercial use, hosted services, and redistribution require the written scope described on the license and pricing pages.

Learn about licensing →

Commercial Licences, Air-Gapped

Pro from $79/month or $790/year with GPU batch decoding, Lab for distance 63 and an SLA. Licences are verified offline, with no licence server, and every plan has a 14-day money-back guarantee.

View Pricing & Tiers →
Self-Serve · Instant Clearance

QECTOR Pro

Air-gapped licence · Cancel any time · 14-day money-back guarantee

$79/mo

or $790/year (2 months free) · Production use

✓Full QECTOR Decoder v3 (all decoder families)
✓GPU (CUDA/OpenCL) batch decoding unlocked
✓Signed licence token, verified offline: works air-gapped
✓Email support (2 business day response)
✓14-day money-back guarantee on your first payment

Need Lab, perpetual or OEM? View all tiers →

- - - diff --git a/installer/index.html b/installer/index.html deleted file mode 100644 index 1e5cf5a9..00000000 --- a/installer/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Installation · QECTOR - - - - - - - - - - -
Skip to main content
PyPI Binary Wheels · AIO Installer · CUDA + OpenCL Optional

Installation

QECTOR Decoder v3 ships as a Rust-compiled Python wheel (v1.0.1: 18 binary wheels for CPython 3.9-3.14, no sdist). One command on Linux x86_64, macOS ARM64, and Windows amd64. GPU backends optional.

pip install qector-decoder-v3

System Requirements

  • Python 3.9, 3.10, 3.11, 3.12, or 3.13
  • 64-bit operating system (Linux x86_64, macOS arm64, Windows amd64)
  • Stim/Sinter/PyMatching are optional extras; install qector-decoder-v3[stim] when needed.
  • GPU paths are optional and environment-dependent; follow the package release documentation for supported drivers and extras.

Quick Install (Recommended)

pip install qector-decoder-v3==1.0.1

This installs the latest stable release with pre-compiled binary wheels.

Optional extras: [stim] (Stim/Sinter/PyMatching), [bench] (local measurement tools), [all] (full environment).

Verify Installation

python -c "import qector_decoder_v3; print(qector_decoder_v3.__version__)"
# Should print: 1.0.1
qector-doctor
# 15-check environment diagnostic; reports PASS / WARN / FAIL per check
python -c "from qector_decoder_v3 import BlossomDecoder, UnionFindDecoder; print('QECTOR OK')"
# Should print: QECTOR OK

Platform-Specific Notes

Linux

Use the current PyPI wheel and the release documentation for supported Linux platforms and runtime dependencies.

macOS

Use the current PyPI wheel and the release documentation for supported macOS architectures and minimum version.

Windows

Use the current PyPI wheel for supported Windows Python and architecture combinations. GPU availability remains driver- and device-dependent.

Optional GPU Workflows

GPU availability depends on the installed wheel, optional dependencies, operating system, driver, and device. Use the extras and support matrix documented by the package release rather than assuming a GPU backend is available.

# Optional full environment
pip install "qector-decoder-v3[all]"
# Verify the installed package API and environment
qector-doctor
# Read the diagnostic's backend-specific PASS / WARN / FAIL output

Troubleshooting

ImportError on macOS: Ensure you have Python 3.9-3.14 from python.org or Homebrew. The system Python may not work.

GPU not detected: Verify CUDA installation with nvidia-smi. Check the package release documentation for supported CUDA versions.

Slow import: First import initializes the runtime and validates optional paths. Subsequent imports are fast.

- - - diff --git a/license-agreement/index.html b/license-agreement/index.html deleted file mode 100644 index ed576469..00000000 --- a/license-agreement/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Commercial Licence Agreement · QECTOR Decoder v3 - - - - - - - - - - - - - -
Skip to main content
Version 2026-11 · Effective 6 November 2026 · Governing law: Québec

Commercial Licence Agreement

These terms apply when your organisation buys any QECTOR plan. Non-commercial use stays free under the PolyForm Noncommercial License 1.0.0.

Version 2026-11, effective 6 November 2026. The version in force on the date of your purchase or renewal governs that paid term.

Version française

1. Parties and acceptance

This agreement is between Guillaume Lessard, sole proprietor trading as iD01t Productions, 288 boul. des Ormeaux, Longueuil, Québec, Canada J4L 1J4 ("Licensor", "we"), and the organisation named at checkout ("Licensee", "you").

You accept it by completing a purchase, by activating a licence token, or by using the Software commercially. The person who buys confirms they may bind the organisation. If you do not accept these terms, do not buy or use a paid plan. The 14-day money-back guarantee applies.

2. Definitions

  • Software: the qector-decoder-v3 Python package and its compiled core, as published on PyPI and GitHub, with its documentation.
  • Plan: the offer you bought (Pro, Pro Perpetual, Lab, Pilot or Enterprise), as described on the Pricing page on the date of purchase.
  • Licence token: the Ed25519-signed key we e-mail you, which the Software verifies offline.
  • Internal use: use by your organisation, its employees and contractors working on its behalf, for its own purposes, including production.
  • Term: the period you paid for (a month or a year for subscriptions, 60 days for the Pilot), or no end date for Pro Perpetual.

3. Licence grant

Subject to payment and to this agreement, we grant you a non-exclusive, non-transferable, worldwide licence to install and use the Software for Internal use during the Term, at the licence tier of your Plan.

There are no seat or user counts. You may install the Software on any number of machines and let any number of your personnel use it, provided they use it for your organisation. A licence covers one buying organisation; affiliates need their own licence unless an Enterprise agreement says otherwise.

4. What each plan includes

PlanScope
ProPro licence tier (GPU batch decoding, code distance 19), Internal use including production, e-mail support, every release published during the Term.
Pro PerpetualPro rights with no end date for every 1.x release of qector-decoder-v3, including patch and minor updates, plus 12 months of e-mail support. A new major version (2.0 and later) is a new licence.
LabEnterprise licence tier (GPU batch decoding, code distance 63), priority support with response targets agreed at onboarding, one onboarding call and one Validation Report per year.
PilotA 60-day evaluation licence at the Pro tier with an integration call, for benchmarking, integration testing and studies, not production. Creditable toward Lab within 90 days.
EnterpriseHosted, SaaS or OEM rights and named support only as set out in a separate signed agreement, which prevails over this one.

5. Restrictions

Unless a signed Enterprise agreement allows it, you may not:

  • redistribute, sell, sublicense, rent or lend the Software or a licence token;
  • embed the Software in a product you distribute to others (OEM), or offer its decoding to third parties as a hosted service, API or SaaS;
  • share a licence token outside your organisation or publish it;
  • remove, bypass or tamper with licence checks, notices or tier limits;
  • reverse engineer the compiled core, except to the extent applicable law allows it despite this restriction.

6. Licence tokens and offline verification

Licence tokens are verified offline by the Software against a public key it ships with. There is no licence server, no activation call and no telemetry: the Software works on air-gapped machines.

Keep your token confidential. If it is lost, exposed or tied to the wrong address, e-mail us and we will reissue it at no cost. A token may expire a few days after your paid period ends, to absorb late renewals; that grace period gives no rights beyond your Term.

If a payment is fully refunded or disputed, we revoke the token and list it at qector.store/stripe/revoked.txt; you must then stop using it.

7. Term, renewal and cancellation

Pro (monthly or annual) and Lab are subscriptions that renew automatically for the same period at the current price until cancelled. We e-mail a reminder 14 days before each annual renewal. You may cancel at any time in the customer portal or by e-mail; your licence stays valid until the end of the period you paid for.

The Pilot ends after 60 days and does not renew. Pro Perpetual has no end date for the 1.x releases it covers.

8. Fees, taxes and refunds

Prices are in US dollars, exclusive of tax. Stripe collects payment and any sales tax, GST/QST or VAT that applies to your billing address. Every plan has a 14-day money-back guarantee on the first payment, as set out in the Refund Policy. Renewal payments follow the same policy.

Academic institutions that buy a paid plan receive 40% off Lab. Non-commercial academic use remains free under the PolyForm Noncommercial License.

9. Support and updates

Support is by e-mail at admin@qector.store, with a first response within 2 business days on Pro and Pro Perpetual. Lab gets priority support with response targets agreed at onboarding. Subscriptions include every release published during the Term; Pro Perpetual includes every 1.x release.

We may change or remove features in new releases. Releases you already received keep working under your licence.

10. Ownership and third-party components

The Software is licensed, not sold. We keep all rights not expressly granted, including copyright and trademarks. Open-source components bundled with the Software remain under their own licences, which this agreement does not limit.

Your inputs and outputs (codes, syndromes, circuits, results) are yours. The Software sends none of them to us.

11. Warranty

Your remedy if the Software does not suit you is the 14-day money-back guarantee. Apart from that, the Software is provided "as is", without any other warranty, express or implied, including merchantability, fitness for a particular purpose and non-infringement, to the extent the law allows.

The Software is a simulation and research decoding library, validated by checking that every correction reproduces its syndrome. It is not certified for safety-critical use. Nothing in this agreement excludes a warranty that applicable law, including the Québec Consumer Protection Act where it applies, does not allow to be excluded.

12. Limitation of liability

To the extent the law allows, our total liability under this agreement is limited to the fees you paid in the 12 months before the event giving rise to the claim, and we are not liable for indirect, consequential or punitive damages, or for lost profits, data or business.

These limits do not apply to bodily or moral injury, or to damage caused by intentional or gross fault, which Québec law does not allow to be excluded.

13. Export control and sanctions

You will comply with the export control and sanctions laws of Canada and of any other country that applies to you, and will not use or transfer the Software to a person or destination those laws prohibit.

14. Termination

We may terminate your licence for a material breach of this agreement, such as use outside its scope, after written notice and a 15-day period to cure it. On termination you must stop commercial use and delete your licence tokens. No refund is due for the elapsed Term after a termination for breach.

15. Personal information

We collect only what is needed to sell and deliver your licence. See the Privacy Policy for what we collect, why, where it is stored and your rights under Québec law.

16. Changes to this agreement

We may publish new versions of this agreement. A new version applies to new purchases and, after at least 30 days’ notice by e-mail, to renewals. It never changes the terms of a period you have already paid for. Earlier versions remain available on request.

17. Governing law, language and entire agreement

This agreement is governed by the laws of Québec and the federal laws of Canada that apply there. The courts of the judicial district of Montréal have jurisdiction, without depriving a consumer of the protection of the mandatory laws or courts of their place of residence.

A French version of this agreement is available at qector.store/fr/license-agreement and was provided before its English version. The parties have expressly wished this agreement and related documents to be drawn up in English. Les parties ont expressément souhaité que la présente convention et les documents qui s’y rattachent soient rédigés en anglais, après avoir pris connaissance de la version française.

This agreement, the Plan description on the date of purchase and the Refund Policy are the entire agreement for paid plans. A signed Enterprise agreement prevails over them where they conflict. If a clause is unenforceable, the rest remains in force.

- - - diff --git a/license.html b/license.html deleted file mode 100644 index 8b649462..00000000 --- a/license.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -License · QECTOR - - - - - - -

The QECTOR licence page has moved to qector.store/license/.

- - diff --git a/license/index.html b/license/index.html deleted file mode 100644 index b33a94aa..00000000 --- a/license/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - License · QECTOR - - - - - - - - - - - - - -
Skip to main content
PolyForm Noncommercial 1.0.0 · Free for Research · Commercial by Written Agreement · Last updated November 2026

License

QECTOR Decoder v3 is Source-Available (not free for commercial use). Free for personal, academic, and non-commercial research. Commercial use requires a paid plan from $79/month, with a 14-day money-back guarantee. The Workbench GUI is free.

Community License

QECTOR Decoder v3 is released under the PolyForm Noncommercial License 1.0.0. This means you can use, modify, and distribute the software for non-commercial purposes free of charge.

Permitted (Non-Commercial)

  • • Personal research and learning
  • • Academic research and teaching
  • • Use by universities, public research organisations, charities and government institutions, whatever their source of funding
  • • Non-commercial open-source projects
  • • Publishing benchmark results (with attribution)

Requires Commercial License

  • • Commercial product integration
  • • Internal commercial R&D with value extraction
  • • Company work on government, defence or university contracts
  • • Redistribution in commercial products
  • • SaaS / hosted API usage

Commercial License

Commercial licenses grant internal use rights, written agreements, priority support, and validation packages. See Pricing for tier details.

Every paid plan is governed by the Commercial Licence Agreement (version française). All commercial licenses include: commercial use rights (internal, no seat counts), reproducible artifact bundles, and priority bug review. No redistribution or OEM rights included by default; contact admin@qector.store for OEM/SaaS licensing.

Perpetual licenses

Pro Perpetual ($1,990 one-time): the same rights as Pro, for every 1.x release of qector-decoder-v3, including all patch and minor updates; a new major version such as 2.0 requires a new license. Licenses bought earlier as Solo / Indie Perpetual keep their original terms.

Commercial Addendum: What a Paid License Changes

  • • Grants the commercial use that PolyForm Noncommercial withholds, for the term you purchased.
  • • Internal use only. Redistribution, sublicensing, OEM bundling, and customer-facing SaaS or hosted APIs are excluded unless a written Enterprise/OEM agreement grants them.
  • • Activated by setting QECTOR_LICENSE and QECTOR_LICENSE_KEY to your Ed25519 token. Verification is offline against a public key embedded in the package: no license server, no phone-home, works air-gapped.
  • • The package is identical for licensed and unlicensed users. Without a token, a licensing notice prints on import (suppressible with QECTOR_SILENT=1). The token does two things: it silences the notice and it unlocks tier-scoped runtime features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and a code-distance tier of 7 (Community), 19 (Pro, Team) or 63 (Lab, Enterprise). CPU decoding is never blocked; distance caps apply only when QECTOR_ENFORCE=1 is set.
  • • No warranty, indemnification, exclusivity, trademark, or patent grant is included by default.

Tokens are delivered within minutes, and every plan has a 14-day money-back guarantee on the first payment: see the Refund Policy. A refunded licence ends on refund. Plans are on the pricing page.

License Activation Procedure

  1. 1. Verify the purchase. The fulfillment worker accepts only a Stripe-signed live checkout event and records the Stripe reference, customer email, tier, and token in the protected fulfillment ledger.
  2. 2. Install the runtime. Use python -m pip install --upgrade "qector-decoder-v3>=1.0,<2" from the official PyPI project.
  3. 3. Activate both variables. Set QECTOR_LICENSE and QECTOR_LICENSE_KEY to the same token from the license email. The first is used by the import notice; the second is used by the tier-aware runtime.
  4. 4. Verify offline. Run python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])". It must print your paid tier (for example Pro), not Community; no license server or phone-home is involved.
  5. 5. Preserve the audit record. Keep the token and Stripe invoice or payment confirmation together. Never send the token in a URL, issue tracker, chat, or public repository.

If either email is missing or the token fails verification, contact admin@qector.store with the Stripe reference. Do not open a duplicate checkout or dispute while delivery is being repaired.

Full License Text

The complete, authoritative PolyForm Noncommercial License 1.0.0 text is published at polyformproject.org/licenses/noncommercial/1.0.0 and is bundled verbatim with every package distribution (LICENSE in the wheel). The summaries on this page are for orientation only; where they differ from the license text, the license text governs.

Third-Party Licenses

QECTOR depends on several open-source projects including Stim (Apache 2.0), PyMatching (MIT), NumPy (BSD), and NetworkX (BSD). Full third-party attribution is included in the distribution. All third-party names are trademarks of their respective owners; QECTOR is not affiliated with, sponsored, or endorsed by them.

- - - diff --git a/llms-full.txt b/llms-full.txt deleted file mode 100644 index 94e50074..00000000 --- a/llms-full.txt +++ /dev/null @@ -1,110 +0,0 @@ -# QECTOR Decoder v3 Full Context - -QECTOR Decoder v3 is a Rust-core Python quantum error correction decoder. Version 1.0.1 (current; 18 wheels for CPython 3.9-3.14, signed build provenance) is documented by the reference manual deposited at https://doi.org/10.5281/zenodo.21941046. - -## Core contract - -For a reachable syndrome `s = H e (mod 2)`, every supported backend is evaluated against: - -```text -H c = s (mod 2) -``` - -This puts `c + e` in `ker(H)`. Logical success requires the residual to be in `im(H^T)` or, for a full CSS workflow, in the correct logical-observable coset. Degenerate corrections must not be scored by raw vector equality alone. - -## Backend map - -- Graphlike: Union-Find, Fast Union-Find, Blossom, Sparse Blossom, hybrid cascade, lookup tables, and CPU/GPU batch paths. -- Non-graphlike: BP-OSD for arbitrary GF(2) matrices, with exact sum-product, min-sum, relay schedules, OSD-0, and OSD-W options. -- Ambiguity: reliability partitioning, exact enumeration on bounded components, restricted OSD fallback, and research-grade learned predecoders. -- Temporal: lifted space-time detector decoding plus Rust streaming and sliding-window primitives. -- Routing: structural eligibility guard, backend recommendation, fallback verification, two-stage CSS feedforward, and native routing. - -## Structural guard - -If any fault mechanism or qubit touches more than two detectors/checks, the problem is non-graphlike. Matching and Union-Find must not be forced onto it; BP-OSD is the documented general path. - -## DEM and noise model - -The DEM pipeline parses error, detector, observable, shift, and repeat statements. Graphlike columns of weight at most two become edges; hyperedges route to BP-OSD. Parallel graph mechanisms can be collapsed with `p = p1(1-p2) + p2(1-p1)`. Edge weights use `log((1-p)/p)`. Space-time data and measurement mechanisms use separate weights. - -## Evidence policy - -The manual excludes universal hardware-bound figures. Reports must identify code family, distance/size, rounds, noise model, DEM settings, decoder configuration, shots, seed, metric, environment, commit, raw JSON/CSV, and SHA-256. Logical error rates are scored in observable space and reported with Wilson confidence intervals. Code-capacity and circuit-level results are not directly comparable. - -Hot-path and cold-path timing are reported separately. Python allocation, process RSS, native heap, and VRAM are separate metrics. A skipped hardware-gated GPU test is not GPU evidence. - -## Public reading path - -- Blog index: https://qector.store/blog -- Foundations: `/blog/01QecFoundations`, `/blog/11SteaneWorkedDecode`, `/blog/12RotatedSurfaceD3` -- Decoder algorithms: `/blog/02BlossomMwpmExact`, `/blog/03SparseBlossomEventDriven`, `/blog/04FastUnionFind`, `/blog/05BpOsdQldpc`, `/blog/06AmbiguityGnnNeural` -- Multi-round and routing: `/blog/07SpaceTimeDecoder`, `/blog/08AutoDecoderCascade`, `/blog/16DecoderSelection` -- Models and evidence: `/blog/13DemPipeline`, `/blog/14WeightedDecoding`, `/blog/15LogicalErrorRates`, `/blog/17ReproducibleBenchmarks` -- Systems and delivery: `/blog/09GpuAcceleration`, `/blog/10BenchmarksArchitecture`, `/blog/18RustPyo3Architecture`, `/blog/19ReleaseLicensing`, `/blog/20EcosystemIntegration` - -## QECTOR Workbench (desktop GUI + MCP server) - -- Windows v1.0.7 (x64, 2026-09-04): 85-tool MCP server, bundled qector-decoder-v3 1.0.0 backend, 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router), 10 code families. Artifact `QectorWorkbench-Portable.exe`, SHA-256 `c53ca5f4fc49152f242a847d0ca11f147164dda426ae29ec170c451871b8ab13`. -- Linux v1.0.7 (x64, 2026-09-04): 85-tool MCP server, bundled qector-decoder-v3 1.0.0 backend, 19 named decoder kinds, 10 code families. Artifact `QectorWorkbench-Portable`, SHA-256 `aa3949d25082165dc3b89115486e1ea4e210cd5254659da32185fe6a8e71a1c8`. -- macOS: not released yet. -- Windows workspaces: Code Explorer, Decoder Lab, Benchmark, Batch & Streaming, Hardware, Diagnostics, Documentation, Lab & Personal Info, plus Console. Linux adds History. -- Data directory: `~/.local/share/QectorWorkbench` (`QECTOR_DATA_DIR` overrides). Headless: `--mcp` (stdio JSON-RPC 2.0). -- Releases: https://github.com/qectorlab/qector-decoder-workbench-windows/releases and https://github.com/qectorlab/qector-decoder-workbench-linux/releases - -## QECTOR Claude Plugin (v2.0.1) - -- Claude Code / Claude Desktop plugin v2.0.1 (2026-11-06), running on qector-decoder-v3 1.0.1: 28 domain skills, 5 specialized agents (qec-developer, qec-researcher, qec-validator, qec-sysadmin, qec-hardware-engineer), 11 slash commands. -- Default MCP server qector-secure: 12 tools (the 8 stable library tools plus airgap_status, integrity_check, schema_catalog, audit_log_status), air-gapped, integrity-checked, every request and response validated against JSON Schema 2020-12. Opt-in: qector-research (29 provisional tools) and qector-admin (3 privileged tools, QECTOR_ADMIN_ENABLED=1 plus confirm=true). -- Every dependency pinned by SHA-256 (Python 3.10-3.13, Linux/Windows/macOS); release archives signed, with SBOM and provenance. -- Zero-egress stdio architecture: circuits, parity matrices, and syndromes never leave the machine. -- Install: `claude plugin marketplace add GuillaumeLessard/qector-claude-plugin` then `claude plugin install qector@qector-tools`. Releases: https://github.com/GuillaumeLessard/qector-claude-plugin/releases - -## Official pages - -- https://qector.store/decoder -- https://qector.store/workbench -- https://qector.store/claude-plugin -- https://qector.store/mcp-server -- https://qector.store/evidence -- https://qector.store/manual -- https://qector.store/technical-reference -- https://qector.store/installer -- https://qector.store/pricing -- https://qector.store/commercial -- https://qector.store/license -- https://qector.store/about -- https://qector.store/guillaume-lessard -- https://qector.store/changelog -- https://qector.store/contact - -## Machine-readable - -- https://qector.store/llms.txt -- https://qector.store/ai.txt -- https://qector.store/feed.xml -- https://qector.store/sitemap.xml -- https://qector.store/.well-known/skills/index.json -- https://qector.store/.well-known/mcp/server-card.json - -## External records - -- DOI: https://doi.org/10.5281/zenodo.21941046 -- v1.0.0 user manual DOI: https://doi.org/10.5281/zenodo.21611214 -- Certification and proof bundle DOI: https://doi.org/10.5281/zenodo.22046403 -- PyPI: https://pypi.org/project/qector-decoder-v3/ -- GitHub: https://github.com/GuillaumeLessard/qector-decoder -- Workbench Windows: https://github.com/qectorlab/qector-decoder-workbench-windows/releases -- Workbench Linux: https://github.com/qectorlab/qector-decoder-workbench-linux/releases -- Claude plugin: https://github.com/GuillaumeLessard/qector-claude-plugin -- ORCID: https://orcid.org/0009-0000-3465-3753 - -## Install - -```text -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -``` - -## Deployment posture - -The local Rust/Python CPU library is the preferred public path. GPU paths require controlled runtime and license configuration. REST, gRPC, MCP, and metrics surfaces are provisional and require authentication, authorization, TLS, rate limits, timeouts, audit logs, request limits, and resource quotas before production use. License verification is offline and the decoder makes no blocking network call during decoding. diff --git a/llms.txt b/llms.txt deleted file mode 100644 index 35020af9..00000000 --- a/llms.txt +++ /dev/null @@ -1,100 +0,0 @@ -# QECTOR Decoder v3 (v1.0.1) - -> Python and Rust quantum error correction decoder package for QEC research, decoder validation, reproducible artifacts, and commercial evaluation. - -QECTOR Decoder v3 is documented by the QECTOR Decoder v3 Reference Manual v1.0.0, deposited at DOI https://doi.org/10.5281/zenodo.21941046. The manual is the source of truth for decoder contracts, evidence anchors, limitations, and claim boundaries. - -The common correctness contract is syndrome faithfulness: for a reachable syndrome `s`, a returned correction `c` satisfies `H c = s (mod 2)`. Logical scoring is separate and must use observables or stabilizer cosets rather than raw correction equality. - -Decoder families include weighted Blossom MWPM, event-driven Sparse Blossom, graphlike Union-Find, BP-OSD for arbitrary GF(2) check matrices, ambiguity clustering, two-stage CSS decoding, space-time decoding, streaming primitives, lookup tables, CPU/GPU batch paths, and native routing/orchestration. The actual check structure determines eligibility: mechanisms touching more than two detectors are hyperedges and route away from matching. - -No universal latency, throughput, memory, VRAM, or threshold figures are published as QECTOR facts. The manual requires workload-specific metadata, raw JSON/CSV artifacts, SHA-256 hashes, and Wilson intervals for logical-error rates. Earlier hardware-bound benchmark artifacts that did not survive a core fingerprint change are withdrawn. - -The public blog provides 20 field notes across foundations, decoder algorithms, qLDPC and AI, multi-round decoding, noise models, evidence, systems, orchestration, deployment, and ecosystem integration: - -- https://qector.store/blog - -## QECTOR Workbench (desktop GUI + MCP server) - -- Windows v1.0.7 (x64, 2026-09-04): 85-tool MCP server, bundled qector-decoder-v3 1.0.0 backend, 19 named decoder kinds (17 concrete configurations plus AutoDecoder and Auto Router), 10 code families. Artifact `QectorWorkbench-Portable.exe`, SHA-256 `c53ca5f4fc49152f242a847d0ca11f147164dda426ae29ec170c451871b8ab13`. -- Linux v1.0.7 (x64, 2026-09-04): 85-tool MCP server, bundled qector-decoder-v3 1.0.0 backend, 19 named decoder kinds, 10 code families. Artifact `QectorWorkbench-Portable`, SHA-256 `aa3949d25082165dc3b89115486e1ea4e210cd5254659da32185fe6a8e71a1c8`. -- macOS: not released yet. -- MCP protocol 2024-11-05 over stdio JSON-RPC 2.0 (`--mcp` headless mode); data directory `~/.local/share/QectorWorkbench` (`QECTOR_DATA_DIR` overrides). - -## QECTOR Claude Plugin (v2.0.1) - -- Claude Code / Claude Desktop plugin v2.0.1 (2026-11-06), running on qector-decoder-v3 1.0.1: 28 domain skills, 5 specialized agents (qec-developer, qec-researcher, qec-validator, qec-sysadmin, qec-hardware-engineer), 11 slash commands. -- Default MCP server qector-secure: 12 tools (the 8 stable library tools plus airgap_status, integrity_check, schema_catalog, audit_log_status), air-gapped, integrity-checked, every request and response validated against JSON Schema 2020-12. Opt-in: qector-research (29 provisional tools) and qector-admin (3 privileged tools, QECTOR_ADMIN_ENABLED=1 plus confirm=true). -- Every dependency pinned by SHA-256 (Python 3.10-3.13, Linux/Windows/macOS); release archives signed, with SBOM and provenance. -- Zero-egress stdio architecture: circuits, parity matrices, and syndromes never leave the machine. -- Install: `claude plugin marketplace add GuillaumeLessard/qector-claude-plugin` then `claude plugin install qector@qector-tools`. Releases: https://github.com/GuillaumeLessard/qector-claude-plugin/releases - -## Official links - -- Website: https://qector.store/ -- Claude Code Plugin: https://qector.store/claude-plugin -- Workbench: https://qector.store/workbench -- MCP Server: https://qector.store/mcp-server -- Blog: https://qector.store/blog -- Pricing & licensing: https://qector.store/pricing -- Enterprise / OEM licensing: https://qector.store/commercial -- Install guide: https://qector.store/installer -- Documentation hub: https://qector.store/docs -- User manual: https://qector.store/manual -- Technical reference: https://qector.store/technical-reference -- Evidence and reports: https://qector.store/evidence -- About: https://qector.store/about -- Founder page: https://qector.store/guillaume-lessard -- Changelog: https://qector.store/changelog -- License: https://qector.store/license -- Refund policy: https://qector.store/refund -- Commercial Licence Agreement: https://qector.store/license-agreement/ (French: https://qector.store/fr/license-agreement/) -- Privacy policy (Québec Law 25): https://qector.store/privacy/ (French: https://qector.store/fr/privacy/) -- Security & Trust (verification, keys, disclosure): https://qector.store/security/ -- Feature comparison with PyMatching, ldpc and fusion-blossom: https://qector.store/compare/ -- Getting started tutorial (tested on 1.0.1): https://qector.store/getting-started/ -- Use cases: https://qector.store/use-cases/ -- Live status: https://qector.store/status/ -- French home: https://qector.store/fr/ -- Contact: https://qector.store/contact - -## Machine-readable - -- Full-context document: https://qector.store/llms-full.txt -- AI agents index: https://qector.store/ai.txt -- Atom feed (blog): https://qector.store/feed.xml -- Sitemap: https://qector.store/sitemap.xml -- Agent skills: https://qector.store/.well-known/skills/index.json -- MCP server card: https://qector.store/.well-known/mcp/server-card.json -- Security contact: https://qector.store/.well-known/security.txt - -## External records - -- DOI record (normative manual): https://doi.org/10.5281/zenodo.21941046 -- DOI record (v1.0.0 user manual): https://doi.org/10.5281/zenodo.21611214 -- DOI record (certification and proof bundle): https://doi.org/10.5281/zenodo.22046403 -- Zenodo evidence registry: https://qector.store/evidence -- PyPI package: https://pypi.org/project/qector-decoder-v3/ -- Primary GitHub repository: https://github.com/GuillaumeLessard/qector-decoder -- Workbench Windows releases: https://github.com/qectorlab/qector-decoder-workbench-windows/releases -- Workbench Linux releases: https://github.com/qectorlab/qector-decoder-workbench-linux/releases -- Claude plugin repository: https://github.com/GuillaumeLessard/qector-claude-plugin -- Author ORCID: https://orcid.org/0009-0000-3465-3753 - -## Installation - -```text -pip install --upgrade "qector-decoder-v3>=1.0.1,<2" -``` - -## Reproducibility - -The manual provides build/import smoke commands, focused correctness tests, LER workflows, GPU identity workflows, and SHA-256 artifact hashing. A benchmark must record code family, size, noise model, decoder configuration, shots, seed, environment, and raw artifact path. - -## Boundaries and licensing - -- Free academic, personal, and non-commercial research use is governed by the published project license. -- Commercial production, hosted API, OEM, redistribution, and commercial benchmarking require the written commercial scope described by QECTOR. -- Commercial plans (USD, tax added at checkout): Pro $79/month or $790/year; Pro Perpetual $1,990; Lab $9,900/year (distance 63, SLA); 60-day Pilot $1,500; Enterprise/OEM from $25,000/year. Subscriptions renew automatically and can be cancelled any time; 14-day money-back guarantee on the first payment. Details: https://qector.store/pricing -- Local CPU decoding is the preferred research path. -- CUDA/OpenCL, REST, gRPC, MCP, and metrics paths require the hardware, feature, and deployment review described by the manual. diff --git a/manifest.webmanifest b/manifest.webmanifest deleted file mode 100644 index 3a96d991..00000000 --- a/manifest.webmanifest +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "QECTOR Decoder v3", - "short_name": "QECTOR", - "id": "/", - "scope": "/", - "lang": "en", - "dir": "ltr", - "description": "Quantum error correction decoder and research platform", - "start_url": "/", - "display": "standalone", - "background_color": "#030712", - "theme_color": "#24e7ff", - "categories": ["developer", "utilities", "science"], - "icons": [ - { "src": "/images/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, - { "src": "/images/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }, - { "src": "/images/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, - { "src": "/images/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" } - ], - "shortcuts": [ - { - "name": "Decoder", - "url": "/decoder/", - "icons": [{ "src": "/images/icon-192.png", "sizes": "192x192" }] - }, - { - "name": "Evidence", - "url": "/evidence/", - "icons": [{ "src": "/images/icon-192.png", "sizes": "192x192" }] - }, - { - "name": "Docs", - "url": "/docs/", - "icons": [{ "src": "/images/icon-192.png", "sizes": "192x192" }] - } - ] -} diff --git a/manual/index.html b/manual/index.html deleted file mode 100644 index c7c7e60f..00000000 --- a/manual/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - User Manual · QECTOR - - - - - - - - - - -
Skip to main content
15 backend families powering 17 decoder configurations · GPU Batch · Stim · Sinter · Qiskit

User Manual

Complete guide to QECTOR Decoder v3: installation, decoder selection, local measurements, diagnostics, and ecosystem integration.

Overview

QECTOR Decoder v3 is a Python library for quantum error correction (QEC) decoding. v1.0.1 is the current stable release (v1.0.0, August 2026, was the first): it provides 17 decoder configurations and helpers integrated into a high-performance compiled Rust core with a plug-and-play Python API.

Ecosystem Native: Swappable backend design. You can easily plug QECTOR into Stim, PyMatching, Sinter, and Qiskit pipelines with minimal API modifications: Sinter decoders plug in with custom_decoders=qector_sinter_decoders(), and a qiskit-qec plugin is registered.

Key Highlights

v1.0.0: First Stable Release

API stability tiers, Relay-BP, CS-OSD(lambda, w), colour-code cluster_bposd, qector CLI + qector-doctor, Sinter/qiskit entry points, pymatching shim.

Validate on Your Hardware

Hardware, GPU, and measurement results are device-local. Use the package diagnostic and declared measurement workflow instead of treating site text as performance evidence.

Multi-Algorithm Diversity

17 decoder configurations from exact Blossom MWPM to Belief-Matching, BP-OSD, and GPU batch decoding.

Compiled Rust Core

A compiled Rust core with a Python API. Exact memory, latency, and throughput behavior depends on the selected workload and environment.

Optional GPU Paths

GPU paths are optional and environment-dependent. Read the installed release diagnostics before relying on them.

- - - diff --git a/mcp-server/index.html b/mcp-server/index.html deleted file mode 100644 index f946164b..00000000 --- a/mcp-server/index.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MCP Server · QECTOR Decoder v3 - - - - - - - - - - -
Skip to main content
Local stdio · JSON-RPC 2.0 · Protocol 2024-11-05 · qector-decoder-v3 1.0.1

Library MCP Server

The app-free, library-only MCP server: eight tools covering Union-Find, exact Blossom MWPM, SparseBlossom, and the auto router, with syndrome validation against H c = s (mod 2) and coset-scored logical outcomes. Runs on qector-decoder-v3 1.0.x withmcp>=1.30,<3; no Workbench or GUI needed. Ships in theqector-claude-plugin repository.

Design principles

Deterministic, not generated

The assistant calls a decoder; it does not invent a correction. Results are reproducible and syndrome-faithful.

Runs locally

Local stdio JSON-RPC. Syndromes are processed locally on the host machine; this library server includes no telemetry.

App-free

Runs on the published qector-decoder-v3 1.0.x wheel and ships in the qector-claude-plugin repository. No QECTOR Workbench, no GUI, no desktop application required.

CLAUDE PLUGIN

Looking for the full Claude Code Plugin?

The Claude Plugin v2.0.1 includes 28 skills, 11 slash commands and 5 agents. Its default qector-secure server exposes 12 schema-validated tools and runs air-gapped; 29 research tools and 3 admin tools are opt-in. Workbench v1.0.7 remains the largest desktop surface with 85 tools on Windows and Linux.

Explore Claude Plugin →

Connect a client

The server speaks JSON-RPC 2.0 over local stdio and identifies itself as qector-decoder-v3-mcp . Add it to Claude Code, Claude Desktop, or any MCP client:

{
-  "mcpServers": {
-    "qector": {
-      "command": "python",
-      "args": ["${CLAUDE_PLUGIN_ROOT}/mcp/mcp_server_library.py"]
-    }
-  }
-}

In Claude Code, root .mcp.json already references this server via $${CLAUDE_PLUGIN_ROOT}. Validate with claude plugin validate "<PLUGIN_ROOT>" --strict .

8 Tools

Returned verbatim by tools/list. The schema is enforced as fail-closed JSON; malformed or resource-exceeding input returns an MCP isError result without leaking tracebacks.

list_code_families

List the code families available in qector-decoder-v3 1.0.1 with their live availability and graphlike eligibility.

Required
none
Optional
none
Returns
families map (generator, code_factory, available, description, single_decode), reference_manual DOI, qector_version "1.0.1"
list_decoders

List the five stable decoder classes exposed by the wheel: union_find, fast_union_find, blossom, sparse_blossom, native_auto.

Required
none
Optional
none
Returns
decoders map (class, status: "stable"), reference_manual DOI
get_license_info

Read the live offline QECTOR license tier and feature gates from the installed wheel.

Required
none
Optional
none
Returns
license info object, qector_version, reference_manual DOI
decode_syndrome

Decode a binary syndrome against an explicit or family-derived parity-check matrix. Fails unless H c = s (mod 2) (Theorem 1).

Required
syndrome
Optional
familysizedecoder_namen_qubits
Returns
family, size, decoder, backend_used, qector_version, n_checks, n_qubits, syndrome, correction, hamming_weight, syndrome_valid, latency_us
decode_single

Run one seeded code-capacity decode with Theorems 1 and 2 checks. Logical outcomes are coset-scored, not raw correction-equality.

Required
none
Optional
familydistancedecoder_nameerror_rateseed
Returns
family, distance, decoder, backend_used, qector_version, error_rate, seed, n_qubits, n_checks, error, syndrome, correction, error_weight, correction_weight, syndrome_valid, logical_failure, logical_scoring, latency_us
threshold_sweep

Run a code-capacity LER sweep with Wilson 95% intervals and a hashed raw JSON artifact. Not comparable with circuit_level results.

Required
none
Optional
familydistanceserror_ratestrialsseeddecoder_nameartifact_path
Returns
family, decoder, qector_version, results (per-point LER + Wilson interval), artifact (path, sha256, metadata), caveat
build_code_from_matrix

Validate and build a binary (n_checks, n_qubits) parity-check matrix for arbitrary CSS/graph codes.

Required
H_matrix
Optional
familydistance
Returns
family, distance, matrix_shape, rank, n_checks, n_qubits, logical_observables, graphlike, code_built, qector_version, reference_manual
compat_report

Report live package compatibility and Provisional-surface boundaries (library stdio MCP vs upstream network/batch-GPU/OpenCL surfaces).

Required
none
Optional
none
Returns
runtime_ok, qector_decoder_v3 (installed, version, expected), numpy, mcp_sdk, pymatching_compat, reference_manual, provisional_surfaces

Code families & decoders

Nine code families (graphlike eligible where marked; non-graphlike inputs route to BP-OSD or require build_code_from_matrix ) and five stable decoders. No universal benchmark figures are published on the site; run the shipped harness to measure your own hardware.

repetition
→ Open 1D chain parity-check code
ring
→ Periodic ring code
surface_legacy
→ Legacy toric weight-4 generator; NOT graphlike
rotated_surface
→ Graphlike rotated surface code
unrotated_surface
→ Graphlike square-lattice surface code
toric
→ Graphlike toric code with periodic boundaries
heavy_hex
→ Graphlike heavy-hex code
color_code
→ Color code family exposed by the wheel
hypergraph_product
→ CSS code from two parity-check matrices (requires build_code_from_matrix)
DecoderCompatibilityDescription
union_findGraphlikeStandard cluster-growth Union-Find decoder.
fast_union_findGraphlikeFaster approximate Union-Find variant.
blossomUniversalWeight-optimal exact MWPM matching.
sparse_blossomGraphlikeRegion-growing blossom variant for sparse error graphs.
native_autoAutoSelf-selecting heuristic selector (blossom for graphlike, BP-OSD for hypergraph-product).

Example call

decode_single runs one seeded code-capacity decode with Theorems 1 and 2 enforcement, then returns syndrome_valid and logical_scoring fields.

{
-  "jsonrpc": "2.0",
-  "id": 1,
-  "method": "tools/call",
-  "params": {
-    "name": "decode_single",
-    "arguments": {
-      "family": "rotated_surface",
-      "distance": 5,
-      "decoder_name": "blossom",
-      "error_rate": 0.05,
-      "seed": 42
-    }
-  }
-}

Response:

{
-  "jsonrpc": "2.0",
-  "id": 1,
-  "result": {
-    "content": [{
-      "type": "text",
-      "text": "{\n  \"family\": \"rotated_surface\",\n  \"distance\": 5,\n  \"decoder\": \"blossom\",\n  \"syndrome_valid\": true,\n  \"logical_scoring\": \"logical-observable matrix (Theorem 2)\",\n  \"logical_failure\": false\n}"
-    }]
-  }
-}

Tool results are returned as MCP text content containing the JSON payload, per the 2024-11-05 content convention. The H c = s (mod 2) check is enforced before any logical scoring; a failed check raises an MCP error instead of returning a result.

Operational guidance

  • Local only. The supported transport is local stdio. Network surfaces (REST/gRPC/metrics/SSE) and batch-GPU paths are Provisional and require separate deployment review; they are not part of this public library contract.
  • Graphlike guard. Exact Blossom and SparseBlossom decoders require graphlike check structures (qubit participation ≤ 2). For hyperedge matrices such as generate_surface_code_checks , use build_code_from_matrix or decompose via the documented direct-wheel APIs.
  • LER is coset-scored. Logical outcomes use the logical coset, never raw correction-vector equality. Wilson 95% intervals and a code_capacity tag are included; do not compare with circuit_level results.
  • Artifacts stay local. threshold_sweep writes a hashed raw JSON artifact with required metadata. Generated artifacts belong outside the plugin and must not be uploaded to external services.
  • Licensing. See Pricing for license-key installation and tier information returned by get_license_info .
- - - diff --git a/og/about.jpg b/og/about.jpg deleted file mode 100644 index d7a4cd31..00000000 Binary files a/og/about.jpg and /dev/null differ diff --git a/og/blog--01QecFoundations.jpg b/og/blog--01QecFoundations.jpg deleted file mode 100644 index 7227e1d8..00000000 Binary files a/og/blog--01QecFoundations.jpg and /dev/null differ diff --git a/og/blog--02BlossomMwpmExact.jpg b/og/blog--02BlossomMwpmExact.jpg deleted file mode 100644 index 36d86f26..00000000 Binary files a/og/blog--02BlossomMwpmExact.jpg and /dev/null differ diff --git a/og/blog--03SparseBlossomEventDriven.jpg b/og/blog--03SparseBlossomEventDriven.jpg deleted file mode 100644 index ce4ba539..00000000 Binary files a/og/blog--03SparseBlossomEventDriven.jpg and /dev/null differ diff --git a/og/blog--04FastUnionFind.jpg b/og/blog--04FastUnionFind.jpg deleted file mode 100644 index 5fa10639..00000000 Binary files a/og/blog--04FastUnionFind.jpg and /dev/null differ diff --git a/og/blog--05BpOsdQldpc.jpg b/og/blog--05BpOsdQldpc.jpg deleted file mode 100644 index cfc9e261..00000000 Binary files a/og/blog--05BpOsdQldpc.jpg and /dev/null differ diff --git a/og/blog--06AmbiguityGnnNeural.jpg b/og/blog--06AmbiguityGnnNeural.jpg deleted file mode 100644 index 89552436..00000000 Binary files a/og/blog--06AmbiguityGnnNeural.jpg and /dev/null differ diff --git a/og/blog--07SpaceTimeDecoder.jpg b/og/blog--07SpaceTimeDecoder.jpg deleted file mode 100644 index 7829a408..00000000 Binary files a/og/blog--07SpaceTimeDecoder.jpg and /dev/null differ diff --git a/og/blog--08AutoDecoderCascade.jpg b/og/blog--08AutoDecoderCascade.jpg deleted file mode 100644 index e3f03871..00000000 Binary files a/og/blog--08AutoDecoderCascade.jpg and /dev/null differ diff --git a/og/blog--09GpuAcceleration.jpg b/og/blog--09GpuAcceleration.jpg deleted file mode 100644 index cec3a2c6..00000000 Binary files a/og/blog--09GpuAcceleration.jpg and /dev/null differ diff --git a/og/blog--10BenchmarksArchitecture.jpg b/og/blog--10BenchmarksArchitecture.jpg deleted file mode 100644 index 470d8840..00000000 Binary files a/og/blog--10BenchmarksArchitecture.jpg and /dev/null differ diff --git a/og/blog--11SteaneWorkedDecode.jpg b/og/blog--11SteaneWorkedDecode.jpg deleted file mode 100644 index e626a6c2..00000000 Binary files a/og/blog--11SteaneWorkedDecode.jpg and /dev/null differ diff --git a/og/blog--12RotatedSurfaceD3.jpg b/og/blog--12RotatedSurfaceD3.jpg deleted file mode 100644 index 3f56e51a..00000000 Binary files a/og/blog--12RotatedSurfaceD3.jpg and /dev/null differ diff --git a/og/blog--13DemPipeline.jpg b/og/blog--13DemPipeline.jpg deleted file mode 100644 index cc48d832..00000000 Binary files a/og/blog--13DemPipeline.jpg and /dev/null differ diff --git a/og/blog--14WeightedDecoding.jpg b/og/blog--14WeightedDecoding.jpg deleted file mode 100644 index d33125b3..00000000 Binary files a/og/blog--14WeightedDecoding.jpg and /dev/null differ diff --git a/og/blog--15LogicalErrorRates.jpg b/og/blog--15LogicalErrorRates.jpg deleted file mode 100644 index bac1e23a..00000000 Binary files a/og/blog--15LogicalErrorRates.jpg and /dev/null differ diff --git a/og/blog--16DecoderSelection.jpg b/og/blog--16DecoderSelection.jpg deleted file mode 100644 index 1380b048..00000000 Binary files a/og/blog--16DecoderSelection.jpg and /dev/null differ diff --git a/og/blog--17ReproducibleBenchmarks.jpg b/og/blog--17ReproducibleBenchmarks.jpg deleted file mode 100644 index f5e5a6b5..00000000 Binary files a/og/blog--17ReproducibleBenchmarks.jpg and /dev/null differ diff --git a/og/blog--18RustPyo3Architecture.jpg b/og/blog--18RustPyo3Architecture.jpg deleted file mode 100644 index 6cbcb2ed..00000000 Binary files a/og/blog--18RustPyo3Architecture.jpg and /dev/null differ diff --git a/og/blog--19ReleaseLicensing.jpg b/og/blog--19ReleaseLicensing.jpg deleted file mode 100644 index e11a6382..00000000 Binary files a/og/blog--19ReleaseLicensing.jpg and /dev/null differ diff --git a/og/blog--20EcosystemIntegration.jpg b/og/blog--20EcosystemIntegration.jpg deleted file mode 100644 index 114ccba7..00000000 Binary files a/og/blog--20EcosystemIntegration.jpg and /dev/null differ diff --git a/og/blog.jpg b/og/blog.jpg deleted file mode 100644 index 56b67ff9..00000000 Binary files a/og/blog.jpg and /dev/null differ diff --git a/og/changelog.jpg b/og/changelog.jpg deleted file mode 100644 index ca6eea54..00000000 Binary files a/og/changelog.jpg and /dev/null differ diff --git a/og/claude-plugin.jpg b/og/claude-plugin.jpg deleted file mode 100644 index 371f079b..00000000 Binary files a/og/claude-plugin.jpg and /dev/null differ diff --git a/og/commercial.jpg b/og/commercial.jpg deleted file mode 100644 index dffa7393..00000000 Binary files a/og/commercial.jpg and /dev/null differ diff --git a/og/compare.jpg b/og/compare.jpg deleted file mode 100644 index 681b0b88..00000000 Binary files a/og/compare.jpg and /dev/null differ diff --git a/og/contact.jpg b/og/contact.jpg deleted file mode 100644 index 7cf5b420..00000000 Binary files a/og/contact.jpg and /dev/null differ diff --git a/og/decoder.jpg b/og/decoder.jpg deleted file mode 100644 index 9bcb6915..00000000 Binary files a/og/decoder.jpg and /dev/null differ diff --git a/og/docs.jpg b/og/docs.jpg deleted file mode 100644 index c5deb9ab..00000000 Binary files a/og/docs.jpg and /dev/null differ diff --git a/og/evidence.jpg b/og/evidence.jpg deleted file mode 100644 index 69af954d..00000000 Binary files a/og/evidence.jpg and /dev/null differ diff --git a/og/fr--decoder.jpg b/og/fr--decoder.jpg deleted file mode 100644 index 2f5497f5..00000000 Binary files a/og/fr--decoder.jpg and /dev/null differ diff --git a/og/fr--license-agreement.jpg b/og/fr--license-agreement.jpg deleted file mode 100644 index 433bdbbc..00000000 Binary files a/og/fr--license-agreement.jpg and /dev/null differ diff --git a/og/fr--license.jpg b/og/fr--license.jpg deleted file mode 100644 index 0ba0f676..00000000 Binary files a/og/fr--license.jpg and /dev/null differ diff --git a/og/fr--pricing.jpg b/og/fr--pricing.jpg deleted file mode 100644 index c1b6e0dd..00000000 Binary files a/og/fr--pricing.jpg and /dev/null differ diff --git a/og/fr--privacy.jpg b/og/fr--privacy.jpg deleted file mode 100644 index f790f098..00000000 Binary files a/og/fr--privacy.jpg and /dev/null differ diff --git a/og/fr--refund.jpg b/og/fr--refund.jpg deleted file mode 100644 index a3c1b367..00000000 Binary files a/og/fr--refund.jpg and /dev/null differ diff --git a/og/fr--terms.jpg b/og/fr--terms.jpg deleted file mode 100644 index 859689a8..00000000 Binary files a/og/fr--terms.jpg and /dev/null differ diff --git a/og/fr.jpg b/og/fr.jpg deleted file mode 100644 index d09ab585..00000000 Binary files a/og/fr.jpg and /dev/null differ diff --git a/og/getting-started.jpg b/og/getting-started.jpg deleted file mode 100644 index 50b732f3..00000000 Binary files a/og/getting-started.jpg and /dev/null differ diff --git a/og/guillaume-lessard.jpg b/og/guillaume-lessard.jpg deleted file mode 100644 index 275ce9fc..00000000 Binary files a/og/guillaume-lessard.jpg and /dev/null differ diff --git a/og/home.jpg b/og/home.jpg deleted file mode 100644 index 15b87411..00000000 Binary files a/og/home.jpg and /dev/null differ diff --git a/og/installer.jpg b/og/installer.jpg deleted file mode 100644 index 63102673..00000000 Binary files a/og/installer.jpg and /dev/null differ diff --git a/og/license-agreement.jpg b/og/license-agreement.jpg deleted file mode 100644 index 172531c6..00000000 Binary files a/og/license-agreement.jpg and /dev/null differ diff --git a/og/license.jpg b/og/license.jpg deleted file mode 100644 index 39169002..00000000 Binary files a/og/license.jpg and /dev/null differ diff --git a/og/manual.jpg b/og/manual.jpg deleted file mode 100644 index b2eee039..00000000 Binary files a/og/manual.jpg and /dev/null differ diff --git a/og/mcp-server.jpg b/og/mcp-server.jpg deleted file mode 100644 index a6999bce..00000000 Binary files a/og/mcp-server.jpg and /dev/null differ diff --git a/og/pricing.jpg b/og/pricing.jpg deleted file mode 100644 index f1906c0e..00000000 Binary files a/og/pricing.jpg and /dev/null differ diff --git a/og/privacy.jpg b/og/privacy.jpg deleted file mode 100644 index 7a67450d..00000000 Binary files a/og/privacy.jpg and /dev/null differ diff --git a/og/refund.jpg b/og/refund.jpg deleted file mode 100644 index 9213c49d..00000000 Binary files a/og/refund.jpg and /dev/null differ diff --git a/og/security.jpg b/og/security.jpg deleted file mode 100644 index 378ef031..00000000 Binary files a/og/security.jpg and /dev/null differ diff --git a/og/status.jpg b/og/status.jpg deleted file mode 100644 index baad411c..00000000 Binary files a/og/status.jpg and /dev/null differ diff --git a/og/technical-reference.jpg b/og/technical-reference.jpg deleted file mode 100644 index 2a3c25bc..00000000 Binary files a/og/technical-reference.jpg and /dev/null differ diff --git a/og/terms.jpg b/og/terms.jpg deleted file mode 100644 index 2512002a..00000000 Binary files a/og/terms.jpg and /dev/null differ diff --git a/og/use-cases.jpg b/og/use-cases.jpg deleted file mode 100644 index efbb32fa..00000000 Binary files a/og/use-cases.jpg and /dev/null differ diff --git a/og/workbench.jpg b/og/workbench.jpg deleted file mode 100644 index e15ea583..00000000 Binary files a/og/workbench.jpg and /dev/null differ diff --git a/pricing/index.html b/pricing/index.html deleted file mode 100644 index efe40006..00000000 --- a/pricing/index.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pricing · QECTOR - - - - - - - - - - - - - -
Skip to main content
Clear, Transparent Commercial Licensing

License QECTOR for Production

Free for academic and non-commercial research. For commercial use, pick a plan: licences are verified offline and work fully air-gapped, cancel any time, 14-day money-back on your first payment.

Air-gapped

Signed token, verified offline. No licence server, no phone-home.

14-day money-back

Full refund on your first payment of any plan, no questions asked.

Cancel any time

Your licence stays valid to the end of the period you paid for.

Commercial Plans

Production rights for your organisation's internal use. Subscriptions renew automatically until cancelled.

40% off Lab for academic institutions. Non-commercial research is free.
Most popular
Pro
$79/ month

Or $790/year (2 months free). Pro licence tier.

  • Included: Commercial internal use
  • Included: All decoder families
  • Included: CPU + GPU (CUDA/OpenCL) batch
  • Included: Code distances up to 19
  • Included: Email support (2 business days)
Buy monthly
Lab
$9,900/ year

Enterprise licence tier, for research groups and labs.

  • Included: Everything in Pro
  • Included: Code distances up to 63
  • Included: Priority support with SLA
  • Included: 2-hour onboarding call
  • Included: One Validation Report ($5,000 value)
Buy Lab
Enterprise & OEM
$25k+/ year

Redistribution, SaaS, OEM and custom terms.

  • Included: Signed agreement, custom terms
  • Included: SaaS and customer-facing APIs
  • Included: OEM and hardware bundling
  • Included: Named support engineer
Contact Sales

Pro billed yearly: $790 / year. Prefer to own it? Pro Perpetual: $1,990 one-time (every 1.x release, 12 months of support).

QECTOR Validation Sprint

$3,750 one-time · 10-20 days delivery

The recommended fast-track for teams seeking immediate, defensible proof of workflow value. We execute up to 3 standard benchmark workloads using QECTOR and deliver reproducible artifact bundles.

  • ✓ Includes a 60-day Pilot licence
  • ✓ Comparative analysis vs PyMatching/Stim
  • ✓ 60-minute results review call
Request Validation Sprint

Need only the licence and a call? The 60-day Pilot is $1,500: a 1-hour integration call and a written validation memo, 100% creditable toward Lab within 90 days.

Activating Your License

Everyone installs the same wheel from PyPI: there is no separate commercial build. Your token unlocks the paid features: GPU (CUDA/OpenCL) batch decoding on every paid plan, and code distances up to 63 on Lab and Enterprise. CPU decoding is never blocked; distance caps are enforced only when you set QECTOR_ENFORCE=1.

pip install --upgrade "qector-decoder-v3>=1.0.1,<2"
-export QECTOR_LICENSE_KEY="<your-token>"
-export QECTOR_LICENSE="<your-token>"
-
-# Verify offline: prints Pro or Enterprise
-python -c "import qector_decoder_v3 as q; print(q.get_license_info()['tier'])"

Tokens are verified offline against a public key embedded in the package: no license server, no phone-home, works completely air-gapped.

Why License QECTOR?

Free (Source-Available)Licensed (Commercial)
Non-commercial research use onlyInternal R&D and production rights
Community support (GitHub Issues)Priority email support & SLAs
QECTOR Workbench GUI (Free)Validation artifact reproduction harnesses
PolyForm Noncommercial LicenseWritten Commercial License Agreement

Frequently Asked Questions

Does licensing work on air-gapped machines?

Yes. A licence is a signed token verified offline against a public key built into the package. There is no licence server, no activation step and no network call, so it works on isolated and air-gapped systems.

How is the licence delivered, and what does the token unlock?

By e-mail within minutes of payment (check spam, then write to admin@qector.store with your Stripe receipt). Everyone installs the same wheel: pip install --upgrade "qector-decoder-v3>=1.0.1,<2". Set QECTOR_LICENSE_KEY and QECTOR_LICENSE to the token. Every paid plan unlocks GPU (CUDA/OpenCL) batch decoding; Lab and Enterprise also raise the code-distance tier to 63. CPU decoding is never blocked, and distance caps are only enforced if you set QECTOR_ENFORCE=1.

Can I try it before committing?

Every plan carries a 14-day money-back guarantee on the first payment: buy Pro monthly, run it on your own workloads, and if it is not right write to admin@qector.store for a full refund. For a structured evaluation with an integration call, take the 60-day Pilot, which is fully creditable toward Lab.

Do plans renew automatically, and how do I cancel?

Yes. Pro (monthly or annual) and Lab renew automatically until cancelled, with a reminder e-mail 14 days before each annual renewal. Cancel any time from your Stripe receipt or by writing to admin@qector.store; your licence stays valid until the end of the paid period. Pro Perpetual and the Pilot are one-time payments and never renew.

What is your refund policy?

14-day money-back guarantee on your first payment of any plan: write to admin@qector.store with your Stripe receipt and we refund it in full. Renewals are not refunded pro rata. Duplicate purchases and charges made in error are always refunded. If a token never arrives or fails to verify, we reissue it at no cost. This does not limit non-waivable statutory rights.

What does a licence cover?

Internal commercial use by your organisation, including production. Pro and Lab differ in licence tier (Lab raises the code-distance tier to 63) and support level. Pro Perpetual covers every 1.x release of qector-decoder-v3; a new major version such as 2.0 is a new licence. The Pilot is for evaluation (benchmarking, integration testing, threshold studies), not production.

Is a hosted or customer-facing API covered?

No. Pro and Lab cover internal use on your own infrastructure. As soon as QECTOR sits behind an API, product or service that anyone outside your organisation can reach, that is SaaS or redistribution and needs an Enterprise/OEM agreement. Internal endpoints used only by your own staff are fine. Unsure? Describe the deployment to admin@qector.store.

Can I redistribute QECTOR inside my product?

Only under an Enterprise/OEM agreement, which covers redistribution, SaaS hosting and hardware bundling. Write to admin@qector.store.

Do I need a licence for non-commercial research?

No. Personal, academic and other non-commercial use is free under the PolyForm Noncommercial License 1.0.0. Universities, public research organisations, charities and government institutions may also use it free, whatever the source of their funding. A company using QECTOR, including on a contract with a university, needs a paid plan. Academic institutions that want a paid plan anyway, for support or to pass commercial rights to an industry partner, get 40% off Lab with an institutional e-mail.

What currency are prices in, and is tax included?

Prices are in US dollars and exclude tax. Applicable sales tax, GST/HST or VAT is calculated and added at checkout from your billing address. Businesses can enter a VAT/GST number at checkout.

Can we get a signed agreement, tax form or security questionnaire?

Yes. For a signed PDF agreement, vendor profile, W-8BEN or equivalent, or a security questionnaire, write to admin@qector.store with your Stripe invoice number. Enterprise agreements are always signed contracts.

What is not included: Unless explicitly granted, no tier includes redistribution, OEM, SaaS hosting, or sublicensing rights. Contact sales for Custom terms.

Procurement: All prices are in USD; applicable taxes are added at checkout. Monthly and annual plans renew automatically until cancelled, with a reminder before each annual renewal. 14-day money-back guarantee on your first payment of any plan. Tokens are emailed within minutes.

By purchasing, you accept the Commercial Licence Agreement.

- - - diff --git a/pricing_scrolled.png b/pricing_scrolled.png deleted file mode 100644 index 55703c1d..00000000 Binary files a/pricing_scrolled.png and /dev/null differ diff --git a/privacy/index.html b/privacy/index.html deleted file mode 100644 index aa3acacc..00000000 --- a/privacy/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Privacy Policy · QECTOR - - - - - - - - - - - - - -
Skip to main content
No software telemetry · No ad networks · No data sold · Updated 6 November 2026

Privacy Policy

QECTOR collects only what it needs to sell licences and answer you. The decoder software sends nothing to us: licences are verified offline.

Last updated 6 November 2026.

Version française

1. Who is responsible

QECTOR is operated by Guillaume Lessard, sole proprietor trading as iD01t Productions, 288 boul. des Ormeaux, Longueuil, Québec, Canada J4L 1J4.

Guillaume Lessard is the person in charge of the protection of personal information. Contact: admin@qector.store, subject line "Privacy".

2. The software collects nothing

The qector-decoder-v3 package, the Claude plugin and the Workbench run locally. They send no telemetry, usage data, syndromes, matrices or circuits to us, and licence tokens are verified offline with no network call.

The only exception is optional usage-based billing, which exists only under a signed Enterprise agreement and is switched off with QECTOR_OFFLINE=1.

3. What we collect, and why

We do not use your information for advertising, we do not sell or rent it, and we make no decision about you by automated means alone.

InformationPurpose
Purchase: name, organisation, e-mail, billing address, tax number (if given), plan and amountSell the licence, issue invoices and tax receipts, and meet tax law. Card details go to Stripe only; we never see them.
Licence record: e-mail, receipt id, plan, licence token, expiry, refund or revocation statusDeliver and reissue tokens, process renewals and refunds, and publish revoked receipt ids.
Messages: what you send by e-mail, the contact form (which opens your own e-mail program) or a Calendly bookingAnswer you and provide support.
Technical data: IP address, browser type and the pages requested, in our hosting providers’ logs; aggregate, cookieless page statistics (Cloudflare Web Analytics)Deliver the website, protect it from abuse and see which pages are used.

5. Service providers and transfers outside Québec

We use the providers below. Each receives only what its service needs and is bound by its own privacy and security commitments. Some of them store or process information outside Québec and Canada, mainly in the United States. Before relying on a provider, we assess whether the information will receive adequate protection.

ProviderUse, and where
StripePayments, invoices and tax; United States and Ireland.
CloudflareWebsite delivery and security, and the licence service that stores licence records; global network, United States.
GoogleSending licence e-mails (Gmail); United States.
GitHubWebsite hosting (GitHub Pages) and the software’s source and releases; United States.
CalendlyBooking calls from the Contact and Founder pages; United States.

6. Cookies and similar technologies

QECTOR sets no cookies and runs no advertising trackers. We use Cloudflare Web Analytics, which is cookieless: it counts page views and load times in aggregate, without cookies, fingerprinting or cross-site tracking. Some third-party features may set their own cookies: Stripe’s script on the Home and Pricing pages (fraud prevention), the Calendly widget on the Contact and Founder pages, and Cloudflare security cookies. Fonts are served from qector.store itself. Some pages ask PyPI for the latest version number, so PyPI sees your IP address.

7. How long we keep it

When information is no longer needed, we delete it or make it anonymous.

  • Purchase and licence records: for the life of the licence, then 6 years after the end of the tax year they relate to, as Québec and Canadian tax law requires.
  • Messages and bookings: 3 years after the last exchange, unless they are part of a purchase record.
  • Hosting logs: kept by our providers under their own policies, usually days to months; we do not keep separate copies.

8. Security and incidents

Access to licence records and accounts is limited to the person in charge and protected with strong authentication. Licence tokens are signed with a private key that never leaves controlled systems.

We keep a register of confidentiality incidents. If an incident presents a risk of serious injury, we notify the Commission d’accès à l’information du Québec and the people affected as soon as possible.

9. Your rights

You may ask to access the personal information we hold about you, to correct it, to receive it in a structured, commonly used technological format, to have it deleted or de-indexed where the law allows, and to withdraw your consent. Write to admin@qector.store. We answer within 30 days, free of charge.

If you are not satisfied, you may complain to the Commission d’accès à l’information du Québec, to the Office of the Privacy Commissioner of Canada, or to the data protection authority where you live.

10. Children

Our services are meant for professionals and researchers. We do not knowingly collect information from anyone under 14.

11. Changes

We will post any change here with a new date. If a change affects how we use information you already gave us, we will tell customers by e-mail and ask for consent where the law requires it.

- - - diff --git a/refund/index.html b/refund/index.html deleted file mode 100644 index 2d769544..00000000 --- a/refund/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Refund Policy · QECTOR - - - - - - - - - - - - - -
Skip to main content
All prices in USD · Instant digital delivery · Updated 6 November 2026

Refund Policy

Every plan has a 14-day money-back guarantee on the first payment. Subscriptions renew automatically and you can cancel at any time. See Pricing.

Version française

14-day money-back guarantee

If QECTOR is not right for you, e-mail admin@qector.store with your Stripe receipt within 14 days of your first payment of any plan (Pro monthly or annual, Pro Perpetual, Lab or the Pilot). We refund it in full, no questions asked, and revoke the licence token.

  • One guarantee per organisation; it applies to the first purchase, not to later renewals.
  • Refunds go back to the original payment method through Stripe, usually within 5 to 10 business days.
  • Once refunded, the licence ends and the token must no longer be used.

Renewals and cancelling

Pro (monthly or annual) and Lab are subscriptions and renew automatically until cancelled. We e-mail a reminder 14 days before each annual renewal. Cancel at any time in the customer portal (sign in with your billing e-mail) or by e-mailing admin@qector.store; your licence stays valid until the end of the period you paid for.

Renewal payments are not refunded pro rata. If a renewal went through that you meant to cancel and you have not used the renewed term, write to us within 7 days and we will refund it. Pro Perpetual and the Pilot are one-time payments and never renew.

Delivery problems: we fix them

If your token never arrives, arrives corrupted, is tied to the wrong e-mail or fails offline verification, that is a delivery fault on our side. Do not open a dispute: e-mail admin@qector.store with your Stripe receipt and we will reissue or correct it at no cost, with no time limit.

Tokens are e-mailed within minutes of payment, usually under 10 minutes. If it has been longer, check your spam folder first.

Duplicate and mistaken charges

Accidental duplicate purchases of the same plan for the same organisation, and charges made in obvious error, are always refunded in full. E-mail admin@qector.store with both receipts within 30 days of the charge.

Statutory rights

Nothing in this policy limits rights that cannot be waived under the consumer protection law that applies to you, including the Québec Consumer Protection Act where it applies.

Currency and tax

All prices are quoted and charged in US dollars (USD), exclusive of tax. Any sales tax, GST/QST or VAT is calculated at checkout from your billing address and refunded with the price. Businesses can enter a tax number at checkout.

Seller and contact

QECTOR software and licences are sold by Guillaume Lessard, sole proprietor trading as iD01t Productions, 288 boul. des Ormeaux, Longueuil, Québec, Canada J4L 1J4. Contact: admin@qector.store.

Typical response time is 1 business day. See also the Commercial Licence Agreement and Terms.

- - - diff --git a/robots.txt b/robots.txt deleted file mode 100644 index a6ecbe52..00000000 --- a/robots.txt +++ /dev/null @@ -1,12 +0,0 @@ -# qector.store - canonical crawler policy (audit S3: minimal, widely supported -# directives). Everything is allowed; the wildcard group is the only enforceable -# rule most crawlers need. Vendor-specific agent names were removed because a -# matching named group disables the wildcard group for that agent and adds -# nothing over "Allow: /". The AI-crawler policy statement lives in ai.txt, -# the machine-readable discovery surface lives in llms.txt / llms-full.txt. - -User-agent: * -Allow: / -Disallow: /success - -Sitemap: https://qector.store/sitemap.xml diff --git a/scripts/security-audit.mjs b/scripts/security-audit.mjs index b525ce44..621c258e 100644 --- a/scripts/security-audit.mjs +++ b/scripts/security-audit.mjs @@ -9,8 +9,11 @@ const requiredDocumentHeaders = { "x-xss-protection": /^1; mode=block$/i, }; +// JSON endpoints of the licence service. X-XSS-Protection is a browser +// page-rendering header: the service does not send it and has no use for it. +const { "x-xss-protection": _pageOnly, ...sharedHeaders } = requiredDocumentHeaders; const requiredApiHeaders = { - ...requiredDocumentHeaders, + ...sharedHeaders, "content-security-policy": /default-src 'none'.*frame-ancestors 'none'/i, "referrer-policy": /^no-referrer$/i, "cache-control": /^no-store$/i, @@ -63,12 +66,6 @@ assertHeaders(apiResponse, requiredApiHeaders, "health"); const health = await apiResponse.json(); assert(health.ok === true && health.live_mode === true, "health: live service did not report ok"); -const videoResponse = await request("/videos/hero-lattice.mp4", { method: "HEAD" }); -assert(videoResponse.status === 200, `video: expected 200, got ${videoResponse.status}`); -assert(/^video\/mp4/i.test(header(videoResponse, "content-type")), "video: incorrect content type"); -assert(/immutable/i.test(header(videoResponse, "cache-control")), "video: missing immutable cache policy"); -assertHeaders(videoResponse, requiredDocumentHeaders, "video"); - const securityResponse = await request("/.well-known/security.txt", { method: "HEAD" }); assert(securityResponse.status === 200, `security.txt: expected 200, got ${securityResponse.status}`); assert(/^text\/plain/i.test(header(securityResponse, "content-type")), "security.txt: incorrect content type"); @@ -84,5 +81,5 @@ if (failures.length > 0) { console.error(failures.map((failure) => `FAIL: ${failure}`).join("\n")); process.exitCode = 1; } else { - console.log("Production security audit passed: headers, redirects, API, video, security.txt, and removed routes."); + console.log("Production security audit passed: headers, redirects, API, security.txt, and removed routes."); } diff --git a/security/index.html b/security/index.html deleted file mode 100644 index 62c14f37..00000000 --- a/security/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Security & Trust · QECTOR - - - - - - - - - - -
Skip to main content
No telemetry · Offline licensing · Signed releases

Security & Trust

Everything a security or procurement review needs, published. Every claim on this page links to an artefact you can check yourself.

At a glance

  • No telemetry. The decoder, plugin and Workbench send nothing to QECTOR: no usage data, syndromes, matrices or circuits.
  • Air-gapped licensing. Licence tokens are Ed25519 signatures verified offline against a key in the package. No licence server, no activation call.
  • Verified builds. All 18 decoder wheels are built in GitHub Actions, carry Sigstore build provenance and PEP 740 attestations, and are published with Trusted Publishing (no API token).
  • Tested before release. Each wheel is installed on its own OS and checked against the syndrome before publishing; the receipts ship as platform-proof.json.
  • Dependency gate. Releases are blocked while a RustSec advisory or licence-policy violation is open.

Verify a decoder wheel

Download from PyPI or the v1.0.1 GitHub release, then check its checksum and provenance with the GitHub CLI:

verifybash
sha256sum -c SHA256SUMS --ignore-missing
-gh attestation verify qector_decoder_v3-1.0.1-*.whl \
-  --repo GuillaumeLessard/qector-decoder

PyPI also shows each file's attestations under "Verified details".

Verify the Claude plugin

The plugin v2.0.1 release ships SHA256SUMS, an Ed25519 signature over it, an SPDX 2.3 SBOM, a release manifest and provenance. Verify with the release-signing public key:

verifybash
sha256sum -c SHA256SUMS
-python scripts/sign_release.py --verify . \
-  --pubkey kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=

Every Python dependency of the plugin is pinned by SHA-256 in requirements.lock and installed with --require-hashes.

Public keys

KeyValue
Plugin release signing (Ed25519, raw base64)kYwkMApz4zMgQmJsOya1UZuByvnuikzlxQkQiA8NOJg=
Decoder licence verification (Ed25519, SPKI DER base64)MCowBQYDK2VwAyEAQh9t19EZ4KWZEYjY3EwHCUzUIehZBlovaMtrpLQXeGA=

The licence key is embedded in the package; it only verifies tokens and cannot issue them.

Data handling

We hold only purchase and licence records (organisation, e-mail, plan, receipt, token) and support messages. Card data stays with Stripe. Details, providers and retention are in the Privacy Policy, written for Québec's Law 25.

Revoked licences are published at qector.store/stripe/revoked.txt; air-gapped sites can copy it to ~/.qector/revoked.txt.

Report a vulnerability

E-mail admin@qector.store with the subject [SECURITY] QECTOR disclosure. Include the component, version, platform, reproduction steps and impact. Please do not publish details before a fix is available.

We acknowledge reports within 5 business days and coordinate disclosure with you. Supported versions: decoder 1.0.x and Claude plugin 2.0.x. Full policy: decoder SECURITY.md, plugin SECURITY.md, and security.txt.

Procurement

  • Seller: Guillaume Lessard, sole proprietor trading as iD01t Productions, 288 boul. des Ormeaux, Longueuil, Québec, Canada J4L 1J4.
  • Contract: the Commercial Licence Agreement (français); Enterprise deals use a signed agreement.
  • Payment: card or invoice through Stripe, in USD; tax numbers accepted at checkout.
  • On request: W-8BEN for US customers, completed security questionnaires, and a call with the developer. Write to admin@qector.store.
- - - diff --git a/sitemap.xml b/sitemap.xml deleted file mode 100644 index 52da964e..00000000 --- a/sitemap.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - https://qector.store/2026-11-06weekly1.0 - - - - - https://qector.store/about/2026-11-06monthly0.7 - https://qector.store/decoder/2026-11-06weekly0.9 - - - - - https://qector.store/workbench/2026-09-27monthly0.8 - https://qector.store/mcp-server/2026-11-06monthly0.6 - https://qector.store/claude-plugin/2026-11-06weekly0.8 - https://qector.store/blog/2026-11-06weekly0.8 - https://qector.store/pricing/2026-11-06monthly0.8 - - - - - https://qector.store/fr/pricing/2026-11-06monthly0.4 - - - - - https://qector.store/commercial/2026-11-06monthly0.7 - https://qector.store/contact/2026-11-06monthly0.5 - https://qector.store/license/2026-11-06monthly0.5 - - - - - https://qector.store/fr/license/2026-11-07monthly0.4 - - - - - https://qector.store/fr/decoder/2026-11-07monthly0.4 - - - - - https://qector.store/privacy/2026-11-06monthly0.5 - - - - - https://qector.store/terms/2026-11-06monthly0.5 - - - - - https://qector.store/fr/terms/2026-11-06monthly0.4 - - - - - https://qector.store/refund/2026-11-06monthly0.5 - - - - - https://qector.store/fr/refund/2026-11-06monthly0.4 - - - - - https://qector.store/fr/privacy/2026-11-06monthly0.4 - - - - - https://qector.store/license-agreement/2026-11-06monthly0.5 - - - - - https://qector.store/fr/license-agreement/2026-11-06monthly0.4 - - - - - https://qector.store/security/2026-11-06monthly0.6 - https://qector.store/fr/2026-11-06monthly0.5 - - - - - https://qector.store/getting-started/2026-11-06monthly0.5 - https://qector.store/use-cases/2026-11-06monthly0.5 - https://qector.store/status/2026-11-07monthly0.5 - https://qector.store/compare/2026-11-06monthly0.7 - https://qector.store/guillaume-lessard/2026-11-06monthly0.7 - https://qector.store/evidence/2026-11-06monthly0.8 - https://qector.store/changelog/2026-11-06weekly0.6 - https://qector.store/technical-reference/2026-11-06monthly0.5 - https://qector.store/docs/2026-11-06monthly0.5 - https://qector.store/installer/2026-11-06monthly0.5 - https://qector.store/manual/2026-11-06monthly0.5 - https://qector.store/blog/01QecFoundations/2026-11-06monthly0.6 - https://qector.store/blog/02BlossomMwpmExact/2026-11-06monthly0.6 - https://qector.store/blog/03SparseBlossomEventDriven/2026-11-06monthly0.6 - https://qector.store/blog/04FastUnionFind/2026-11-06monthly0.6 - https://qector.store/blog/05BpOsdQldpc/2026-11-06monthly0.6 - https://qector.store/blog/06AmbiguityGnnNeural/2026-11-06monthly0.6 - https://qector.store/blog/07SpaceTimeDecoder/2026-11-06monthly0.6 - https://qector.store/blog/08AutoDecoderCascade/2026-11-06monthly0.6 - https://qector.store/blog/09GpuAcceleration/2026-11-06monthly0.6 - https://qector.store/blog/10BenchmarksArchitecture/2026-11-06monthly0.6 - https://qector.store/blog/11SteaneWorkedDecode/2026-11-06monthly0.6 - https://qector.store/blog/12RotatedSurfaceD3/2026-11-06monthly0.6 - https://qector.store/blog/13DemPipeline/2026-11-06monthly0.6 - https://qector.store/blog/14WeightedDecoding/2026-11-06monthly0.6 - https://qector.store/blog/15LogicalErrorRates/2026-11-06monthly0.6 - https://qector.store/blog/16DecoderSelection/2026-11-06monthly0.6 - https://qector.store/blog/17ReproducibleBenchmarks/2026-11-06monthly0.6 - https://qector.store/blog/18RustPyo3Architecture/2026-11-06monthly0.6 - https://qector.store/blog/19ReleaseLicensing/2026-11-06monthly0.6 - https://qector.store/blog/20EcosystemIntegration/2026-11-06monthly0.6 - diff --git a/source/README.md b/source/README.md index 8384cdb6..70f9e030 100644 --- a/source/README.md +++ b/source/README.md @@ -1,8 +1,8 @@ # QECTOR - qectorlab.github.io -**Useful static bridge for QECTOR Decoder v3 (high-performance library) and QECTOR Workbench (free GUI v1.0.2, see qector.store) under the qectorlab brand.** +**Source of qector.store: QECTOR Decoder v3 (Python library, Rust core) and the free QECTOR Workbench GUI, under the qectorlab brand.** -**Current stable release: QECTOR Decoder v3 v1.0.0 — first stable release. API stability tiers, Relay-BP, CS-OSD, Sinter/qiskit entry points, qector CLI + qector-doctor, and the official reference manual (DOI 10.5281/zenodo.21941046).** +**Release numbers are not repeated here: `src/lib/releases.ts` is the single source for the decoder, Workbench and plugin versions shown on the site.** **Primary site: [qector.store](https://qector.store) for full details, licensing, commercial evaluation.** @@ -11,11 +11,11 @@ ## Quick Start ```bash pip install qector-decoder-v3 -# Free Workbench v1.0.2: https://qector.store/workbench/ +# Free Workbench: https://qector.store/workbench/ ``` ## Key Claims + Evidence (all on GitHub) -- Stable release v1.0.0: fifteen documented backend families; API stability tiers; Relay-BP, CS-OSD, LLR damping, ColourCodeDecoder, TwoStageDecoder, and AmbiguityClusterDecoder +- Stable 1.0 line: fifteen documented backend families; API stability tiers; Relay-BP, CS-OSD, LLR damping, ColourCodeDecoder, TwoStageDecoder, and AmbiguityClusterDecoder - No universal benchmark figures are published on the site, because results depend on specific hardware, drivers, and workloads - The package ships the benchmark harness (`qector bench` prints one honest, machine-conditional rate line) and `qector-doctor` (15-point environment diagnostic) so results can be reproduced on your own machines - Validation reports, SHA-256 sealed artifact manifests, and claim-boundary documentation are published on GitHub and at https://qector.store/evidence @@ -45,31 +45,45 @@ Primary source of truth: decoder repo README. This bridge has quick-start, claim |---|---| | Framework | React 19 + TypeScript, built with Vite 7 | | Routing | `react-router` v7, route-based code splitting per page | -| Styling | Tailwind CSS 3, `tailwindcss-animate` | -| UI primitives | shadcn/ui on top of Radix UI | -| Motion | GSAP + ScrollTrigger for section reveals | -| 3D / visuals | `three`, `@react-three/fiber`, `@react-three/drei` (where used) | -| Charts | Inline SVG for data visuals; `recharts` available | -| SEO | Custom `SEO` / `JsonLd` helpers in `src/lib/seo.tsx` (per-page title, description, structured data) | +| Styling | Tailwind CSS 3, `tailwindcss-animate`, `@tailwindcss/typography` | +| Icons | `lucide-react` | +| Fonts | Inter and JetBrains Mono, bundled (`@fontsource-variable/*`); no third-party font host | +| Motion | `useScrollReveal` (IntersectionObserver + Web Animations) and CSS; no animation library | +| Charts | Inline SVG | +| Blog | Markdown rendered with `react-markdown`, GFM, KaTeX | +| Static generation | Every route is rendered to HTML by React at build time (`react-dom/static`) and hydrated in the browser | +| SEO | Custom `SEO` / `JsonLd` helpers in `src/lib/seo.tsx`; per-route metadata in `src/lib/prerenderData.ts` | ## Getting started ```bash -npm install -npm run dev # local dev server with HMR -npm run build # type-check (tsc -b) + production build to dist/ +npm ci +npm run dev # local dev server with HMR +npm run typecheck # tsc -b +npm run lint # eslint +npm run build # tsc -b, production bundle, then every route rendered to static HTML in dist/ npm run preview # preview the production build locally -npm run lint # eslint +npm run check # static, browser and accessibility checks of dist/ (needs `npx playwright install chromium` once) +npm run deploy # commit dist/ to the gh-pages branch (add `-- --push` to publish) ``` -Node 18+ is recommended. The production build type-checks the whole project before bundling - a failing `tsc -b` will fail the build. +Node 22 is what the audit workflow uses. The build type-checks first: a failing `tsc -b` fails the build. It needs no browser: Playwright is only used by the checks (`npm run check`) and by `npm run og`. + +### How a page is built and loaded + +1. `vite build` bundles the site and writes one HTML file per route (`dist//index.html`, plus `404.html`). Each has the route's `` (title, description, canonical, Open Graph, JSON-LD, hreflang, and the `` tags for the route's own chunk and stylesheet) and a short summary in `#root`. Routes come from `src/App.tsx` and the blog posts; a route without an entry in `src/lib/prerenderData.ts` is a build error. `npm run build:spa` stops here. +2. `scripts/prerender.mjs` bundles `src/entry-server.tsx` for Node (a Vite SSR build) and renders every route with React itself (`prerender` from `react-dom/static`, which waits for lazy routes) at the URL the browser will have (`/pricing/`). The result replaces the summary in `#root`, marked with that URL (`data-prerendered`). It prints how many routes it rendered, and fails if a page is left with a loading state, hidden content or a script. +3. In the browser, `src/main.tsx` attaches to that HTML with `hydrateRoot`. Nothing is rendered twice, and a lazy route's static HTML stays on screen while its chunk loads. + +Three pages differ. Blog posts carry their Markdown as a JSON data block (` diff --git a/source/package-lock.json b/source/package-lock.json index 9c23136b..a0dc275d 100644 --- a/source/package-lock.json +++ b/source/package-lock.json @@ -8,59 +8,17 @@ "name": "qector-store", "version": "1.0.0", "dependencies": { - "@hookform/resolvers": "^5.2.2", - "@radix-ui/react-accordion": "^1.2.12", - "@radix-ui/react-alert-dialog": "^1.1.15", - "@radix-ui/react-aspect-ratio": "^1.1.8", - "@radix-ui/react-avatar": "^1.1.11", - "@radix-ui/react-checkbox": "^1.3.3", - "@radix-ui/react-collapsible": "^1.1.12", - "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-hover-card": "^1.1.15", - "@radix-ui/react-label": "^2.1.8", - "@radix-ui/react-menubar": "^1.1.16", - "@radix-ui/react-navigation-menu": "^1.2.14", - "@radix-ui/react-popover": "^1.1.15", - "@radix-ui/react-progress": "^1.1.8", - "@radix-ui/react-radio-group": "^1.3.8", - "@radix-ui/react-scroll-area": "^1.2.10", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-separator": "^1.1.8", - "@radix-ui/react-slider": "^1.3.6", - "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-switch": "^1.2.6", - "@radix-ui/react-tabs": "^1.1.13", - "@radix-ui/react-toggle": "^1.1.10", - "@radix-ui/react-toggle-group": "^1.1.11", - "@radix-ui/react-tooltip": "^1.2.8", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "cmdk": "^1.1.1", - "date-fns": "^4.1.0", - "embla-carousel-react": "^8.6.0", - "gsap": "^3.15.0", - "input-otp": "^1.4.2", + "@fontsource-variable/inter": "^5.3.0", + "@fontsource-variable/jetbrains-mono": "^5.3.0", "lucide-react": "^0.562.0", - "next-themes": "^0.4.6", "react": "^19.2.0", - "react-day-picker": "^9.13.0", "react-dom": "^19.2.0", - "react-hook-form": "^7.70.0", "react-markdown": "^10.1.0", - "react-resizable-panels": "^4.2.2", "react-router": "^7.6.1", "react-router-dom": "^7.6.1", "rehype-katex": "^7.0.1", - "rehype-raw": "^7.0.0", - "rehype-slug": "^6.0.0", "remark-gfm": "^4.0.1", - "remark-math": "^6.0.0", - "sonner": "^2.0.7", - "tailwind-merge": "^3.4.0", - "vaul": "^1.1.2", - "zod": "^4.3.5" + "remark-math": "^6.0.0" }, "devDependencies": { "@eslint/js": "^9.39.1", @@ -70,15 +28,16 @@ "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.1", "autoprefixer": "^10.4.23", + "axe-core": "^4.14.0", "eslint": "^9.39.1", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "globals": "^16.5.0", "kimi-plugin-inspect-react": "^1.0.3", + "playwright": "^1.65.0", "postcss": "^8.5.6", "tailwindcss": "^3.4.19", "tailwindcss-animate": "^1.0.7", - "tw-animate-css": "^1.4.0", "typescript": "~5.9.3", "typescript-eslint": "^8.46.4", "vite": "^7.2.4" @@ -1860,12 +1819,6 @@ "node": ">=6.9.0" } }, - "node_modules/@date-fns/tz": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.5.0.tgz", - "integrity": "sha512-lwYN/vDPeNRULcepoE/LO2Pgx+7/RV+S9ARfbc9lr2DtGkOD7pAiruHvbR1RX3Qyf6ja47EWJDMsNK5vK08DJg==", - "license": "MIT" - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.28.1", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", @@ -2464,1510 +2417,179 @@ "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.11" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.7.6" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", - "license": "MIT" - }, - "node_modules/@hookform/resolvers": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.4.0.tgz", - "integrity": "sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw==", - "license": "MIT", - "dependencies": { - "@standard-schema/utils": "^0.3.0" - }, - "peerDependencies": { - "react-hook-form": "^7.55.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", - "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/types": "^0.15.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", - "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.2", - "@humanfs/types": "^0.15.0", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/types": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", - "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@radix-ui/number": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.2.tgz", - "integrity": "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==", - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.5.tgz", - "integrity": "sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-accordion": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.16.tgz", - "integrity": "sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collapsible": "1.1.16", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.19.tgz", - "integrity": "sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-dialog": "1.1.19", - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.11.tgz", - "integrity": "sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-aspect-ratio": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.11.tgz", - "integrity": "sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-avatar": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.2.tgz", - "integrity": "sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-is-hydrated": "0.1.1", - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.7.tgz", - "integrity": "sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-use-size": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.16.tgz", - "integrity": "sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.12.tgz", - "integrity": "sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz", - "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.0.tgz", - "integrity": "sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context-menu": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.3.tgz", - "integrity": "sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-menu": "2.1.20", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.19.tgz", - "integrity": "sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-dismissable-layer": "1.1.15", - "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.12", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-controllable-state": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.7.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz", - "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.15.tgz", - "integrity": "sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-effect-event": "0.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.20.tgz", - "integrity": "sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-menu": "2.1.20", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.4.tgz", - "integrity": "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.12.tgz", - "integrity": "sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.19.tgz", - "integrity": "sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-dismissable-layer": "1.1.15", - "@radix-ui/react-popper": "1.3.3", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.2.tgz", - "integrity": "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-label": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.11.tgz", - "integrity": "sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.20.tgz", - "integrity": "sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.15", - "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.12", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.3", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-callback-ref": "1.1.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.7.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menubar": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.20.tgz", - "integrity": "sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-menu": "2.1.20", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.18", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.18.tgz", - "integrity": "sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.15", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.19.tgz", - "integrity": "sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-dismissable-layer": "1.1.15", - "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.12", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.3", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-controllable-state": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.7.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.3.tgz", - "integrity": "sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.11", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-use-rect": "1.1.2", - "@radix-ui/react-use-size": "1.1.2", - "@radix-ui/rect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.13.tgz", - "integrity": "sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.7.tgz", - "integrity": "sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.7.tgz", - "integrity": "sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.3.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-progress": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.12.tgz", - "integrity": "sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-radio-group": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.3.tgz", - "integrity": "sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-use-size": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.15.tgz", - "integrity": "sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-is-hydrated": "0.1.1", - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.14.tgz", - "integrity": "sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.2", - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.3.tgz", - "integrity": "sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.2", - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.15", - "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.12", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.3", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.7", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.7.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.11.tgz", - "integrity": "sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slider": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.3.tgz", - "integrity": "sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.2", - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-use-size": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.0.tgz", - "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-switch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.3.tgz", - "integrity": "sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-use-size": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.17.tgz", - "integrity": "sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + }, + "node_modules/@fontsource-variable/inter": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.3.0.tgz", + "integrity": "sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" } }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.14.tgz", - "integrity": "sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "node_modules/@fontsource-variable/jetbrains-mono": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.3.0.tgz", + "integrity": "sha512-F32xpS2NsGYoQi2ADSkKTgpJj7ozajsGgDJ8woTnqjmIB+dxDIqImjl4pXZVEExu8UFZ2ndhmX18EBS/hdz3Lw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" } }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.15.tgz", - "integrity": "sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==", - "license": "MIT", + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-toggle": "1.1.14", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@humanfs/types": "^0.15.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.12.tgz", - "integrity": "sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==", - "license": "MIT", + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-dismissable-layer": "1.1.15", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.3", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.7", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-visually-hidden": "1.2.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz", - "integrity": "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.3.tgz", - "integrity": "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.3", - "@radix-ui/react-use-layout-effect": "1.1.2" + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.3.tgz", - "integrity": "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.1.tgz", - "integrity": "sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", - "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.2.tgz", - "integrity": "sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.2.tgz", - "integrity": "sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/rect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.2.tgz", - "integrity": "sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.7.tgz", - "integrity": "sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/rect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.2.tgz", - "integrity": "sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==", - "license": "MIT" - }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", @@ -4324,21 +2946,6 @@ "win32" ] }, - "node_modules/@standard-schema/utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", - "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", - "license": "MIT" - }, - "node_modules/@tabby_ai/hijri-converter": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", - "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", - "license": "MIT", - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@tailwindcss/typography": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.20.tgz", @@ -4495,7 +3102,7 @@ "version": "19.2.3", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peerDependencies": { "@types/react": "^19.2.0" @@ -4508,17 +3115,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz", - "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.72.2.tgz", + "integrity": "sha512-222PKFXKihmFpi/pS5njoBgdAqsPhj2/GBmFbrNw8Tq8gEG9Sv+kSlKFy4u2q+mJv9ZzJgM2Gkv/bUzRZwZw5g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/type-utils": "8.63.0", - "@typescript-eslint/utils": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/scope-manager": "8.72.2", + "@typescript-eslint/type-utils": "8.72.2", + "@typescript-eslint/utils": "8.72.2", + "@typescript-eslint/visitor-keys": "8.72.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -4531,15 +3138,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.63.0", + "@typescript-eslint/parser": "^8.72.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", - "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.14.tgz", + "integrity": "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==", "dev": true, "license": "MIT", "engines": { @@ -4547,16 +3154,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz", - "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.72.2.tgz", + "integrity": "sha512-llP+T1YuJOLlxEciP6OyQGtz5SMxyn+9LA2BvZw5RmToGVa1y4beEDVQL6Gje7T5WFYh19WREjDCN9Ev4gm5AA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/scope-manager": "8.72.2", + "@typescript-eslint/types": "8.72.2", + "@typescript-eslint/typescript-estree": "8.72.2", + "@typescript-eslint/visitor-keys": "8.72.2", "debug": "^4.4.3" }, "engines": { @@ -4572,14 +3179,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz", - "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.72.2.tgz", + "integrity": "sha512-6y5dLTZdHhI8Eh3yIQ/bfQhRKwn5e+TpJj64o18Cngc0iW/BCrVvrr6zGYqXPnYH31u6YXAYiFh0+qxX5mybJw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.63.0", - "@typescript-eslint/types": "^8.63.0", + "@typescript-eslint/tsconfig-utils": "^8.72.2", + "@typescript-eslint/types": "^8.72.2", "debug": "^4.4.3" }, "engines": { @@ -4594,14 +3201,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz", - "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.72.2.tgz", + "integrity": "sha512-iIoMJ6/8c1/QpFNyFjU0d1YzPco4MsZjQw0k3V+vfzNWAFmUmvhlyMoYEoYYDQZXc+J6Gi1X5XcxlzW2taIIGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0" + "@typescript-eslint/types": "8.72.2", + "@typescript-eslint/visitor-keys": "8.72.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4612,9 +3219,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz", - "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.72.2.tgz", + "integrity": "sha512-+h3iCgZXuTNtoLXcnnjP12ZUHLMqoUcIHPfQrFEXTUqvb9dF8QK9b5nv5VtSo5fLkdHuks8ehbTzZj3rImAm9w==", "dev": true, "license": "MIT", "engines": { @@ -4629,15 +3236,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz", - "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.72.2.tgz", + "integrity": "sha512-STfkR38qIdhfkLpgtXnUjAzsNy4xouqiBO0lrVc/Wpk9Kem5/aHXUx1J8dGC16zpdYN1+yc2ILQ28er1kXX7ag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/utils": "8.63.0", + "@typescript-eslint/types": "8.72.2", + "@typescript-eslint/typescript-estree": "8.72.2", + "@typescript-eslint/utils": "8.72.2", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -4654,9 +3261,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz", - "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.72.2.tgz", + "integrity": "sha512-Xfn37OLZx03+PCU7qWx9DTv2FCRh1E6fk2+wONeNY15HXIwtcwuveaSwVpGAUptkNmPQegRxW5JyRel9T7wrog==", "dev": true, "license": "MIT", "engines": { @@ -4668,16 +3275,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz", - "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.72.2.tgz", + "integrity": "sha512-pQEGqIK/cqEvKivVWaFLYpe7XYejFxfuAOi4mu1oAWFvIo36aRHI9esRFTUxcIy/z8N482RJyH+LpZB0ZIU7Ow==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.63.0", - "@typescript-eslint/tsconfig-utils": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/project-service": "8.72.2", + "@typescript-eslint/tsconfig-utils": "8.72.2", + "@typescript-eslint/types": "8.72.2", + "@typescript-eslint/visitor-keys": "8.72.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -4706,9 +3313,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4719,13 +3326,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.5" + "brace-expansion": "^5.0.8" }, "engines": { "node": "18 || 20 || >=22" @@ -4735,9 +3342,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.6.tgz", + "integrity": "sha512-9lpSSU4Mly3mrtruwLs1eLK6+gzbzqeBFwRNjIjE+9LuDpWdYctrQlQ3ej1Ilgi7gknpsTRnPoLP8DpCHqHIJw==", "dev": true, "license": "ISC", "bin": { @@ -4748,16 +3355,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz", - "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.72.2.tgz", + "integrity": "sha512-hv3eRYbpPbbpezuax1EfGrzpa3C4ySgNZkPUkLOWOAjU8HsOKowEDAr8C7nsNl1C+SBSKDpvno6VKHnlhvp9iA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0" + "@typescript-eslint/scope-manager": "8.72.2", + "@typescript-eslint/types": "8.72.2", + "@typescript-eslint/typescript-estree": "8.72.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4772,13 +3379,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz", - "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.72.2.tgz", + "integrity": "sha512-NAGrjn0Pitjqzq/GkgMC4kBYm233PQ8GffyQ9+kTA3AlNQYEzOf25EIM02BAHZv5FRJSpHpJk+OGUxVkOB93GQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/types": "8.72.2", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -4920,18 +3527,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/autoprefixer": { "version": "10.5.2", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.2.tgz", @@ -4969,6 +3564,16 @@ "postcss": "^8.1.0" } }, + "node_modules/axe-core": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.14.0.tgz", + "integrity": "sha512-9WTZxEjsZ7b13TH8JPmbV2z8CHbl80/2hm3XPEG4JgNdQLK81IBRXmSxHfMAOkSqQeRxT/0dwNDz2GOm3zzpcQ==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", @@ -5029,9 +3634,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.42", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", - "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "version": "2.11.35", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.35.tgz", + "integrity": "sha512-GNk8KX52CHqeNKGk8+7tZnQab/2k1t/BgrUHPKNdijzpEhF1saPQZHVKb6m5loSAxB39gyrTYw34Qf9CQ3u1qQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5055,9 +3660,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "dev": true, "license": "MIT", "dependencies": { @@ -5079,9 +3684,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", - "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.5.tgz", + "integrity": "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ==", "dev": true, "funding": [ { @@ -5099,11 +3704,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.42", - "caniuse-lite": "^1.0.30001800", - "electron-to-chromium": "^1.5.387", - "node-releases": "^2.0.50", - "update-browserslist-db": "^1.2.3" + "baseline-browser-mapping": "^2.11.33", + "caniuse-lite": "^1.0.30001819", + "electron-to-chromium": "^1.5.464", + "node-releases": "^2.0.60", + "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" @@ -5133,9 +3738,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001803", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", - "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", + "version": "1.0.30001823", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001823.tgz", + "integrity": "sha512-TQ5s/djDjNk1axreUW+4rULH+BmdCMLiJkhaXnO5wqivG7tITkSUj4ItIdzqdZHKaXcHAV8dhH3JxOM7/7bwqw==", "dev": true, "funding": [ { @@ -5258,43 +3863,6 @@ "node": ">= 6" } }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cmdk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", - "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "^1.1.1", - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-id": "^1.1.0", - "@radix-ui/react-primitive": "^2.0.2" - }, - "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "react-dom": "^18 || ^19 || ^19.0.0-rc" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5407,23 +3975,7 @@ "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/date-fns": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", - "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" - } - }, - "node_modules/date-fns-jalali": { - "version": "4.1.0-0", - "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", - "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/debug": { @@ -5472,12 +4024,6 @@ "node": ">=6" } }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -5506,40 +4052,12 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.389", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", - "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "version": "1.5.481", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.481.tgz", + "integrity": "sha512-dNUsbAP6E2S1dHIYEuN3cQ0dViThjMtpVRheGdvv5HgHFtzLi4Cu4Mbzms85YggP3Eh2VVZTl5+XxEN8ofCbmQ==", "dev": true, "license": "ISC" }, - "node_modules/embla-carousel": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", - "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", - "license": "MIT" - }, - "node_modules/embla-carousel-react": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", - "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", - "license": "MIT", - "dependencies": { - "embla-carousel": "8.6.0", - "embla-carousel-reactive-utils": "8.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/embla-carousel-reactive-utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", - "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", - "license": "MIT", - "peerDependencies": { - "embla-carousel": "8.6.0" - } - }, "node_modules/entities": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", @@ -6001,21 +4519,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "license": "ISC" - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -6042,12 +4545,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gsap": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.15.0.tgz", - "integrity": "sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==", - "license": "Standard 'no charge' license: https://gsap.com/standard-license." - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6140,19 +4637,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-heading-rank": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", - "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-is-element": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", @@ -6179,31 +4663,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-to-jsx-runtime": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", @@ -6231,38 +4690,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", - "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-string": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", - "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-to-text": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", @@ -6336,16 +4763,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -6389,16 +4806,6 @@ "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", "license": "MIT" }, - "node_modules/input-otp": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", - "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" - } - }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -6542,9 +4949,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { @@ -7742,20 +6149,10 @@ "dev": true, "license": "MIT" }, - "node_modules/next-themes": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", - "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, "node_modules/node-releases": { - "version": "2.0.51", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", - "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "version": "2.0.63", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.63.tgz", + "integrity": "sha512-6li2QanLsAXpIH2R6j77MzRyvOyrvdTqlKtO4CgBdHGNvN99ZZfyxszHc5o5+IZBWD5u6Hzwg83JoGXmqZNG9Q==", "dev": true, "license": "MIT", "engines": { @@ -7959,6 +6356,35 @@ "node": ">= 6" } }, + "node_modules/playwright": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.65.0.tgz", + "integrity": "sha512-F3AMWcR44qMBt4kq+6Kb6mX7bjGXshktKFOPULd7reED6ZJWevjbNRqysP7q+AATE9kdPEZBibex1BYsvpVoeA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.65.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.65.0.tgz", + "integrity": "sha512-vNSKgH6YqtN7cdT/L334zo0a+YwkrpicyrHJlWWPIm/Q+Nn2SWInil01oT0mbu96U4GgoRtCYQD9CzJQgju+lA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/postcss": { "version": "8.5.26", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", @@ -8102,13 +6528,12 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", - "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.6.tgz", + "integrity": "sha512-BK87/Qgti3DIcgS2PaCVoteFIkjIFvCJBizZDIVSjdlFNg4Jv+SRqbN2JONb/qQUH4ZFqfXYF+izg15W2HVRvA==", "dev": true, "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" }, "engines": { @@ -8182,28 +6607,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-day-picker": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", - "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", - "license": "MIT", - "dependencies": { - "@date-fns/tz": "^1.4.1", - "@tabby_ai/hijri-converter": "1.0.5", - "date-fns": "^4.1.0", - "date-fns-jalali": "4.1.0-0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/gpbl" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, "node_modules/react-dom": { "version": "19.2.7", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", @@ -8216,22 +6619,6 @@ "react": "^19.2.7" } }, - "node_modules/react-hook-form": { - "version": "7.81.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.81.0.tgz", - "integrity": "sha512-ocbmr2p5KBMoAfj4WCUvped33lVi1Kd5DuDUvQDnB6VEAacOjPI/jMbtDdbhco4y9ct4xUuCmMY0b/C9L0QHjw==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" - } - }, "node_modules/react-markdown": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", @@ -8269,67 +6656,10 @@ "node": ">=0.10.0" } }, - "node_modules/react-remove-scroll": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", - "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-resizable-panels": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.12.1.tgz", - "integrity": "sha512-ElE/UpOvMLRWtAqbCgyizHXcbws8RPMyN3cBqmdY17Nxr5f01+DEwzOLqhgcy68GSnjtIUFgKWKl8aIgx5aypQ==", - "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, "node_modules/react-router": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.1.tgz", - "integrity": "sha512-hPJXXxHJZEsPFNVbtATH7+MMX43UDeOauz+EAU4cgqTn7ojdI9qQORqS8Z0qmDlL1TclO/6jLRYUEtbWidtdHQ==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.5.tgz", + "integrity": "sha512-dTgvcXDOrLPrlLHrcZAqWveiK1hMSqN+rGAJzegP8HtmNkfRxOoshGWBNX3ZJ0cZjOHkRdlUJtaIhZMLLyGyPw==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -8349,12 +6679,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.1.tgz", - "integrity": "sha512-vxU7ei//UfPYQ3iZvHuO1D/5fX3/JOqhNTbRR+WjSBWxf9bIvpWK+ftjmdfJHzPOuMQKe2fiEdG+dZX6E8uUpA==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.5.tgz", + "integrity": "sha512-9HcfDMU6JJ/fp6gJZYGwNE6RknVGS4kBjH1HkNw959mCJi70TVwdipQWv2FEol9uGpi+SZTFtVpJPtEQfayeOw==", "license": "MIT", "dependencies": { - "react-router": "7.6.1" + "react-router": "7.18.5" }, "engines": { "node": ">=20.0.0" @@ -8364,28 +6694,6 @@ "react-dom": ">=18" } }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -8486,38 +6794,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-slug": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", - "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "github-slugger": "^2.0.0", - "hast-util-heading-rank": "^3.0.0", - "hast-util-to-string": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-gfm": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", @@ -8757,20 +7033,10 @@ "node": ">=8" } }, - "node_modules/sonner": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", - "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", - "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8881,16 +7147,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tailwind-merge": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", - "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, "node_modules/tailwindcss": { "version": "3.4.19", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", @@ -9063,22 +7319,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tw-animate-css": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", - "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Wombosvideo" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9107,16 +7347,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.63.0.tgz", - "integrity": "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==", + "version": "8.72.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.72.2.tgz", + "integrity": "sha512-c/+AKMW1KB81r28Sp0AAdcyXj5dzNmAsZFcsrxKbZTKmcBK2xIwBR31dcSYSDu3bKmzXe8GKrSxO+eDQ401Uzg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.63.0", - "@typescript-eslint/parser": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/utils": "8.63.0" + "@typescript-eslint/eslint-plugin": "8.72.2", + "@typescript-eslint/parser": "8.72.2", + "@typescript-eslint/typescript-estree": "8.72.2", + "@typescript-eslint/utils": "8.72.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9297,9 +7537,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", "dev": true, "funding": [ { @@ -9337,49 +7577,6 @@ "punycode": "^2.1.0" } }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -9387,19 +7584,6 @@ "dev": true, "license": "MIT" }, - "node_modules/vaul": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", - "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-dialog": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" - } - }, "node_modules/vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", @@ -9443,9 +7627,9 @@ } }, "node_modules/vite": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", - "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.8.tgz", + "integrity": "sha512-3tTi78MAKhVk9h+YZVXMQ8POmneJuE97QUPAWtJghHzhH7BAyiqQOC2KZh1DWOsu/USB2cRXhznPByaabvYXfw==", "dev": true, "license": "MIT", "dependencies": { @@ -9605,9 +7789,10 @@ } }, "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz", + "integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/source/package.json b/source/package.json index 03baf06f..96b34493 100644 --- a/source/package.json +++ b/source/package.json @@ -5,66 +5,30 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build && node scripts/prerender-full.mjs dist", + "build": "tsc -b && vite build && node scripts/prerender.mjs", "lint": "eslint .", "preview": "vite preview", - "build:spa": "vite build", - "og": "vite build && node scripts/og-images.mjs" + "build:spa": "tsc -b && vite build", + "og": "vite build && node scripts/og-images.mjs", + "typecheck": "tsc -b", + "deploy": "node scripts/deploy-pages.mjs", + "check:static": "node tests/static-check.mjs", + "check:browser": "node tests/browser-check.mjs", + "check": "npm run check:static && npm run check:browser && npm run check:a11y", + "check:a11y": "node tests/a11y-check.mjs" }, "dependencies": { - "@hookform/resolvers": "^5.2.2", - "@radix-ui/react-accordion": "^1.2.12", - "@radix-ui/react-alert-dialog": "^1.1.15", - "@radix-ui/react-aspect-ratio": "^1.1.8", - "@radix-ui/react-avatar": "^1.1.11", - "@radix-ui/react-checkbox": "^1.3.3", - "@radix-ui/react-collapsible": "^1.1.12", - "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-hover-card": "^1.1.15", - "@radix-ui/react-label": "^2.1.8", - "@radix-ui/react-menubar": "^1.1.16", - "@radix-ui/react-navigation-menu": "^1.2.14", - "@radix-ui/react-popover": "^1.1.15", - "@radix-ui/react-progress": "^1.1.8", - "@radix-ui/react-radio-group": "^1.3.8", - "@radix-ui/react-scroll-area": "^1.2.10", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-separator": "^1.1.8", - "@radix-ui/react-slider": "^1.3.6", - "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-switch": "^1.2.6", - "@radix-ui/react-tabs": "^1.1.13", - "@radix-ui/react-toggle": "^1.1.10", - "@radix-ui/react-toggle-group": "^1.1.11", - "@radix-ui/react-tooltip": "^1.2.8", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "cmdk": "^1.1.1", - "date-fns": "^4.1.0", - "embla-carousel-react": "^8.6.0", - "gsap": "^3.15.0", - "input-otp": "^1.4.2", + "@fontsource-variable/inter": "^5.3.0", + "@fontsource-variable/jetbrains-mono": "^5.3.0", "lucide-react": "^0.562.0", - "next-themes": "^0.4.6", "react": "^19.2.0", - "react-day-picker": "^9.13.0", "react-dom": "^19.2.0", - "react-hook-form": "^7.70.0", "react-markdown": "^10.1.0", - "react-resizable-panels": "^4.2.2", "react-router": "^7.6.1", "react-router-dom": "^7.6.1", "rehype-katex": "^7.0.1", - "rehype-raw": "^7.0.0", - "rehype-slug": "^6.0.0", "remark-gfm": "^4.0.1", - "remark-math": "^6.0.0", - "sonner": "^2.0.7", - "tailwind-merge": "^3.4.0", - "vaul": "^1.1.2", - "zod": "^4.3.5" + "remark-math": "^6.0.0" }, "devDependencies": { "@eslint/js": "^9.39.1", @@ -74,15 +38,16 @@ "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.1", "autoprefixer": "^10.4.23", + "axe-core": "^4.14.0", "eslint": "^9.39.1", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "globals": "^16.5.0", "kimi-plugin-inspect-react": "^1.0.3", + "playwright": "^1.65.0", "postcss": "^8.5.6", "tailwindcss": "^3.4.19", "tailwindcss-animate": "^1.0.7", - "tw-animate-css": "^1.4.0", "typescript": "~5.9.3", "typescript-eslint": "^8.46.4", "vite": "^7.2.4" diff --git a/source/postcss.config.js b/source/postcss.config.js index ee87759f..2e7af2b7 100644 --- a/source/postcss.config.js +++ b/source/postcss.config.js @@ -1,4 +1,4 @@ -export default { +export default { plugins: { tailwindcss: {}, autoprefixer: {}, diff --git a/source/public/.well-known/agent-skills/index.json b/source/public/.well-known/agent-skills/index.json index 46123249..237c0e82 100644 --- a/source/public/.well-known/agent-skills/index.json +++ b/source/public/.well-known/agent-skills/index.json @@ -1 +1 @@ -{"$schema":"https://agentskills.io/schemas/skills-index-v0.2.0.json","skills":[{"name":"QECTOR install guidance","type":"text/markdown","description":"Explain how to install and verify QECTOR Decoder 3 from PyPI.","url":"https://qector.store/.well-known/agent-skills/qector-install.md","sha256":"00b4b9d12be0914ab9f8a68cb7a1b5ebb79ac57f63582149541e54a5c78df7a7"},{"name":"QECTOR commercial licensing","type":"text/markdown","description":"Route commercial QECTOR licensing and source-review inquiries to the correct path.","url":"https://qector.store/.well-known/agent-skills/qector-commercial-licensing.md","sha256":"02ada38eacf33ee7e4521b38989a2af83f178fa5c76ddb106cb4d515f3fd4ec3"}]} +{"$schema":"https://agentskills.io/schemas/skills-index-v0.2.0.json","skills":[{"name":"QECTOR install guidance","type":"text/markdown","description":"Explain how to install and verify QECTOR Decoder 3 from PyPI.","url":"https://qector.store/.well-known/agent-skills/qector-install.md","sha256":"2eae55a1e89ef311db8818c6ba1cdc9b2b25288c35f22ee11e873874931282ca"},{"name":"QECTOR commercial licensing","type":"text/markdown","description":"Route commercial QECTOR licensing and source-review inquiries to the correct path.","url":"https://qector.store/.well-known/agent-skills/qector-commercial-licensing.md","sha256":"4cdd859e54505369b26ee37e037ab20569c019de46b5a149d1af0f9a30c3be35"}]} \ No newline at end of file diff --git a/source/public/.well-known/agent-skills/qector-commercial-licensing.md b/source/public/.well-known/agent-skills/qector-commercial-licensing.md index 8a657e15..07c226f1 100644 --- a/source/public/.well-known/agent-skills/qector-commercial-licensing.md +++ b/source/public/.well-known/agent-skills/qector-commercial-licensing.md @@ -7,5 +7,5 @@ https://qector.store/contact Rules: - Personal, academic, educational and non-commercial research use may be free under the license. -- Commercial use requires written permission. -- For pilots, labs, startups, OEM, SaaS, redistribution or source review, route the user to the contact form. +- Commercial use requires a paid plan. Pro, Pro Perpetual, Lab and the 60-day Pilot are self-serve: plans, prices and checkout are at https://qector.store/pricing, under the Commercial Licence Agreement at https://qector.store/license-agreement/. +- For Enterprise, OEM, SaaS, hosted API, redistribution or source review, route the user to the contact form. diff --git a/source/public/.well-known/agent-skills/qector-install.md b/source/public/.well-known/agent-skills/qector-install.md index 4245c515..26b4b4c8 100644 --- a/source/public/.well-known/agent-skills/qector-install.md +++ b/source/public/.well-known/agent-skills/qector-install.md @@ -12,5 +12,5 @@ python -c "from qector_decoder_v3 import UnionFindDecoder, BlossomDecoder; print Rules: - Use the PyPI wheel as the normal public install path. - Do not recommend source builds as the primary public path. -- Mention standard CPython 3.9 to 3.13. +- Mention standard CPython 3.9 to 3.14. - If Windows uses a free-threaded Python such as cp313t, tell the user to use normal CPython. diff --git a/source/public/.well-known/api-catalog.json b/source/public/.well-known/api-catalog.json index 2918de4f..17fb360e 100644 --- a/source/public/.well-known/api-catalog.json +++ b/source/public/.well-known/api-catalog.json @@ -1 +1 @@ -{"linkset":[{"anchor":"https://qector.store","service-desc":[{"href":"https://qector.store/openapi.json","type":"application/vnd.oai.openapi+json"}],"service-doc":[{"href":"https://qector.store/docs","type":"text/html"}],"status":[{"href":"https://qector.store/health.json","type":"application/json"}],"alternate":[{"href":"https://qector.store/llms.txt","type":"text/plain"},{"href":"https://qector.store/llms-full.txt","type":"text/plain"}]}]} +{"linkset":[{"anchor":"https://qector.store","service-doc":[{"href":"https://qector.store/docs","type":"text/html"}],"status":[{"href":"https://qector.store/health.json","type":"application/json"}],"alternate":[{"href":"https://qector.store/llms.txt","type":"text/plain"},{"href":"https://qector.store/llms-full.txt","type":"text/plain"}]}]} \ No newline at end of file diff --git a/source/public/.well-known/mcp.json b/source/public/.well-known/mcp.json index e2aca418..319873e8 100644 --- a/source/public/.well-known/mcp.json +++ b/source/public/.well-known/mcp.json @@ -1 +1 @@ -{"serverInfo":{"name":"QECTOR Store Discovery","version":"0.1.0","description":"Discovery card for QECTOR Decoder v3 public website resources."},"transport":{"type":"none","description":"No remote MCP tool transport is exposed by this static public site."},"capabilities":{"tools":[],"resources":[{"name":"QECTOR documentation","uri":"https://qector.store/docs","mimeType":"text/html"},{"name":"QECTOR install guide","uri":"https://qector.store/installer","mimeType":"text/html"},{"name":"QECTOR LLM summary","uri":"https://qector.store/llms.txt","mimeType":"text/plain"}]},"contact":"https://qector.store/contact"} +{"serverInfo":{"name":"QECTOR Store Discovery","version":"1.0.0","description":"Discovery card for QECTOR Decoder v3 public website resources."},"transport":{"type":"none","description":"No remote MCP tool transport is exposed by this static public site."},"capabilities":{"tools":[],"resources":[{"name":"QECTOR documentation","uri":"https://qector.store/docs/","mimeType":"text/html"},{"name":"QECTOR install guide","uri":"https://qector.store/installer/","mimeType":"text/html"},{"name":"QECTOR evidence registry","uri":"https://qector.store/evidence/","mimeType":"text/html"},{"name":"QECTOR LLM summary","uri":"https://qector.store/llms.txt","mimeType":"text/plain"}]},"contact":"https://qector.store/contact/"} \ No newline at end of file diff --git a/source/public/.well-known/skills/index.json b/source/public/.well-known/skills/index.json index 46123249..237c0e82 100644 --- a/source/public/.well-known/skills/index.json +++ b/source/public/.well-known/skills/index.json @@ -1 +1 @@ -{"$schema":"https://agentskills.io/schemas/skills-index-v0.2.0.json","skills":[{"name":"QECTOR install guidance","type":"text/markdown","description":"Explain how to install and verify QECTOR Decoder 3 from PyPI.","url":"https://qector.store/.well-known/agent-skills/qector-install.md","sha256":"00b4b9d12be0914ab9f8a68cb7a1b5ebb79ac57f63582149541e54a5c78df7a7"},{"name":"QECTOR commercial licensing","type":"text/markdown","description":"Route commercial QECTOR licensing and source-review inquiries to the correct path.","url":"https://qector.store/.well-known/agent-skills/qector-commercial-licensing.md","sha256":"02ada38eacf33ee7e4521b38989a2af83f178fa5c76ddb106cb4d515f3fd4ec3"}]} +{"$schema":"https://agentskills.io/schemas/skills-index-v0.2.0.json","skills":[{"name":"QECTOR install guidance","type":"text/markdown","description":"Explain how to install and verify QECTOR Decoder 3 from PyPI.","url":"https://qector.store/.well-known/agent-skills/qector-install.md","sha256":"2eae55a1e89ef311db8818c6ba1cdc9b2b25288c35f22ee11e873874931282ca"},{"name":"QECTOR commercial licensing","type":"text/markdown","description":"Route commercial QECTOR licensing and source-review inquiries to the correct path.","url":"https://qector.store/.well-known/agent-skills/qector-commercial-licensing.md","sha256":"4cdd859e54505369b26ee37e037ab20569c019de46b5a149d1af0f9a30c3be35"}]} \ No newline at end of file diff --git a/source/public/_headers b/source/public/_headers index 1edc0629..d396d033 100644 --- a/source/public/_headers +++ b/source/public/_headers @@ -4,15 +4,19 @@ # or booking. # # CSP third-party allowances, and why each is required: -# js.stripe.com : Stripe buy-button script on /pricing -# assets.calendly.com : Calendly inline embed loader +# assets.calendly.com : Calendly inline embed loader (script and its CSS) # calendly.com : the Calendly booking iframe itself (frame-src) -# fonts.googleapis.com / fonts.gstatic.com : webfont CSS + font files -# The previous policy allowed only 'self' plus one inline hash, which would have -# blocked the Stripe button and the Calendly widget outright. +# cloudflareinsights : Cloudflare Web Analytics beacon +# pypi.org : latest-version lookup (footer, Status page) +# *.stripe.com : form-action only. Checkout and the billing portal are +# plain links; no Stripe script or frame is embedded. +# Fonts are bundled with the site, so no font host is listed. # # frame-src must be stated explicitly: it falls back to default-src ('self'), -# so without it the Calendly and Stripe iframes are refused. +# so without it the Calendly iframe is refused. +# +# Keep this file and workers/qector-headers/src/index.js identical: the Worker +# is what enforces the policy while the site is served from GitHub Pages. /* Strict-Transport-Security: max-age=31536000; includeSubDomains; preload @@ -27,11 +31,17 @@ Origin-Agent-Cluster: ?1 Referrer-Policy: strict-origin-when-cross-origin Permissions-Policy: accelerometer=(), ambient-light-sensor=(), autoplay=(self), camera=(), clipboard-read=(), clipboard-write=(self), document-domain=(), encrypted-media=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(self), usb=(), xr-spatial-tracking=() - Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; upgrade-insecure-requests; manifest-src 'self'; worker-src 'self' blob:; script-src 'self' 'sha256-47Y7xRUIVXITmosjladRK60OPYEE3BWeBiiCmfU0d8s=' 'sha256-2yoLb9krKtf6JSNKI8iic50UCBKaIgBtSuqyekQ5HtA=' https://js.stripe.com https://assets.calendly.com https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://assets.calendly.com; img-src 'self' data: https://files.stripe.com; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self' https://cloudflareinsights.com https://api.stripe.com https://js.stripe.com https://api.calendly.com https://calendly.com https://pypi.org; frame-src https://js.stripe.com https://checkout.stripe.com https://hooks.stripe.com https://calendly.com; frame-ancestors 'none'; form-action 'self' https://buy.stripe.com https://checkout.stripe.com https://billing.stripe.com; media-src 'self' blob: + Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; upgrade-insecure-requests; manifest-src 'self'; worker-src 'self' blob:; script-src 'self' 'sha256-47Y7xRUIVXITmosjladRK60OPYEE3BWeBiiCmfU0d8s=' 'sha256-2yoLb9krKtf6JSNKI8iic50UCBKaIgBtSuqyekQ5HtA=' https://assets.calendly.com https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline' https://assets.calendly.com; img-src 'self' data:; font-src 'self' data:; connect-src 'self' https://cloudflareinsights.com https://api.calendly.com https://calendly.com https://pypi.org; frame-src https://calendly.com; frame-ancestors 'none'; form-action 'self' https://buy.stripe.com https://checkout.stripe.com https://billing.stripe.com; media-src 'self' blob: Cache-Control: public, max-age=0, must-revalidate /assets/* Cache-Control: public, max-age=31536000, immutable +/images/* + Cache-Control: public, max-age=86400, stale-while-revalidate=604800 + +/og/* + Cache-Control: public, max-age=86400, stale-while-revalidate=604800 + /.well-known/* Cache-Control: public, max-age=0, must-revalidate diff --git a/source/public/blog/02_blossom_mwpm_exact.md b/source/public/blog/02_blossom_mwpm_exact.md index 45259733..d6cbf2fe 100644 --- a/source/public/blog/02_blossom_mwpm_exact.md +++ b/source/public/blog/02_blossom_mwpm_exact.md @@ -143,7 +143,7 @@ $$ c + e \in \operatorname{im}(H^T). $$ -The v1.0.0 changelog anchors comparisons the way the manual requires: its 120-test LER suite on the distance-3 repetition code at `p = 0.01` reports `ler_qector = 0.00392` against `ler_pymatching = 0.00317`, inside the documented 4.5x margin. Any public comparison should still name the code family, distance, rounds, noise model, DEM settings, decoder mode, shots, seed, environment, and raw artifact. The manual intentionally excludes hardware-bound latency and throughput figures. +The v1.0.0 changelog anchors comparisons the way the manual requires: its 120-test LER suite on the distance-3 repetition code at `p = 0.01` reports, over 12 000 seeded shots, `ler_qector_blossom = 0.00392` against `ler_pymatching = 0.00317`: a delta of 0.00075, inside the suite's `+1e-3` gate (source: [decoder CHANGELOG, section 1.0.0](https://github.com/GuillaumeLessard/qector-decoder/blob/main/CHANGELOG.md)). Any public comparison should still name the code family, distance, rounds, noise model, DEM settings, decoder mode, shots, seed, environment, and raw artifact. The manual intentionally excludes hardware-bound latency and throughput figures. ## Takeaway diff --git a/source/public/blog/05_bp_osd_qldpc.md b/source/public/blog/05_bp_osd_qldpc.md index cf78125e..e9811e17 100644 --- a/source/public/blog/05_bp_osd_qldpc.md +++ b/source/public/blog/05_bp_osd_qldpc.md @@ -119,7 +119,7 @@ The division of labour is: The manual records two check-node rules, exact sum-product and min-sum, plus a relay schedule. The Rust implementation evaluates the box-plus function exactly in a small range and uses a tabulated interpolation path over a larger range. The relevant evidence is numerical-stability testing, not a universal floating-point guarantee across arbitrary hardware. -On the Python surface, `BPOSDDecoder` exposes `bp_method` ("relay" selects the layered schedule) and an adjustable `osd_lambda`. The batch path can run BP over a batch on a usable GPU and send only non-converged shots through the exact GF(2) post-process. Two bounds apply: the published 1.0.0 wheels are CPU-only, so GPU paths are build-time feature gates whose runtime availability is reported by `cuda_is_available()`; and without a usable device the batch path falls back to NumPy with the same validity contract. The single-shot path is CPU-oriented because a GPU launch is not assumed to amortize for one syndrome. +On the Python surface, `BpOsdDecoder` exposes `bp_method` ("relay" selects the layered schedule) and an adjustable `osd_lambda`. The batch path can run BP over a batch on a usable GPU and send only non-converged shots through the exact GF(2) post-process. Two bounds apply: the published 1.0.0 wheels are CPU-only, so GPU paths are build-time feature gates whose runtime availability is reported by `cuda_is_available()`; and without a usable device the batch path falls back to NumPy with the same validity contract. The single-shot path is CPU-oriented because a GPU launch is not assumed to amortize for one syndrome. ## 7. Complexity language that stays honest diff --git a/source/public/blog/07_space_time_decoder.md b/source/public/blog/07_space_time_decoder.md index 4bb466a4..a4ddff23 100644 --- a/source/public/blog/07_space_time_decoder.md +++ b/source/public/blog/07_space_time_decoder.md @@ -100,7 +100,7 @@ These names describe different scopes: For a decayed window, the manual gives a geometric truncation bound. If `0 <= lambda < 1`, $$ -\|S_W-S_{infty}\|_1 \leq \frac{\lambda^W}{1-\lambda}\|s\|_{infty}. +\|S_W-S_{\infty}\|_1 \leq \frac{\lambda^W}{1-\lambda}\|s\|_{\infty}. $$ The expression describes the history approximation. It does not by itself establish a numerical logical-fidelity loss or a hardware-control guarantee. diff --git a/source/public/blog/08_autodecoder_cascade.md b/source/public/blog/08_autodecoder_cascade.md index 2447be39..fd349d00 100644 --- a/source/public/blog/08_autodecoder_cascade.md +++ b/source/public/blog/08_autodecoder_cascade.md @@ -118,6 +118,8 @@ This record makes a routing decision explainable. It also prevents an accidental The manual documents Community, Pro, and Enterprise distance caps of 7, 19, and 63, with GPU batch paths gated by Enterprise. Token verification is offline, performed in the Rust core, using Ed25519. `is_available()` reports hardware; it does not grant a license tier. These are separate decisions and should stay separate in diagnostics and documentation. +> **Update (1.0.1), November 2026:** every paid licence, Pro or Enterprise, unlocks GPU batch decoding. + License input is explicit: keys arrive through `set_license_key()` (read back with `get_license_info()`), through the `QECTOR_LICENSE_KEY` or `QECTOR_LICENSE_FILE` environment variables, or through `~/.qector/license.key`. `QECTOR_ENFORCE=1` and `QECTOR_SILENT=1` control strictness and banner output. ## 9. The right claim about orchestration diff --git a/source/public/blog/09_gpu_acceleration.md b/source/public/blog/09_gpu_acceleration.md index f4b3e930..2f0f19aa 100644 --- a/source/public/blog/09_gpu_acceleration.md +++ b/source/public/blog/09_gpu_acceleration.md @@ -80,6 +80,8 @@ The same distinction applies to `CUDABpOsdDecoder`. It is a batched qLDPC path; `is_available()` answers whether the local runtime can see the relevant hardware. It does not answer whether the caller is licensed to construct the decoder. The v1.0.0 tier table documents GPU-enabled paths under the Enterprise tier, while distance caps are enforced in the Rust core. +> **Update (1.0.1), November 2026:** every paid licence, Pro or Enterprise, unlocks GPU batch decoding. + The published v1.0.0 wheels are CPU-only: 15 wheels on PyPI (CPython 3.9 through 3.13; Windows x86_64, manylinux x86_64, macOS arm64) with no CUDA binary inside (verified: each wheel carries a single native module of about 4 MB). CUDA and OpenCL are build-time feature gates, not published wheels; OpenCL remains a documented source-build path. Whether the local runtime can actually use a GPU is answered at runtime by `cuda_is_available()`, which the CPU fallback and the `AutoDecoder` controller consult before selecting a path. The manual also records a known GPU-context limitation: the native CUDA path and CuPy can use different CUDA contexts, and an intermittent access violation was observed under load on one tested configuration. The documented workaround is to run those workloads in separate processes, or hide the device for a monolithic suite. diff --git a/source/public/blog/10_benchmarks_architecture.md b/source/public/blog/10_benchmarks_architecture.md index 89932731..c48469a6 100644 --- a/source/public/blog/10_benchmarks_architecture.md +++ b/source/public/blog/10_benchmarks_architecture.md @@ -83,7 +83,7 @@ Every report should carry: | Environment | OS, CPU, RAM, Python/Rust/package versions, GPU/runtime, commit | | Artifact | Raw JSON/CSV path and SHA-256 | -The only published comparative LER figure is the v1.0.0 changelog's 120-test suite against PyMatching, reported with a stated 4.5x margin. The head-to-head numbers include repetition-code distance 3 at p=0.01, where QECTOR records 0.00392 against PyMatching's 0.00317. Any new comparison should hold the harness constant the same way. +The only published comparative LER figure is the v1.0.0 changelog's 120-test suite against PyMatching. The head-to-head numbers include repetition-code distance 3 at p=0.01, where 12 000 seeded shots give `ler_qector_blossom = 0.00392` against `ler_pymatching = 0.00317`: a delta of 0.00075 against a gate of `+1e-3` (source: [decoder CHANGELOG, section 1.0.0](https://github.com/GuillaumeLessard/qector-decoder/blob/main/CHANGELOG.md)). Any new comparison should hold the harness constant the same way. ## 5. Wilson intervals and comparability diff --git a/source/public/blog/15_logical_error_rates.md b/source/public/blog/15_logical_error_rates.md index 30ef3822..233ae3f1 100644 --- a/source/public/blog/15_logical_error_rates.md +++ b/source/public/blog/15_logical_error_rates.md @@ -70,7 +70,7 @@ Then the decoder row is the changing factor. Mixing a code-capacity QECTOR run w ## 5. An example of a published comparison -The v1.0.0 package changelog ships a 120-test LER suite against PyMatching on a repetition code at `d=3` and `p=0.01`. It reports `ler_qector=0.00392` and `ler_pymatching=0.00317`, described as agreeing within a declared 4.5x margin. +The v1.0.0 package changelog ships a 120-test LER suite against PyMatching on a repetition code at `d=3` and `p=0.01`. Over 12 000 seeded shots it reports `ler_qector_blossom=0.00392` and `ler_pymatching=0.00317`: a delta of 0.00075, inside the declared `+1e-3` gate (source: [decoder CHANGELOG, section 1.0.0](https://github.com/GuillaumeLessard/qector-decoder/blob/main/CHANGELOG.md)). These are measurements on one fixed workload, not universal claims. Their value is the discipline behind them: both decoders ran the same workload with the same noise value, so the comparison isolates the decoder rather than the setup. diff --git a/source/public/blog/16_decoder_selection.md b/source/public/blog/16_decoder_selection.md index b5063921..ef95b65e 100644 --- a/source/public/blog/16_decoder_selection.md +++ b/source/public/blog/16_decoder_selection.md @@ -111,7 +111,7 @@ For a single online round with a tight latency budget, the same physical code mi ## 7. Do not confuse API stability with algorithmic scope -Version 1.0.0 freezes a stable surface for the whole 1.x line. Stable symbols include `UnionFindDecoder`, `BlossomDecoder`, `SparseBlossomDecoder`, `NativeAutoDecoder`, the four `generate_*_code_checks` helpers, `set_license_key`, `get_license_info`, the Sinter and qiskit-qec entry points, and `DecodeResult`. +Version 1.0.0 freezes a stable surface for the whole 1.x line. Stable symbols include `UnionFindDecoder`, `BlossomDecoder`, `SparseBlossomDecoder`, `NativeAutoDecoder`, the five `generate_*_code_checks` helpers, `set_license_key`, `get_license_info`, the Sinter and qiskit-qec entry points, and `DecodeResult`. Provisional surfaces stay supported and tested, but their exact shape may change with a changelog note. This group includes BP-OSD tuning kwargs, GPU batch constructors, and network surfaces. diff --git a/source/public/blog/19_release_licensing.md b/source/public/blog/19_release_licensing.md index 2abfde8e..128532cc 100644 --- a/source/public/blog/19_release_licensing.md +++ b/source/public/blog/19_release_licensing.md @@ -20,7 +20,7 @@ Stable symbols for the whole 1.x line include: ```text UnionFindDecoder, BlossomDecoder, SparseBlossomDecoder NativeAutoDecoder -the four generate_*_code_checks helpers +the five generate_*_code_checks helpers set_license_key, get_license_info the Sinter and qiskit-qec entry points DecodeResult @@ -53,6 +53,8 @@ The v1.0.0 manual documents these distance caps: | Pro | 19 | No | | Enterprise | 63 | Yes | +> **Update (1.0.1), November 2026:** every paid licence, Pro or Enterprise, unlocks GPU batch decoding. + Tokens are verified offline in the Rust core using Ed25519, with expiry and an offline revocation list. Decoding never makes a blocking network call. Key resolution order: diff --git a/source/public/docs/reference.md b/source/public/docs/reference.md index cf4671d5..96e42a91 100644 --- a/source/public/docs/reference.md +++ b/source/public/docs/reference.md @@ -1,8 +1,8 @@ # QECTOR Decoder v3 Reference -Version: 1.0.0 -Reference manual: [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) -Package: `qector-decoder-v3==1.0.0` +Version: 1.0.1 +Reference manual (v1.0.0): [10.5281/zenodo.21941046](https://doi.org/10.5281/zenodo.21941046) +Package: `qector-decoder-v3==1.0.1` This page is the web companion to the reference manual. The PDF is normative for the complete mathematical proofs, implementation contracts, evidence anchors, limitations, and reproduction commands. diff --git a/source/public/sitemap.xml b/source/public/sitemap.xml deleted file mode 100644 index 152a9fc6..00000000 --- a/source/public/sitemap.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - https://qector.store/2026-11-06weekly1.0 - https://qector.store/decoder/2026-11-06weekly0.9 - https://qector.store/evidence/2026-11-06monthly0.8 - https://qector.store/workbench/2026-11-06monthly0.8 - https://qector.store/pricing/2026-11-06monthly0.8 - - - - - https://qector.store/fr/pricing/2026-11-06monthly0.8 - - - - - https://qector.store/commercial/2026-11-06monthly0.7 - https://qector.store/about/2026-11-06monthly0.7 - https://qector.store/guillaume-lessard/2026-11-06monthly0.7 - - https://qector.store/mcp-server/2026-11-06monthly0.6 - https://qector.store/claude-plugin/2026-11-06weekly0.8 - https://qector.store/changelog/2026-11-06weekly0.6 - https://qector.store/contact/2026-11-06monthly0.5 - https://qector.store/docs/2026-11-06monthly0.5 - https://qector.store/manual/2026-11-06monthly0.4 - https://qector.store/technical-reference/2026-11-06monthly0.4 - https://qector.store/installer/2026-11-06monthly0.4 - https://qector.store/license/2026-11-06yearly0.3 - https://qector.store/refund/2026-11-06yearly0.3 - https://qector.store/blog/2026-11-06weekly0.8 - https://qector.store/blog/01QecFoundations/2026-11-06monthly0.6 - https://qector.store/blog/02BlossomMwpmExact/2026-11-06monthly0.6 - https://qector.store/blog/03SparseBlossomEventDriven/2026-11-06monthly0.6 - https://qector.store/blog/04FastUnionFind/2026-11-06monthly0.6 - https://qector.store/blog/05BpOsdQldpc/2026-11-06monthly0.6 - https://qector.store/blog/06AmbiguityGnnNeural/2026-11-06monthly0.6 - https://qector.store/blog/07SpaceTimeDecoder/2026-11-06monthly0.6 - https://qector.store/blog/08AutoDecoderCascade/2026-11-06monthly0.6 - https://qector.store/blog/09GpuAcceleration/2026-11-06monthly0.6 - https://qector.store/blog/10BenchmarksArchitecture/2026-11-06monthly0.6 - https://qector.store/blog/11SteaneWorkedDecode/2026-11-06monthly0.6 - https://qector.store/blog/12RotatedSurfaceD3/2026-11-06monthly0.6 - https://qector.store/blog/13DemPipeline/2026-11-06monthly0.6 - https://qector.store/blog/14WeightedDecoding/2026-11-06monthly0.6 - https://qector.store/blog/15LogicalErrorRates/2026-11-06monthly0.6 - https://qector.store/blog/16DecoderSelection/2026-11-06monthly0.6 - https://qector.store/blog/17ReproducibleBenchmarks/2026-11-06monthly0.6 - https://qector.store/blog/18RustPyo3Architecture/2026-11-06monthly0.6 - https://qector.store/blog/19ReleaseLicensing/2026-11-06monthly0.6 - https://qector.store/blog/20EcosystemIntegration/2026-11-06monthly0.6 - - - - diff --git a/source/scripts/deploy-pages.mjs b/source/scripts/deploy-pages.mjs new file mode 100644 index 00000000..ecf516db --- /dev/null +++ b/source/scripts/deploy-pages.mjs @@ -0,0 +1,123 @@ +#!/usr/bin/env node +// Publish dist/ to the `gh-pages` branch, the branch GitHub Pages serves. +// +// Why a branch: Pages used to serve the root of `main`, which put the React +// source, the Workers and their tests on qector.store and left every old +// build's hashed files in the repository. The branch holds the built site and +// nothing else, and needs no GitHub Actions minutes. +// +// Usage, from source/: +// npm run build && npm run deploy commit to the local branch only +// npm run build && npm run deploy -- --push also push, which publishes +// +// Tabs that were open before a deploy keep working: the hashed files of the +// previous build are kept for one more generation (.deploy-manifest.json +// records which files belong to the current one). + +import { execFileSync } from 'node:child_process'; +import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join, resolve } from 'node:path'; + +const BRANCH = 'gh-pages'; +const MANIFEST = '.deploy-manifest.json'; +const sourceDir = resolve(import.meta.dirname, '..'); +const repo = resolve(sourceDir, '..'); +const dist = join(sourceDir, 'dist'); +const push = process.argv.includes('--push'); + +const git = (args, cwd = repo) => execFileSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim(); +const tryGit = (args, cwd) => { + try { + return git(args, cwd); + } catch { + return null; + } +}; +const fail = (message) => { + console.error(`deploy: ${message}`); + process.exit(1); +}; + +// ── What is about to be published ─────────────────────────────────────────── +for (const required of ['index.html', '404.html', 'CNAME', '.nojekyll', 'sitemap.xml', 'assets']) { + if (!existsSync(join(dist, required))) fail(`dist/${required} is missing. Run \`npm run build\` first.`); +} +// A build without the prerender step has no page footer in its route shells. +if (!readFileSync(join(dist, 'pricing', 'index.html'), 'utf8').includes(' { + tryGit(['worktree', 'remove', '--force', work]); + rmSync(work, { recursive: true, force: true }); +}; + +try { + tryGit(['fetch', '--quiet', 'origin', BRANCH]); + const base = tryGit(['rev-parse', '--verify', '--quiet', `origin/${BRANCH}`]) || tryGit(['rev-parse', '--verify', '--quiet', BRANCH]); + if (base) { + git(['worktree', 'add', '--quiet', '--force', '-B', BRANCH, work, base]); + } else { + git(['worktree', 'add', '--quiet', '--detach', work]); + git(['checkout', '--quiet', '--orphan', BRANCH], work); + } + + // Hashed files of the build that is live right now: kept for one generation. + // Publishing the same build twice keeps what was already being kept. + let previous = []; + try { + const manifest = JSON.parse(readFileSync(join(work, MANIFEST), 'utf8')); + const live = manifest.assets ?? []; + const sameBuild = live.length === assets.length && live.every((name) => assets.includes(name)); + previous = sameBuild ? manifest.previous_assets ?? [] : live; + } catch { + // First deploy with this script: nothing to carry over. + } + const carried = join(work, '..', `${work.split('/').pop()}-carried`); + mkdirSync(carried, { recursive: true }); + const kept = []; + for (const name of previous) { + const from = join(work, 'assets', name); + if (!assets.includes(name) && /^[\w.-]+$/.test(name) && existsSync(from)) { + cpSync(from, join(carried, name)); + kept.push(name); + } + } + + // Replace the tree with the new build. + for (const entry of readdirSync(work)) { + if (entry !== '.git') rmSync(join(work, entry), { recursive: true, force: true }); + } + cpSync(dist, work, { recursive: true }); + for (const name of kept) cpSync(join(carried, name), join(work, 'assets', name)); + rmSync(carried, { recursive: true, force: true }); + writeFileSync( + join(work, MANIFEST), + `${JSON.stringify({ source_commit: `${commit}${dirty ? '+uncommitted' : ''}`, assets, previous_assets: kept.sort() }, null, 1)}\n`, + ); + + git(['add', '--all'], work); + if (git(['status', '--porcelain'], work) === '') { + console.log('deploy: the branch already holds this build; nothing to publish.'); + } else { + git(['commit', '--quiet', '-m', `deploy: site at ${commit}${dirty ? ' (plus uncommitted changes)' : ''}`], work); + console.log(`deploy: committed to ${BRANCH} (${assets.length} hashed files, ${kept.length} kept from the previous build).`); + console.log(git(['show', '--stat', '--format=%h %s', 'HEAD'], work).split('\n').slice(-1)[0]); + } + + if (push) { + git(['push', 'origin', `${BRANCH}:${BRANCH}`], work); + console.log(`deploy: pushed. GitHub Pages publishes ${BRANCH} within a minute or two.`); + } else { + console.log(`deploy: not pushed. Review with \`git log -1 --stat ${BRANCH}\`, then run \`npm run deploy -- --push\`.`); + } +} finally { + cleanup(); +} diff --git a/source/scripts/og-images.mjs b/source/scripts/og-images.mjs index f5c0b4b9..1c640503 100644 --- a/source/scripts/og-images.mjs +++ b/source/scripts/og-images.mjs @@ -17,6 +17,7 @@ const dist = join(root, 'dist'); const out = join(root, 'public', 'og'); mkdirSync(out, { recursive: true }); const logo = `data:image/png;base64,${readFileSync(join(root, 'public/images/logo.png')).toString('base64')}`; +const inter = `data:font/woff2;base64,${readFileSync(join(root, 'node_modules/@fontsource-variable/inter/files/inter-latin-wght-normal.woff2')).toString('base64')}`; export function slugFor(route) { return route === '/' ? 'home' : route.replace(/^\//, '').replace(/\//g, '--'); @@ -45,8 +46,9 @@ function section(route) { function card(title, description, label) { return `